diff --git a/test/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-called-once.js b/test/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-called-once.js
index c3b3e173b359cba8b277e5634a074640b00d35e1..af33b68d0409605b98ef9fe56bbf88d4f5172269 100644
--- a/test/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-called-once.js
+++ b/test/built-ins/RegExp/prototype/Symbol.matchAll/isregexp-called-once.js
@@ -36,6 +36,7 @@ var o = {
     return {
       toString() {
         calls.push('flags toString');
+        return "";
       }
     };
   },
@@ -50,7 +51,7 @@ RegExp.prototype[Symbol.matchAll].call(o, {
 assert.sameValue(0, internalCount);
 
 assert.sameValue(calls.length, 4);
-assert.sameValue(calls[0], 'get @@match');
-assert.sameValue(calls[1], 'arg toString');
-assert.sameValue(calls[2], 'get flags');
-assert.sameValue(calls[3], 'flags toString');
+assert.sameValue(calls[0], 'arg toString');
+assert.sameValue(calls[1], 'get flags');
+assert.sameValue(calls[2], 'flags toString');
+assert.sameValue(calls[3], 'get @@match');
diff --git a/test/intl402/Collator/ignore-invalid-unicode-ext-values.js b/test/intl402/Collator/ignore-invalid-unicode-ext-values.js
index 28fe35e03e3112407896175c97f3d27c83177637..e6c88ed3add5965dd3733a36dcb05329d23bd44e 100644
--- a/test/intl402/Collator/ignore-invalid-unicode-ext-values.js
+++ b/test/intl402/Collator/ignore-invalid-unicode-ext-values.js
@@ -24,7 +24,7 @@ var defaultLocale = defaultOptions.locale;
 var defaultSortedArray = testArray.slice(0).sort(defaultCollator.compare);
 
 var keyValues = {
-    "co": ["standard", "search"],
+    "co": ["standard", "search", "invalid"],
     "ka": ["noignore", "shifted", "invalid"],
     "kb": ["true", "false", "invalid"],
     "kc": ["true", "false", "invalid"],
diff --git a/test/intl402/DateTimeFormat/ignore-invalid-unicode-ext-values.js b/test/intl402/DateTimeFormat/ignore-invalid-unicode-ext-values.js
index 37ba0c7b63d270ab21e56c1b4c4376dd2eb080ab..a6e6661323a981c644fd229db7e296d0a28357b5 100644
--- a/test/intl402/DateTimeFormat/ignore-invalid-unicode-ext-values.js
+++ b/test/intl402/DateTimeFormat/ignore-invalid-unicode-ext-values.js
@@ -21,7 +21,7 @@ locales.forEach(function (locale) {
 
     var keyValues = {
         "cu": ["USD", "EUR", "JPY", "CNY", "TWD", "invalid"], // DateTimeFormat internally uses NumberFormat
-        "nu": ["native", "traditio", "finance"],
+        "nu": ["native", "traditio", "finance", "invalid"],
         "tz": ["usnavajo", "utcw01", "aumel", "uslax", "usnyc", "deber", "invalid"]
     };
     
diff --git a/test/intl402/ListFormat/constructor/constructor/locales-valid.js b/test/intl402/ListFormat/constructor/constructor/locales-valid.js
index 07cd4b7644512ed03cb55bc4c011fac70bded282..b2a663a5399dff970549f0d8ceae1f555cef3773 100644
--- a/test/intl402/ListFormat/constructor/constructor/locales-valid.js
+++ b/test/intl402/ListFormat/constructor/constructor/locales-valid.js
@@ -18,14 +18,16 @@ const tests = [
   ["EN", "en", "Single value"],
   [[], defaultLocale, "Empty array"],
   [["en-GB-oed"], "en-GB", "Grandfathered"],
-  [["x-private"], defaultLocale, "Private"],
+  [["x-private"], defaultLocale, "Private", ["lookup"]],
   [["en", "EN"], "en", "Duplicate value (canonical first)"],
   [["EN", "en"], "en", "Duplicate value (canonical last)"],
   [{ 0: "DE", length: 0 }, defaultLocale, "Object with zero length"],
   [{ 0: "DE", length: 1 }, "de", "Object with length"],
 ];
 
-for (const [locales, expected, name] of tests) {
-  const rtf = new Intl.ListFormat(locales);
-  assert.sameValue(rtf.resolvedOptions().locale, expected, name);
+for (const [locales, expected, name, matchers = ["lookup", "best fit"]] of tests) {
+  for (const matcher of matchers) {
+    const rtf = new Intl.ListFormat(locales, {localeMatcher: matcher});
+    assert.sameValue(rtf.resolvedOptions().locale, expected, name);
+  }
 }
diff --git a/test/intl402/Locale/constructor-options-numeric-undefined.js b/test/intl402/Locale/constructor-options-numeric-undefined.js
index ee3c787bfab5e6b0aafa9a422fbfcc2b19c2acbf..2d591cf83b6c9d538a921cd7befcb15fdbf1ced3 100644
--- a/test/intl402/Locale/constructor-options-numeric-undefined.js
+++ b/test/intl402/Locale/constructor-options-numeric-undefined.js
@@ -43,12 +43,12 @@ assert.sameValue(
 
 assert.sameValue(
   new Intl.Locale('en-u-kn-true', options).toString(),
-  "en-u-kn-true",
-  'new Intl.Locale("en-u-kn-true", {numeric: undefined}).toString() returns "en-u-kn-true"'
+  "en-u-kn",
+  'new Intl.Locale("en-u-kn-true", {numeric: undefined}).toString() returns "en-u-kn"'
 );
 
 assert.sameValue(
   new Intl.Locale('en-u-kf-lower', options).numeric,
-  undefined,
-  'The value of new Intl.Locale("en-u-kf-lower", {numeric: undefined}).numeric equals `undefined`'
+  false,
+  'The value of new Intl.Locale("en-u-kf-lower", {numeric: undefined}).numeric equals `false`'
 );
diff --git a/test/intl402/Locale/constructor-options-numeric-valid.js b/test/intl402/Locale/constructor-options-numeric-valid.js
index 77ae60af3662930cbf87a2da41fa89d77b9f0060..9ef90723a144444406003db8d23e4f2f223a8024 100644
--- a/test/intl402/Locale/constructor-options-numeric-valid.js
+++ b/test/intl402/Locale/constructor-options-numeric-valid.js
@@ -46,7 +46,7 @@ const validNumericOptions = [
   [{ valueOf() { return false; } }, true],
 ];
 for (const [numeric, expected] of validNumericOptions) {
-  let expect = `en-u-kn-${expected}`;
+  let expect = expected ? "en-u-kn" : "en-u-kn-false";
 
   assert.sameValue(
     new Intl.Locale('en', {numeric}).toString(),
diff --git a/test/intl402/Locale/constructor-parse-twice.js b/test/intl402/Locale/constructor-parse-twice.js
index 868bca3047ad613a4ed96cf25f734cbaee340f76..93e7e51efdfc917d05e0230b120fc556f6c0d3ae 100644
--- a/test/intl402/Locale/constructor-parse-twice.js
+++ b/test/intl402/Locale/constructor-parse-twice.js
@@ -22,17 +22,17 @@ const testData = [
   // Irregular grandfathered tags.
 
   // "en-GB-oed" is a grandfathered tag, so we can't add "US". After it is
-  // canonicalized to "en-GB-oxendict" we can append "u-ca-gregory".
+  // canonicalized to "en-GB-oxendict" we can append "US" and "u-ca-gregory".
   {
     tag: "en-GB-oed",
     options: {
       region: "US",
       calendar: "gregory",
     },
-    canonical: "en-GB-oxendict-u-ca-gregory",
+    canonical: "en-US-oxendict-u-ca-gregory",
   },
 
-  // Canonicalized version of the above, which we can add "US" to.
+  // Canonicalized version of the above, which we can add "US" to right away.
   {
     tag: "en-GB-oxendict",
     options: {
@@ -45,14 +45,14 @@ const testData = [
   // Regular grandfathered tags.
 
   // "no-bok" is a grandfathered, so "NO"/"SE" isn't added. After
-  // canonicalization we can append "u-ca-gregory".
+  // canonicalization we can append "NO"/"SE" and "u-ca-gregory".
   {
     tag: "no-bok",
     options: {
       region: "NO",
       calendar: "gregory",
     },
-    canonical: "nb-u-ca-gregory",
+    canonical: "nb-NO-u-ca-gregory",
   },
 
   {
@@ -61,7 +61,7 @@ const testData = [
       region: "SE",
       calendar: "gregory",
     },
-    canonical: "nb-u-ca-gregory",
+    canonical: "nb-SE-u-ca-gregory",
   },
 
   // "no-bok-NO" isn't a grandfathered tag, so we can replace "NO" with "SE"
diff --git a/test/intl402/Locale/constructor-tag-tostring.js b/test/intl402/Locale/constructor-tag-tostring.js
index b8148e6d36f37e75501b15cb09ac7880b1707b50..f252caa155b194d33fbed55624c4afa8ef47eea1 100644
--- a/test/intl402/Locale/constructor-tag-tostring.js
+++ b/test/intl402/Locale/constructor-tag-tostring.js
@@ -33,6 +33,5 @@ const errors = [
 for (const input of errors) {
   assert.throws(CustomError, function() {
     new Intl.Locale(input);
-  },
-  `new Intl.Locale(${input}) throws CustomError`);
+  });
 }
diff --git a/test/intl402/Locale/extensions-grandfathered.js b/test/intl402/Locale/extensions-grandfathered.js
index 7601934f8d93d9f140d1f2df5f8397f67411e473..096c8273f22cea77aa2b62d060c4ca2eefc8f2fa 100644
--- a/test/intl402/Locale/extensions-grandfathered.js
+++ b/test/intl402/Locale/extensions-grandfathered.js
@@ -43,13 +43,7 @@ const testData = [
             region: "DE",
             numberingSystem: "latn",
         },
-        canonical: "i-default",
-        extensions: {
-            language: undefined,
-            script: undefined,
-            region: undefined,
-            numberingSystem: undefined,
-        },
+        canonical: "fr-Cyrl-DE-u-nu-latn",
     },
 
     // Irregular grandfathered with modern replacement.
@@ -61,13 +55,7 @@ const testData = [
             region: "US",
             numberingSystem: "latn",
         },
-        canonical: "en-GB-oxendict-u-nu-latn",
-        extensions: {
-            language: "en",
-            script: undefined,
-            region: "GB",
-            numberingSystem: "latn",
-        },
+        canonical: "fr-Cyrl-US-oxendict-u-nu-latn",
     },
 
     // Regular grandfathered without modern replacement.
@@ -79,13 +67,7 @@ const testData = [
             region: "FR",
             numberingSystem: "latn",
         },
-        canonical: "cel-gaulish",
-        extensions: {
-            language: undefined,
-            script: undefined,
-            region: undefined,
-            numberingSystem: undefined,
-        },
+        canonical: "fr-Cyrl-FR-u-nu-latn",
     },
 
     // Regular grandfathered with modern replacement.
@@ -97,21 +79,15 @@ const testData = [
             region: "ZZ",
             numberingSystem: "latn",
         },
-        canonical: "jbo-u-nu-latn",
-        extensions: {
-            language: "jbo",
-            script: undefined,
-            region: undefined,
-            numberingSystem: "latn",
-        },
+        canonical: "fr-Cyrl-ZZ-u-nu-latn",
     },
 ];
 
-for (const {tag, options, canonical, extensions} of testData) {
+for (const {tag, options, canonical} of testData) {
     const loc = new Intl.Locale(tag, options);
     assert.sameValue(loc.toString(), canonical);
 
-    for (const [name, value] of Object.entries(extensions)) {
+    for (const [name, value] of Object.entries(options)) {
         assert.sameValue(loc[name], value);
     }
 }
diff --git a/test/intl402/Locale/extensions-private.js b/test/intl402/Locale/extensions-private.js
index e8f39c976d69d893f415d8ff383a44a06668012c..565d815b80ec5854ba2fa48d4503cea618bb59aa 100644
--- a/test/intl402/Locale/extensions-private.js
+++ b/test/intl402/Locale/extensions-private.js
@@ -39,8 +39,8 @@ const loc = new Intl.Locale("x-default", {
   region: "DE",
   numberingSystem: "latn",
 });
-assert.sameValue(loc.toString(), "x-default");
-assert.sameValue(loc.language, undefined);
-assert.sameValue(loc.script, undefined);
-assert.sameValue(loc.region, undefined);
-assert.sameValue(loc.numberingSystem, undefined);
+assert.sameValue(loc.toString(), "fr-Cyrl-DE-u-nu-latn");
+assert.sameValue(loc.language, "fr");
+assert.sameValue(loc.script, "Cyrl");
+assert.sameValue(loc.region, "DE");
+assert.sameValue(loc.numberingSystem, "latn");
diff --git a/test/intl402/Locale/getters-grandfathered.js b/test/intl402/Locale/getters-grandfathered.js
index d4f23f6145adc320c84eda46b972051cd1ab16a3..cd54fbd66070376dae78c99757bfc962bf6e37ac 100644
--- a/test/intl402/Locale/getters-grandfathered.js
+++ b/test/intl402/Locale/getters-grandfathered.js
@@ -13,7 +13,7 @@ info: |
        subsequence of the langtag grammar.
 
     get Intl.Locale.prototype.language
-    4. If locale matches the privateuse or the grandfathered production, return undefined.
+    4. If locale matches the privateuse or the grandfathered production, return locale.
 
     get Intl.Locale.prototype.script
     4. If locale matches the privateuse or the grandfathered production, return undefined.
@@ -26,20 +26,20 @@ features: [Intl.Locale]
 // Irregular grandfathered language tag.
 var loc = new Intl.Locale("i-default");
 assert.sameValue(loc.baseName, "i-default"); // Step 4.
-assert.sameValue(loc.language, undefined);
+assert.sameValue(loc.language, "i-default");
 assert.sameValue(loc.script, undefined);
 assert.sameValue(loc.region, undefined);
 
 // Regular grandfathered language tag.
 var loc = new Intl.Locale("cel-gaulish");
 assert.sameValue(loc.baseName, "cel-gaulish"); // Step 5.
-assert.sameValue(loc.language, undefined);
+assert.sameValue(loc.language, "cel-gaulish");
 assert.sameValue(loc.script, undefined);
 assert.sameValue(loc.region, undefined);
 
 // Regular grandfathered language tag.
 var loc = new Intl.Locale("zh-min");
 assert.sameValue(loc.baseName, "zh-min"); // Step 5.
-assert.sameValue(loc.language, undefined);
+assert.sameValue(loc.language, "zh-min");
 assert.sameValue(loc.script, undefined);
 assert.sameValue(loc.region, undefined);
diff --git a/test/intl402/Locale/getters-privateuse.js b/test/intl402/Locale/getters-privateuse.js
index 3aab960681eac50dd42fd47a165509aef9ec58b1..76469c5552d904665e9a2e4c9be717abd7dec185 100644
--- a/test/intl402/Locale/getters-privateuse.js
+++ b/test/intl402/Locale/getters-privateuse.js
@@ -10,7 +10,7 @@ info: |
     4. If locale does not match the langtag production, return locale.
 
     get Intl.Locale.prototype.language
-    4. If locale matches the privateuse or the grandfathered production, return undefined.
+    4. If locale matches the privateuse or the grandfathered production, return locale.
 
     get Intl.Locale.prototype.script
     4. If locale matches the privateuse or the grandfathered production, return undefined.
@@ -23,6 +23,6 @@ features: [Intl.Locale]
 // Privateuse only language tag.
 var loc = new Intl.Locale("x-private");
 assert.sameValue(loc.baseName, "x-private");
-assert.sameValue(loc.language, undefined);
+assert.sameValue(loc.language, "x-private");
 assert.sameValue(loc.script, undefined);
 assert.sameValue(loc.region, undefined);
diff --git a/test/intl402/Locale/getters.js b/test/intl402/Locale/getters.js
index 583a1b67dd3391f27e182e069682767d253b4e56..d1af47cedbfb7b245bbd8bc68af556ad9f3c5374 100644
--- a/test/intl402/Locale/getters.js
+++ b/test/intl402/Locale/getters.js
@@ -50,7 +50,7 @@ features: [Intl.Locale]
 var langtag = "de-latn-de-u-ca-gregory-co-phonebk-hc-h23-kf-true-kn-false-nu-latn";
 var loc = new Intl.Locale(langtag);
 
-assert.sameValue(loc.toString(), "de-Latn-DE-u-ca-gregory-co-phonebk-hc-h23-kf-true-kn-false-nu-latn");
+assert.sameValue(loc.toString(), "de-Latn-DE-u-ca-gregory-co-phonebk-hc-h23-kf-kn-false-nu-latn");
 assert.sameValue(loc.baseName, "de-Latn-DE");
 assert.sameValue(loc.language, "de");
 assert.sameValue(loc.script, "Latn");
@@ -80,7 +80,7 @@ var loc = new Intl.Locale(langtag, {
     numberingSystem: "jpanfin",
 });
 
-assert.sameValue(loc.toString(), "ja-Jpan-JP-u-ca-japanese-co-search-hc-h24-kf-false-kn-true-nu-jpanfin");
+assert.sameValue(loc.toString(), "ja-Jpan-JP-u-ca-japanese-co-search-hc-h24-kf-false-kn-nu-jpanfin");
 assert.sameValue(loc.baseName, "ja-Jpan-JP");
 assert.sameValue(loc.language, "ja");
 assert.sameValue(loc.script, "Jpan");
@@ -105,7 +105,7 @@ var loc = new Intl.Locale(langtag, {
     hourCycle: "h11",
 });
 
-assert.sameValue(loc.toString(), "fr-Latn-CA-u-ca-gregory-co-standard-hc-h11-kf-true-kn-false-nu-latn");
+assert.sameValue(loc.toString(), "fr-Latn-CA-u-ca-gregory-co-standard-hc-h11-kf-kn-false-nu-latn");
 assert.sameValue(loc.baseName, "fr-Latn-CA");
 assert.sameValue(loc.language, "fr");
 assert.sameValue(loc.script, "Latn");
diff --git a/test/intl402/NumberFormat/constructor-default-value.js b/test/intl402/NumberFormat/constructor-default-value.js
index 0b6d69c9bc88ced31986a7aafe1b8f3ad21c86c7..01634ed5e6d70b4a290bf1566a01a61330940d98 100644
--- a/test/intl402/NumberFormat/constructor-default-value.js
+++ b/test/intl402/NumberFormat/constructor-default-value.js
@@ -9,7 +9,7 @@ description: >
 ---*/
 
 const actual = new Intl.NumberFormat().resolvedOptions();
-const expected = new Intl.NumberFormat([], { __proto__: null }).resolvedOptions();
+const expected = new Intl.NumberFormat([], Object.create(null)).resolvedOptions();
 
 assert.sameValue(actual.locale, expected.locale);
 assert.sameValue(actual.minimumIntegerDigits, expected.minimumIntegerDigits);
diff --git a/test/intl402/NumberFormat/ignore-invalid-unicode-ext-values.js b/test/intl402/NumberFormat/ignore-invalid-unicode-ext-values.js
index 8a0c01b4588502a72ae20d26d445972f303dc78c..0a305d052a2ccb2923315a9f60d12121b4fd9700 100644
--- a/test/intl402/NumberFormat/ignore-invalid-unicode-ext-values.js
+++ b/test/intl402/NumberFormat/ignore-invalid-unicode-ext-values.js
@@ -21,7 +21,7 @@ locales.forEach(function (locale) {
 
     var keyValues = {
         "cu": ["USD", "EUR", "JPY", "CNY", "TWD", "invalid"],
-        "nu": ["native", "traditio", "finance"]
+        "nu": ["native", "traditio", "finance", "invalid"]
     };
     
     Object.getOwnPropertyNames(keyValues).forEach(function (key) {
diff --git a/test/intl402/NumberFormat/prototype/formatToParts/default-parameter.js b/test/intl402/NumberFormat/prototype/formatToParts/default-parameter.js
index 4ab962e620d7fab936f7f955e861411e816c27e6..71202704f5e7ecaab8c77ff61e6c86258947f1e4 100644
--- a/test/intl402/NumberFormat/prototype/formatToParts/default-parameter.js
+++ b/test/intl402/NumberFormat/prototype/formatToParts/default-parameter.js
@@ -14,7 +14,11 @@ var nf = new Intl.NumberFormat();
 
 const implicit = nf.formatToParts();
 const explicit = nf.formatToParts(undefined);
-const result = [{ type: 'nan', value: 'NaN' }];
+
+// In most locales this is string "NaN", but there are exceptions, cf. "ليس رقم"
+// in Arabic, "epäluku" in Finnish, "не число" in Russian, "son emas" in Uzbek etc.
+const resultNaN = nf.format(NaN);
+const result = [{ type: 'nan', value: resultNaN }];
 
 assert(
   partsEquals(implicit, explicit),
diff --git a/test/intl402/NumberFormat/prototype/formatToParts/value-tonumber.js b/test/intl402/NumberFormat/prototype/formatToParts/value-tonumber.js
index d8d79577913b6dc8e2c7eab6972ef7f6f4b8c3a3..a12ae9fa92c3f9737ceeabcccaeab89835261e78 100644
--- a/test/intl402/NumberFormat/prototype/formatToParts/value-tonumber.js
+++ b/test/intl402/NumberFormat/prototype/formatToParts/value-tonumber.js
@@ -24,15 +24,23 @@ const toNumberResults = [
 
 const nf = new Intl.NumberFormat();
 
+function assertSameParts(actual, expected) {
+  assert.sameValue(actual.length, expected.length);
+  for (let i = 0; i < expected.length; ++i) {
+    assert.sameValue(actual[i].type, expected[i].type);
+    assert.sameValue(actual[i].value, expected[i].value);
+  }
+}
+
 toNumberResults.forEach(pair => {
   const [value, result] = pair;
-  assert.sameValue(nf.formatToParts(value), nf.formatToParts(result));
+  assertSameParts(nf.formatToParts(value), nf.formatToParts(result));
 });
 
 let count = 0;
 const dummy = {};
 dummy[Symbol.toPrimitive] = hint => (hint === 'number' ? ++count : NaN);
-assert.sameValue(nf.formatToParts(dummy), nf.formatToParts(count));
+assertSameParts(nf.formatToParts(dummy), nf.formatToParts(count));
 assert.sameValue(count, 1);
 
 assert.throws(
diff --git a/test/intl402/RelativeTimeFormat/constructor/constructor/locales-valid.js b/test/intl402/RelativeTimeFormat/constructor/constructor/locales-valid.js
index 326202e87ebbab6d0e5287dbaf366b4d4b61dc54..c192e64f7cc80a89f9cca27eec06099038dc0108 100644
--- a/test/intl402/RelativeTimeFormat/constructor/constructor/locales-valid.js
+++ b/test/intl402/RelativeTimeFormat/constructor/constructor/locales-valid.js
@@ -18,14 +18,16 @@ const tests = [
   ["EN", "en", "Single value"],
   [[], defaultLocale, "Empty array"],
   [["en-GB-oed"], "en-GB", "Grandfathered"],
-  [["x-private"], defaultLocale, "Private"],
+  [["x-private"], defaultLocale, "Private", ["lookup"]],
   [["en", "EN"], "en", "Duplicate value (canonical first)"],
   [["EN", "en"], "en", "Duplicate value (canonical last)"],
   [{ 0: "DE", length: 0 }, defaultLocale, "Object with zero length"],
   [{ 0: "DE", length: 1 }, "de", "Object with length"],
 ];
 
-for (const [locales, expected, name] of tests) {
-  const rtf = new Intl.RelativeTimeFormat(locales);
-  assert.sameValue(rtf.resolvedOptions().locale, expected, name);
+for (const [locales, expected, name, matchers = ["best fit", "lookup"]] of tests) {
+  for (const matcher of matchers) {
+    const rtf = new Intl.RelativeTimeFormat(locales, {localeMatcher: matcher});
+    assert.sameValue(rtf.resolvedOptions().locale, expected, name);
+  }
 }
diff --git a/test/language/module-code/dynamic-import/eval-self-once-script.js b/test/language/module-code/dynamic-import/eval-self-once-script.js
index 03b1288ecfb369c5d16009f492aa2213444ba013..b00a79195fe369cebd29ec4e91b3bf6a6be0566d 100644
--- a/test/language/module-code/dynamic-import/eval-self-once-script.js
+++ b/test/language/module-code/dynamic-import/eval-self-once-script.js
@@ -20,13 +20,14 @@ features: [dynamic-import]
 
 var global = fnGlobalObject();
 
-if (typeof global.evaluated === 'undefined') {
+var isFirstScript = typeof global.evaluated === 'undefined';
+if (isFirstScript) {
   global.evaluated = 0;
 }
 
 global.evaluated++;
 
-Promise.all([
+var p = Promise.all([
   import('./eval-self-once-script.js'),
   import('./eval-self-once-script.js'),
 ]).then(async () => {
@@ -34,5 +35,9 @@ Promise.all([
   await import('./eval-self-once-script.js');
   await import('./eval-self-once-script.js');
 
-  assert.sameValue(global.evaluated, 2, 'global property was defined and incremented only once');
-}).then($DONE, $DONE);
+  assert.sameValue(global.evaluated, 2, 'global property was defined once and incremented twice');
+});
+
+if (isFirstScript) {
+  p.then($DONE, $DONE);
+}