diff --git a/harness/regExpUtils.js b/harness/regExpUtils.js index 362a6d16604459d8cb866db67b949602b88708a6..2abfee3890a5481c606ab264037d534c1f24d72c 100644 --- a/harness/regExpUtils.js +++ b/harness/regExpUtils.js @@ -7,17 +7,20 @@ description: | function buildString({ loneCodePoints, ranges }) { const CHUNK_SIZE = 10000; - let result = String.fromCodePoint(...loneCodePoints); - for (const [start, end] of ranges) { + let result = Reflect.apply(String.fromCodePoint, null, loneCodePoints); + for (let i = 0; i < ranges.length; i++) { + const range = ranges[i]; + const start = range[0]; + const end = range[1]; const codePoints = []; for (let length = 0, codePoint = start; codePoint <= end; codePoint++) { codePoints[length++] = codePoint; if (length === CHUNK_SIZE) { - result += String.fromCodePoint(...codePoints); + result += Reflect.apply(String.fromCodePoint, null, codePoints); codePoints.length = length = 0; } } - result += String.fromCodePoint(...codePoints); + result += Reflect.apply(String.fromCodePoint, null, codePoints); } return result; } diff --git a/test/built-ins/Atomics/wait/no-spurious-wakeup-no-operation.js b/test/built-ins/Atomics/wait/no-spurious-wakeup-no-operation.js index a9631cc2cc9aaf8b2de36c573fcc9feb9c077d4e..2bd298c2c8258131ce3af4a455fec3f56b826a5c 100644 --- a/test/built-ins/Atomics/wait/no-spurious-wakeup-no-operation.js +++ b/test/built-ins/Atomics/wait/no-spurious-wakeup-no-operation.js @@ -56,4 +56,4 @@ assert.sameValue( 'timed-out', '$262.agent.getReport() returns "timed-out"' ); -assert.sameValue(Atomics.nofity(i32a, 0), 0, 'Atomics.nofity(i32a, 0) returns 0'); +assert.sameValue(Atomics.notify(i32a, 0), 0, 'Atomics.notify(i32a, 0) returns 0'); diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js index 652ef43764b006f37df16f9c8d6708c885992ce4..068e8057828ec636125fa20d297089edcc8f728e 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\d/ug; const matchingRange = /[0-9]/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js index 8683600954a42da089868730f417439099a445a5..b50ccca0c29814f164a959e06dc13db384b63504 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\d+/ug; const matchingRange = /[0-9]+/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js index 20d6b38be59c470f9ba68dc71398e7588d4e3e9a..9463332f41a96285bebc62cf29a55dda1596acae 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape-plus-quantifier.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\d+/g; const matchingRange = /[0-9]+/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js index d3aef45b72137230f67bca94d65c7f3fbd965377..1d1a24bbb2e47b1b4d93588ad1dde30edaaed602 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-digit-class-escape.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\d/g; const matchingRange = /[0-9]/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js index ead3d68d80dca6323c9ed4392b15e4f808c4fbb5..4728762a40acbfcb6d0b02c862e09b4a8ed00520 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\D/ug; const matchingRange = /[\0-\/:-\u{10FFFF}]/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js index 5c02690bc25fcd19010eb11264a00aecf154f976..726d595714270fd514c1d5193db05f3690b2df0e 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\D+/ug; const matchingRange = /[\0-\/:-\u{10FFFF}]+/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js index 960d9cff6430caffd71eb0ed696202e68a07582d..56a61ec4447d48112c5eae9c2ee36324d529b81e 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape-plus-quantifier.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\D+/g; const matchingRange = /[\0-\/:-\uFFFF]+/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js index 85b1dcc5ea876dd7ca79fefc0448c5f268f3544d..4da365aeb7406223fc9d16d5e7d4c4e8d0eb0530 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-digit-class-escape.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\D/g; const matchingRange = /[\0-\/:-\uFFFF]/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js index eda913b7a97ab349987bd4cddd1c5ff8683b2c33..75f85b7ab4bd6973880375d2fb75b9133cf77274 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\S/ug; const matchingRange = /[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js index 8e21a55ac506bbb9fde4c77e581174e31fc133da..ce20f50295767ae4471ed5849c539adbd4c11295 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\S+/ug; const matchingRange = /[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]+/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js index f7cc4a3b651f95cd657db407639a60c610328429..95e37779a268098bab2974dd4316eda7d01354ca 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape-plus-quantifier.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\S+/g; const matchingRange = /[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\uFFFF]+/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js index 3bca8ae4992fab312a7d55d8efb233687f6dd319..7b6dc6a87591cc1175d224aecdb195c6c8a8e941 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-whitespace-class-escape.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\S/g; const matchingRange = /[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\uFFFF]/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js index 3da454aaa04826aa5a62d180ba28a4ca112832b2..b1e689dafcf2c01f93763715827fbf3408badfb6 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\W/ug; const matchingRange = /[\0-\/:-@\[-\^`\{-\u{10FFFF}]/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js index 7e7faad7f531e91cd4330371f0b906bd0fe984ac..23e7c1fec27a28d742aa8da74f9b30aa09c2686f 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\W+/ug; const matchingRange = /[\0-\/:-@\[-\^`\{-\u{10FFFF}]+/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js index 41ffa539dd7e5c684a05fbaaa1fceaead06ef608..412b05287c15ea0e95043154039498d6ccf990c3 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape-plus-quantifier.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\W+/g; const matchingRange = /[\0-\/:-@\[-\^`\{-\uFFFF]+/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js index ca476084fd76f7cc9f6c675379dd818b2ba6856b..99051f994c2af380446581339f74d0204a4f752c 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-non-word-class-escape.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\W/g; const matchingRange = /[\0-\/:-@\[-\^`\{-\uFFFF]/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js index 82bb95029bf6f65322ea512e0c562315d51aa8a1..0cfd5f7daabec20d05375e7b0350b64997445e48 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\s/ug; const matchingRange = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js index 7a3b57ddf6958b76370e2c56972693086337ac5e..fc3c1c28ea4d63bc2dff01a662adfa5869ba0285 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\s+/ug; const matchingRange = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js index e1084ff531353cb324f7ce863bc8b55531372d1c..3f03f1a8eb06f0d268ec6b5f438d51b882ed0bba 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape-plus-quantifier.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\s+/g; const matchingRange = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]+/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js index d1a3fdacd884d6ec82c13133c8800fe5bb307610..d31b85699bcdae7c71404cc7e48ac0ad42bad499 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-whitespace-class-escape.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\s/g; const matchingRange = /[\t-\r \xA0\u1680\u2000-\u200A\u2028\u2029\u202F\u205F\u3000\uFEFF]/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js index 0b8b183b355b08fd4dd947f4f2552dc3a96ef574..d7406fe45000bff34df20b5a48275bcbb1f7eecf 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\w/ug; const matchingRange = /[0-9A-Z_a-z]/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js index d82442617aadd5727ef8a62df906c4eee60f5122..10978d7b934cdab703f0389ffe15e4e48f7349c6 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier-flags-u.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0x10ffff / 0x10000); - -for (let codePoint = 0; codePoint < 0x10FFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0x10FFFF]]}); const re = /\w+/ug; const matchingRange = /[0-9A-Z_a-z]+/ug; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js index bafffd776f3c062a3fe5f8167b5b6191f6708f09..82884b73332191e2accd1f3fd96b211d91f665db 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape-plus-quantifier.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\w+/g; const matchingRange = /[0-9A-Z_a-z]+/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js b/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js index cba30b0692df79a9aa19988b300a31cf0fe102dd..d5f87b9e69bea6be8f2fa67294ee514ff6d23f00 100644 --- a/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js +++ b/test/built-ins/RegExp/CharacterClassEscapes/character-class-word-class-escape.js @@ -33,15 +33,10 @@ info: | The production CharacterClassEscape :: W evaluates as follows: Return the set of all characters not included in the set returned by CharacterClassEscape :: w. features: [String.fromCodePoint] +includes: [regExpUtils.js] ---*/ -const chunks = []; -const totalChunks = Math.ceil(0xffff / 0x10000); - -for (let codePoint = 0; codePoint < 0xFFFF; codePoint++) { - // split strings to avoid a super long one; - chunks[codePoint % totalChunks] += String.fromCodePoint(codePoint); -} +const str = buildString({loneCodePoints: [], ranges: [[0, 0xFFFF]]}); const re = /\w/g; const matchingRange = /[0-9A-Z_a-z]/g; @@ -52,16 +47,14 @@ function matching(str) { return str.replace(re, '') === str.replace(matchingRange, ''); } -for (const str of chunks) { - if (!matching(str)) { - // Error, let's find out where - for (const char of str) { - if (!matching(char)) { - errors.push('0x' + char.codePointAt(0).toString(16)); - } +if (!matching(str)) { + // Error, let's find out where + for (const char of str) { + if (!matching(char)) { + errors.push('0x' + char.codePointAt(0).toString(16)); } } -}; +} assert.sameValue( errors.length, diff --git a/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js b/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js index b123d76a17fecdc4142961fdf2a2eefba3cd4ce6..19a4b8aea728005246dc760addb0f320fed62597 100644 --- a/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js +++ b/test/intl402/RelativeTimeFormat/prototype/format/en-us-numeric-auto.js @@ -30,6 +30,11 @@ const exceptions = { "0": "this year", "1": "next year", }, + "quarter": { + "-1": "last quarter", + "0": "this quarter", + "1": "next quarter", + }, "month": { "-1": "last month", "0": "this month", diff --git a/test/intl402/RelativeTimeFormat/prototype/format/en-us-style-short.js b/test/intl402/RelativeTimeFormat/prototype/format/en-us-style-short.js index d62341a937cdf869949962867e13a5ce67f79430..b292aadececaa996def5a08e30caae87a9e1ea71 100644 --- a/test/intl402/RelativeTimeFormat/prototype/format/en-us-style-short.js +++ b/test/intl402/RelativeTimeFormat/prototype/format/en-us-style-short.js @@ -9,14 +9,14 @@ locale: [en-US] ---*/ const units = { - "second": "sec.", - "minute": "min.", - "hour": "hr.", - "day": undefined, - "week": "wk.", - "month": "mo.", - "quarter": "qtr.", - "year": "yr.", + "second": ["sec."], + "minute": ["min."], + "hour": ["hr."], + "day": ["day", "days"], + "week": ["wk."], + "month": ["mo."], + "quarter": ["qtr.", "qtrs."], + "year": ["yr."], }; const rtf = new Intl.RelativeTimeFormat("en-US", { @@ -25,9 +25,8 @@ const rtf = new Intl.RelativeTimeFormat("en-US", { assert.sameValue(typeof rtf.format, "function", "format should be supported"); -for (const [unitArgument, unitString] of Object.entries(units)) { - const singular = unitString || `${unitArgument}`; - const plural = unitString || `${unitArgument}s`; +for (const [unitArgument, unitStrings] of Object.entries(units)) { + const [singular, plural = singular] = unitStrings; assert.sameValue(rtf.format(1000, unitArgument), `in 1,000 ${plural}`); assert.sameValue(rtf.format(10, unitArgument), `in 10 ${plural}`); assert.sameValue(rtf.format(2, unitArgument), `in 2 ${plural}`); diff --git a/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js b/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js index be604222cdc7ded7eb2684115d05176a55e01126..a7f39ae821e9d417d8e8e0a31efaedcce7e39f1d 100644 --- a/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js +++ b/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-numeric-auto.js @@ -26,6 +26,11 @@ function expected(key, unit, default_) { "0": "this year", "1": "next year", }, + "quarter": { + "-1": "last quarter", + "0": "this quarter", + "1": "next quarter", + }, "month": { "-1": "last month", "0": "this month", diff --git a/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-style-short.js b/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-style-short.js index b85809b5f5176f0166c600aa306057f57387b159..2ff39cf60864f1f3089eb7a8b8297a14a5ce4f2b 100644 --- a/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-style-short.js +++ b/test/intl402/RelativeTimeFormat/prototype/formatToParts/en-us-style-short.js @@ -19,14 +19,14 @@ function verifyFormatParts(actual, expected, message) { } const units = { - "second": "sec.", - "minute": "min.", - "hour": "hr.", - "day": undefined, - "week": "wk.", - "month": "mo.", - "quarter": "qtr.", - "year": "yr.", + "second": ["sec."], + "minute": ["min."], + "hour": ["hr."], + "day": ["day", "days"], + "week": ["wk."], + "month": ["mo."], + "quarter": ["qtr.", "qtrs."], + "year": ["yr."], }; const rtf = new Intl.RelativeTimeFormat("en-US", { @@ -35,9 +35,8 @@ const rtf = new Intl.RelativeTimeFormat("en-US", { assert.sameValue(typeof rtf.formatToParts, "function", "formatToParts should be supported"); -for (const [unitArgument, unitString] of Object.entries(units)) { - const singular = unitString || `${unitArgument}`; - const plural = unitString || `${unitArgument}s`; +for (const [unitArgument, unitStrings] of Object.entries(units)) { + const [singular, plural = singular] = unitStrings; verifyFormatParts(rtf.formatToParts(1000, unitArgument), [ { "type": "literal", "value": "in " },