mirror of
https://github.com/LadybirdBrowser/ladybird.git
synced 2024-11-22 15:40:19 +00:00
LibJS: Handle existing Intl.Locale objects in CanonicalizeLocaleList
This commit is contained in:
parent
4de05faa8a
commit
27fc3cfe75
Notes:
sideshowbarker
2024-07-18 04:53:11 +09:00
Author: https://github.com/trflynn89 Commit: https://github.com/SerenityOS/serenity/commit/27fc3cfe75d Pull-request: https://github.com/SerenityOS/serenity/pull/9749 Reviewed-by: https://github.com/linusg ✅
2 changed files with 22 additions and 8 deletions
|
@ -12,6 +12,7 @@
|
|||
#include <LibJS/Runtime/Array.h>
|
||||
#include <LibJS/Runtime/GlobalObject.h>
|
||||
#include <LibJS/Runtime/Intl/AbstractOperations.h>
|
||||
#include <LibJS/Runtime/Intl/Locale.h>
|
||||
#include <LibUnicode/Locale.h>
|
||||
|
||||
namespace JS::Intl {
|
||||
|
@ -150,8 +151,7 @@ Vector<String> canonicalize_locale_list(GlobalObject& global_object, Value local
|
|||
|
||||
Object* object = nullptr;
|
||||
// 3. If Type(locales) is String or Type(locales) is Object and locales has an [[InitializedLocale]] internal slot, then
|
||||
// FIXME: When we have an Intl.Locale object, handle it it here.
|
||||
if (locales.is_string()) {
|
||||
if (locales.is_string() || (locales.is_object() && is<Locale>(locales.as_object()))) {
|
||||
// a. Let O be CreateArrayFromList(« locales »).
|
||||
object = Array::create_from(global_object, { locales });
|
||||
}
|
||||
|
@ -195,14 +195,20 @@ Vector<String> canonicalize_locale_list(GlobalObject& global_object, Value local
|
|||
return {};
|
||||
}
|
||||
|
||||
String tag;
|
||||
|
||||
// iii. If Type(kValue) is Object and kValue has an [[InitializedLocale]] internal slot, then
|
||||
// 1. Let tag be kValue.[[Locale]].
|
||||
if (key_value.is_object() && is<Locale>(key_value.as_object())) {
|
||||
// 1. Let tag be kValue.[[Locale]].
|
||||
tag = static_cast<Locale const&>(key_value.as_object()).locale();
|
||||
}
|
||||
// iv. Else,
|
||||
// 1. Let tag be ? ToString(kValue).
|
||||
// FIXME: When we have an Intl.Locale object, handle it it here.
|
||||
auto tag = key_value.to_string(global_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
else {
|
||||
// 1. Let tag be ? ToString(kValue).
|
||||
tag = key_value.to_string(global_object);
|
||||
if (vm.exception())
|
||||
return {};
|
||||
}
|
||||
|
||||
// v. If IsStructurallyValidLanguageTag(tag) is false, throw a RangeError exception.
|
||||
auto locale_id = is_structurally_valid_language_tag(tag);
|
||||
|
|
|
@ -115,4 +115,12 @@ describe("normal behavior", () => {
|
|||
"en-US-u-1k-aaa-2k-ccc",
|
||||
]);
|
||||
});
|
||||
|
||||
test("canonicalize locale objects", () => {
|
||||
const en = new Intl.Locale("en", { script: "Latn" });
|
||||
expect(Intl.getCanonicalLocales(en)).toEqual(["en-Latn"]);
|
||||
|
||||
const es = new Intl.Locale("es", { region: "419" });
|
||||
expect(Intl.getCanonicalLocales([en, es])).toEqual(["en-Latn", "es-419"]);
|
||||
});
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue