diff --git a/test/intl402/Locale/constructor-options-language-valid-undefined.js b/test/intl402/Locale/constructor-options-language-valid-undefined.js
index 08b044abd23610c1804682950f78dc8d4e918670..388a66611bf9491259a41469d5eb5c1423524a02 100644
--- a/test/intl402/Locale/constructor-options-language-valid-undefined.js
+++ b/test/intl402/Locale/constructor-options-language-valid-undefined.js
@@ -13,10 +13,17 @@ info: |
     12. Set tag to ? ApplyOptionsToTag(tag, options).
 
     ApplyOptionsToTag( tag, options )
+
+    2. If IsStructurallyValidLanguageTag(tag) is false, throw a RangeError exception.
     ...
-    9. If tag matches neither the privateuse nor the grandfathered production, then
-        b. If language is not undefined, then
-            i. Set tag to tag with the substring corresponding to the language production replaced by the string language.
+
+    IsStructurallyValidLanguageTag ( locale )
+
+    The IsStructurallyValidLanguageTag abstract operation verifies that the
+    locale argument (which must be a String value)
+
+    represents a well-formed Unicode BCP 47 Locale Identifier" as specified in
+    Unicode Technical Standard 35 section 3.2, or successor,
 
 features: [Intl.Locale]
 ---*/
@@ -33,8 +40,4 @@ assert.sameValue(
   `new Intl.Locale('en-US', {language: undefined}).toString() returns "en-US"`
 );
 
-assert.sameValue(
-  new Intl.Locale('en-els', {language: undefined}).toString(),
-  'en-els',
-  `new Intl.Locale('en-els', {language: undefined}).toString() returns "en-els"`
-);
+assert.throws(RangeError, () => new Intl.Locale('en-els', {language: undefined}));
diff --git a/test/intl402/Locale/constructor-options-language-valid.js b/test/intl402/Locale/constructor-options-language-valid.js
index 6b7d405853d2ce926f71ee58decd2ff6be79b631..5f9723432c38b167bcc701eff158a6d06d0d8a9c 100644
--- a/test/intl402/Locale/constructor-options-language-valid.js
+++ b/test/intl402/Locale/constructor-options-language-valid.js
@@ -14,9 +14,15 @@ info: |
 
     ApplyOptionsToTag( tag, options )
     ...
-    9. If tag matches neither the privateuse nor the grandfathered production, then
-        b. If language is not undefined, then
-            i. Set tag to tag with the substring corresponding to the language production replaced by the string language.
+    2. If IsStructurallyValidLanguageTag(tag) is false, throw a RangeError exception.
+
+    IsStructurallyValidLanguageTag ( locale )
+
+    The IsStructurallyValidLanguageTag abstract operation verifies that the
+    locale argument (which must be a String value)
+
+    represents a well-formed Unicode BCP 47 Locale Identifier" as specified in
+    Unicode Technical Standard 35 section 3.2, or successor,
 
 features: [Intl.Locale]
 ---*/
@@ -25,7 +31,6 @@ const validLanguageOptions = [
   [null, 'null'],
   ['zh-cmn', 'cmn'],
   ['ZH-CMN', 'cmn'],
-  ['abcd', 'abcd'],
   [{ toString() { return 'de' } }, 'de'],
 ];
 for (const [language, expected] of validLanguageOptions) {
@@ -44,10 +49,15 @@ for (const [language, expected] of validLanguageOptions) {
     `new Intl.Locale('en-US', {language: "${language}"}).toString() returns "${expect}"`
   );
 
-  expect = expected || 'en-els';
-  assert.sameValue(
-    new Intl.Locale('en-els', {language}).toString(),
-    expect,
-    `new Intl.Locale('en-els', {language: "${language}"}).toString() returns "${expect}"`
-  );
+  assert.throws(RangeError, () => new Intl.Locale('en-els', {language}));
+
+}
+
+const invalidLanguageOptions = [
+    'abcd',
+];
+for (const language of invalidLanguageOptions) {
+  assert.throws(RangeError, () => new Intl.Locale('en', {language}));
+  assert.throws(RangeError, () => new Intl.Locale('en-US', {language}));
+  assert.throws(RangeError, () => new Intl.Locale('en-els', {language}));
 }