Commit 7be95b70 authored by Alexandru Michis's avatar Alexandru Michis
Browse files

Backed out 2 changesets (bug 1719540) for causing bustages in RelativeTimeFormat.cpp

CLOSED TREE

Backed out changeset a6ab150a89f2 (bug 1719540)
Backed out changeset e8b05f56aa75 (bug 1719540)
parent 114db2fd
Loading
Loading
Loading
Loading
+6 −6
Original line number Diff line number Diff line
@@ -23,7 +23,6 @@
#include "mozilla/dom/ErrorEventBinding.h"
#include "mozilla/dom/WorkerScope.h"
#include "mozilla/dom/WorkerPrivate.h"
#include "mozilla/intl/LocaleCanonicalizer.h"
#include "mozilla/ipc/BackgroundChild.h"
#include "mozilla/ipc/PBackgroundChild.h"
#include "nsContentUtils.h"
@@ -40,6 +39,7 @@
#include "ProfilerHelpers.h"
#include "ScriptErrorHelper.h"
#include "nsCharSeparatedTokenizer.h"
#include "unicode/locid.h"

// Bindings for ResolveConstructors
#include "mozilla/dom/IDBCursorBinding.h"
@@ -324,11 +324,11 @@ nsresult IndexedDatabaseManager::Init() {
  // Split values on commas.
  for (const auto& lang :
       nsCCharSeparatedTokenizer(acceptLang, ',').ToRange()) {
    mozilla::intl::LocaleCanonicalizer::Vector asciiString{};
    auto result = mozilla::intl::LocaleCanonicalizer::CanonicalizeICULevel1(
        PromiseFlatCString(lang).get(), asciiString);
    if (result.isOk()) {
      mLocale.AssignASCII(asciiString);
    icu::Locale locale =
        icu::Locale::createCanonical(PromiseFlatCString(lang).get());
    if (!locale.isBogus()) {
      // icu::Locale::getBaseName is always ASCII as per BCP 47
      mLocale.AssignASCII(locale.getBaseName());
      break;
    }
  }
+0 −60
Original line number Diff line number Diff line
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "gtest/gtest.h"

#include "mozilla/intl/LocaleCanonicalizer.h"
#include "mozilla/Span.h"

namespace mozilla::intl {

static void CheckLocaleResult(LocaleCanonicalizer::Vector& ascii,
                              const char* before, const char* after) {
  auto result = LocaleCanonicalizer::CanonicalizeICULevel1(before, ascii);
  ASSERT_TRUE(result.isOk());
  ASSERT_EQ(Span(const_cast<const char*>(ascii.begin()), ascii.length()),
            MakeStringSpan(after));
}

/**
 * Asserts the behavior of canonicalization as defined in:
 * http://userguide.icu-project.org/locale#TOC-Canonicalization
 */
TEST(IntlLocaleCanonicalizer, CanonicalizeICULevel1)
{
  LocaleCanonicalizer::Vector ascii{};

  // Canonicalizes en-US
  CheckLocaleResult(ascii, "en-US", "en_US");
  // Canonicalizes POSIX
  CheckLocaleResult(ascii, "en-US-posix", "en_US_POSIX");
  // und gets changed to an empty string
  CheckLocaleResult(ascii, "und", "");
  // retains incorrect locales
  CheckLocaleResult(ascii, "asdf", "asdf");
  // makes text uppercase
  CheckLocaleResult(ascii, "es-es", "es_ES");
  // Converts 3 letter country codes to 2 letter.
  CheckLocaleResult(ascii, "en-USA", "en_US");
  // Does not perform level 2 canonicalization where the result would be
  // fr_FR@currency=EUR
  CheckLocaleResult(ascii, "fr-fr@EURO", "fr_FR_EURO");
  // Removes the .utf8 ends
  CheckLocaleResult(ascii, "ar-MA.utf8", "ar_MA");

  // Allows valid ascii inputs
  CheckLocaleResult(
      ascii,
      "abcdefghijlkmnopqrstuvwxyzABCDEFGHIJLKMNOPQRSTUVWXYZ-_.0123456789",
      "abcdefghijlkmnopqrstuvwxyzabcdefghijlkmnopqrstuvwxyz__");
  CheckLocaleResult(ascii, "exotic ascii:", "exotic ascii:");

  // Does not accept non-ascii inputs.
  ASSERT_EQ(LocaleCanonicalizer::CanonicalizeICULevel1("👍", ascii).unwrapErr(),
            ICUError::InternalError);
  ASSERT_EQ(
      LocaleCanonicalizer::CanonicalizeICULevel1("ᏣᎳᎩ", ascii).unwrapErr(),
      ICUError::InternalError);
}

}  // namespace mozilla::intl
+0 −1
Original line number Diff line number Diff line
@@ -8,7 +8,6 @@ UNIFIED_SOURCES += [
    "TestCalendar.cpp",
    "TestCollator.cpp",
    "TestDateTimeFormat.cpp",
    "TestLocaleCanonicalizer.cpp",
    "TestNumberFormat.cpp",
    "TestPluralRules.cpp",
    "TestRelativeTimeFormat.cpp",
+0 −2
Original line number Diff line number Diff line
@@ -10,7 +10,6 @@ EXPORTS.mozilla.intl = [
    "src/DateTimePatternGenerator.h",
    "src/ICU4CGlue.h",
    "src/ICUError.h",
    "src/LocaleCanonicalizer.h",
    "src/NumberFormat.h",
    "src/NumberFormatFields.h",
    "src/NumberRangeFormat.h",
@@ -24,7 +23,6 @@ UNIFIED_SOURCES += [
    "src/DateTimeFormat.cpp",
    "src/DateTimePatternGenerator.cpp",
    "src/ICU4CGlue.cpp",
    "src/LocaleCanonicalizer.cpp",
    "src/NumberFormat.cpp",
    "src/NumberFormatFields.cpp",
    "src/NumberFormatFieldsUtil.cpp",
+2 −2
Original line number Diff line number Diff line
@@ -108,8 +108,8 @@ static ICUResult FillBufferWithICUCall(Buffer& buffer,
 * A variant of FillBufferWithICUCall that accepts a mozilla::Vector rather than
 * a Buffer.
 */
template <typename ICUStringFunction, size_t InlineSize, typename CharType>
static ICUResult FillVectorWithICUCall(Vector<CharType, InlineSize>& vector,
template <typename ICUStringFunction, size_t InlineSize>
static ICUResult FillVectorWithICUCall(Vector<char16_t, InlineSize>& vector,
                                       const ICUStringFunction& strFn) {
  UErrorCode status = U_ZERO_ERROR;
  int32_t length = strFn(vector.begin(), vector.capacity(), &status);
Loading