[Intl] Fix numberingSystem for NumberFormat

Bug: v8:8525
Change-Id: I42764afbb419825fe6af504a641a78dbb127f30c
Reviewed-on: https://chromium-review.googlesource.com/c/1355629
Commit-Queue: Frank Tang <ftang@chromium.org>
Reviewed-by: Sathya Gunasekaran <gsathya@chromium.org>
Reviewed-by: Jungshik Shin <jshin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#58067}
This commit is contained in:
Frank Tang 2018-12-06 18:27:17 +08:00 committed by Commit Bot
parent f27ac2806c
commit 157af78881
3 changed files with 31 additions and 8 deletions

View File

@ -397,11 +397,8 @@ std::string Intl::GetNumberingSystem(const icu::Locale& icu_locale) {
UErrorCode status = U_ZERO_ERROR;
std::unique_ptr<icu::NumberingSystem> numbering_system(
icu::NumberingSystem::createInstance(icu_locale, status));
std::string value;
if (U_SUCCESS(status)) {
value = numbering_system->getName();
}
return value;
if (U_SUCCESS(status)) return numbering_system->getName();
return "latn";
}
icu::Locale Intl::CreateICULocale(const std::string& bcp47_locale) {

View File

@ -90,9 +90,8 @@ Handle<JSObject> JSNumberFormat::ResolvedOptions(
Handle<String> locale =
Handle<String>(number_format_holder->locale(), isolate);
UErrorCode error = U_ZERO_ERROR;
icu::Locale icu_locale = number_format->getLocale(ULOC_VALID_LOCALE, error);
DCHECK(U_SUCCESS(error));
std::unique_ptr<char[]> locale_str = locale->ToCString();
icu::Locale icu_locale = Intl::CreateICULocale(locale_str.get());
std::string numbering_system = Intl::GetNumberingSystem(icu_locale);

27
test/intl/regress-8525.js Normal file
View File

@ -0,0 +1,27 @@
// Copyright 2018 the V8 project authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// test the numberingSystem is set correctly via -u-nu-
let dtf = new Intl.DateTimeFormat(["en-u-ba-rfoo-nu-arab-fo-obar"]);
assertEquals("arab", dtf.resolvedOptions().numberingSystem);
assertEquals("en-u-nu-arab", dtf.resolvedOptions().locale);
let nf = new Intl.NumberFormat(["en-u-ba-rfoo-nu-arab-fo-obar"]);
assertEquals("arab", nf.resolvedOptions().numberingSystem);
assertEquals("١٢٣", nf.format(123));
assertEquals("en-u-nu-arab", nf.resolvedOptions().locale);
dtf = new Intl.DateTimeFormat(["en-u-ba-rfoo-nu-thai-fo-obar"]);
assertEquals("thai", dtf.resolvedOptions().numberingSystem);
assertEquals("en-u-nu-thai", dtf.resolvedOptions().locale);
nf = new Intl.NumberFormat(["en-u-ba-rfoo-nu-thai-fo-obar"]);
assertEquals("thai", nf.resolvedOptions().numberingSystem);
assertEquals("๑๒๓", nf.format(123));
assertEquals("en-u-nu-thai", nf.resolvedOptions().locale);
nf = new Intl.NumberFormat(["ar-EG-u-nu-latn"]);
assertEquals("latn", nf.resolvedOptions().numberingSystem);
assertEquals("123", nf.format(123));
assertEquals("ar-EG-u-nu-latn", nf.resolvedOptions().locale);