formatRangeToParts.js (4432B)
1 // |reftest| skip-if(!this.hasOwnProperty("Intl")) 2 3 const Start = NumberRangeFormatParts("startRange"); 4 const End = NumberRangeFormatParts("endRange"); 5 const Shared = NumberRangeFormatParts("shared"); 6 7 const tests = { 8 "en": { 9 options: {}, 10 ranges: [ 11 // Approximation sign present. 12 { 13 start: 0, 14 end: 0, 15 result: [Shared.Approx("~"), Shared.Integer("0")], 16 }, 17 { 18 start: -0, 19 end: -0, 20 result: [Shared.Approx("~"), Shared.MinusSign("-"), Shared.Integer("0")], 21 }, 22 { 23 start: -1, 24 end: -1, 25 result: [Shared.Approx("~"), Shared.MinusSign("-"), Shared.Integer("1")], 26 }, 27 { 28 start: 0.5, 29 end: 0.5, 30 result: [Shared.Approx("~"), Shared.Integer("0"), Shared.Decimal("."), Shared.Fraction("5")], 31 }, 32 { 33 start: Infinity, 34 end: Infinity, 35 result: [Shared.Approx("~"), Shared.Inf("∞")], 36 }, 37 { 38 start: -Infinity, 39 end: -Infinity, 40 result: [Shared.Approx("~"), Shared.MinusSign("-"), Shared.Inf("∞")], 41 }, 42 43 // Proper ranges. 44 { 45 start: -2, 46 end: -1, 47 result: [Start.MinusSign("-"), Start.Integer("2"), Shared.Literal(" – "), End.MinusSign("-"), End.Integer("1")], 48 }, 49 { 50 start: -1, 51 end: 1, 52 result: [Start.MinusSign("-"), Start.Integer("1"), Shared.Literal(" – "), End.Integer("1")], 53 }, 54 { 55 start: 1, 56 end: 2, 57 result: [Start.Integer("1"), Shared.Literal("–"), End.Integer("2")], 58 }, 59 ], 60 }, 61 // Non-ASCII digits. 62 "ar-EG": { 63 options: {}, 64 ranges: [ 65 { 66 start: -2, 67 end: -1, 68 result: [Shared.Literal("\u061C"), Shared.MinusSign("-"), Start.Integer("٢"), Shared.Literal("–"), End.Integer("١")], 69 }, 70 { 71 start: -1, 72 end: -1, 73 result: [Shared.Approx("~"), Shared.Literal("\u061C"), Shared.MinusSign("-"), Shared.Integer("١")], 74 }, 75 { 76 start: -1, 77 end: 0, 78 result: [Start.Literal("\u061C"), Start.MinusSign("-"), Start.Integer("١"), Shared.Literal(" – "), End.Integer("٠")], 79 }, 80 { 81 start: 0, 82 end: 0, 83 result: [Shared.Approx("~"), Shared.Integer("٠")], 84 }, 85 { 86 start: 0, 87 end: 1, 88 result: [Start.Integer("٠"), Shared.Literal("–"), End.Integer("١")], 89 }, 90 { 91 start: 1, 92 end: 1, 93 result: [Shared.Approx("~"), Shared.Integer("١")], 94 }, 95 { 96 start: 1, 97 end: 2, 98 result: [Start.Integer("١"), Shared.Literal("–"), End.Integer("٢")], 99 }, 100 ], 101 }, 102 "th-u-nu-thai": { 103 options: {}, 104 ranges: [ 105 { 106 start: -2, 107 end: -1, 108 result: [Start.MinusSign("-"), Start.Integer("๒"), Shared.Literal(" - "), End.MinusSign("-"), End.Integer("๑")], 109 }, 110 { 111 start: -1, 112 end: -1, 113 result: [Shared.Approx("~"), Shared.MinusSign("-"), Shared.Integer("๑")], 114 }, 115 { 116 start: -1, 117 end: 0, 118 result: [Start.MinusSign("-"), Start.Integer("๑"), Shared.Literal(" - "), End.Integer("๐")], 119 }, 120 { 121 start: 0, 122 end: 0, 123 result: [Shared.Approx("~"), Shared.Integer("๐")], 124 }, 125 { 126 start: 0, 127 end: 1, 128 result: [Start.Integer("๐"), Shared.Literal("-"), End.Integer("๑")], 129 }, 130 { 131 start: 1, 132 end: 1, 133 result: [Shared.Approx("~"), Shared.Integer("๑")], 134 }, 135 { 136 start: 1, 137 end: 2, 138 result: [Start.Integer("๑"), Shared.Literal("-"), End.Integer("๒")], 139 }, 140 ], 141 }, 142 // Approximation sign may consist of multiple characters. 143 "no": { 144 options: {}, 145 ranges: [ 146 { 147 start: 1, 148 end: 1, 149 result: [Shared.Approx("ca."), Shared.Integer("1")], 150 }, 151 ], 152 }, 153 // Approximation sign can be a word. 154 "ja": { 155 options: {}, 156 ranges: [ 157 { 158 start: 1, 159 end: 1, 160 result: [Shared.Approx("約"), Shared.Integer("1")], 161 }, 162 ], 163 }, 164 }; 165 166 for (let [locale, {options, ranges}] of Object.entries(tests)) { 167 let nf = new Intl.NumberFormat(locale, options); 168 for (let {start, end, result} of ranges) { 169 assertRangeParts(nf, start, end, result); 170 } 171 } 172 173 if (typeof reportCompare === "function") 174 reportCompare(true, true);