blob: e662ddd548ea723a158660b3d9b5195234844fd2 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <fuchsia/intl/cpp/fidl.h>
#include "gtest/gtest.h"
#include "lib/fostr/fidl/fuchsia/intl/formatting.h"
#include "locale_util.h"
#include "src/lib/fidl_fuchsia_intl_ext/cpp/fidl_ext.h"
#include "src/lib/icu_data/cpp/icu_data.h"
#include "third_party/icu/source/common/unicode/localebuilder.h"
#include "third_party/icu/source/common/unicode/locid.h"
namespace intl {
namespace testing {
namespace {
using GTest = ::testing::Test;
using StringMap = std::map<std::string, std::string>;
using fuchsia::intl::CalendarId;
// Tests for LocaleUtil.
class LocaleUtilUnitTest : public GTest {
public:
static void SetUpTestSuite() {
GTest::SetUpTestSuite();
ASSERT_EQ(ZX_OK, icu_data::Initialize());
}
};
TEST_F(LocaleUtilUnitTest, LocaleIdToIcuLocale) {
UErrorCode error_code = U_ZERO_ERROR;
icu::LocaleBuilder expected_builder{};
expected_builder.setLanguageTag("fr-CA-u-ca-islam-fw-wed-tz-uslax");
const icu::Locale expected = expected_builder.build(error_code);
ASSERT_TRUE(U_SUCCESS(error_code));
ASSERT_EQ(expected, intl::LocaleIdToIcuLocale(
"fr-CA", StringMap{{"ca", "islam"}, {"fw", "wed"}, {"tz", "uslax"}})
.value());
}
TEST_F(LocaleUtilUnitTest, ExpandLocaleId_ExpandsCorrectly) {
UErrorCode error_code = U_ZERO_ERROR;
icu::Locale locale = icu::Locale::forLanguageTag("en-US-u-tz-usnyc", error_code);
const std::string expected = "en-US-u-ca-gregory-fw-sun-hc-h12-ms-ussystem-nu-latn-tz-usnyc";
const std::string actual = ExpandLocaleId(locale).value().id;
ASSERT_EQ(expected, actual);
}
TEST_F(LocaleUtilUnitTest, ExpandLocaleId_PreservesExistingOverrides) {
UErrorCode error_code = U_ZERO_ERROR;
icu::Locale locale = icu::Locale::forLanguageTag(
"en-CA-u-ca-hebrew-hc-h23-ms-metric-nu-deva-tz-usnyc", error_code);
const std::string expected = "en-CA-u-ca-hebrew-fw-sun-hc-h23-ms-metric-nu-deva-tz-usnyc";
const std::string actual = ExpandLocaleId(locale).value().id;
ASSERT_EQ(expected, actual);
}
TEST_F(LocaleUtilUnitTest, ExtractBcp47CalendarId_Valid) {
auto result = intl::ExtractBcp47CalendarId(CalendarId{.id = "und-u-ca-gregory"});
ASSERT_TRUE(result.is_ok());
ASSERT_EQ(std::string("gregory"), result.value());
}
TEST_F(LocaleUtilUnitTest, ExtractBcp47CalendarId_Invalid) {
ASSERT_TRUE(intl::ExtractBcp47CalendarId(CalendarId{.id = "und-u-cagregory"}).is_error());
}
} // namespace
} // namespace testing
} // namespace intl