1378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath/* 2378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * Copyright (C) 2014 The Android Open Source Project 3378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * 4378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * Licensed under the Apache License, Version 2.0 (the "License"); 5378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * you may not use this file except in compliance with the License. 6378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * You may obtain a copy of the License at 7378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * 8378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * http://www.apache.org/licenses/LICENSE-2.0 9378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * 10378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * Unless required by applicable law or agreed to in writing, software 11378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * distributed under the License is distributed on an "AS IS" BASIS, 12378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * See the License for the specific language governing permissions and 14378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath * limitations under the License. 15378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath */ 16378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 17b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader#include <androidfw/LocaleData.h> 18378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath#include <androidfw/ResourceTypes.h> 19378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath#include <utils/Log.h> 20378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath#include <utils/String8.h> 21378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 22378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath#include <gtest/gtest.h> 23378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamathnamespace android { 24378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 2531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigLocaleTest, packAndUnpack2LetterLanguage) { 26378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config config; 27378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.packLanguage("en"); 28378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 29378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('e', config.language[0]); 30378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('n', config.language[1]); 31378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 32b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[4] = {1, 1, 1, 1}; 33378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackLanguage(out); 34378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('e', out[0]); 35378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('n', out[1]); 36378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[2]); 37378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[3]); 38378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 39378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath memset(out, 1, sizeof(out)); 40378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.locale = 0; 41378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackLanguage(out); 42378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[0]); 43378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[1]); 44378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[2]); 45378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[3]); 46378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 47378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 4831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigLocaleTest, packAndUnpack2LetterRegion) { 49378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config config; 50378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.packRegion("US"); 51378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 52378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('U', config.country[0]); 53378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('S', config.country[1]); 54378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 55b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[4] = {1, 1, 1, 1}; 56378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackRegion(out); 57378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('U', out[0]); 58378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('S', out[1]); 59378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[2]); 60378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[3]); 61378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 62378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 6331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigLocaleTest, packAndUnpack3LetterLanguage) { 64378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config config; 65378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.packLanguage("eng"); 66378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 67378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath // 1-00110-01 101-00100 68f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ('\x99', config.language[0]); 69f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ('\xA4', config.language[1]); 70378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 71b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[4] = {1, 1, 1, 1}; 72378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackLanguage(out); 73378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('e', out[0]); 74378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('n', out[1]); 75378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('g', out[2]); 76378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[3]); 77378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 78378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 7931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigLocaleTest, packAndUnpack3LetterLanguageAtOffset16) { 80b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath ResTable_config config; 81b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath config.packLanguage("tgp"); 82b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath 83b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // We had a bug where we would accidentally mask 84b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // the 5th bit of both bytes 85b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // 86b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // packed[0] = 1011 1100 87b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // packed[1] = 1101 0011 88b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // 89b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // which is equivalent to: 90b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // 1 [0] [1] [2] 91b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath // 1-01111-00110-10011 9231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski EXPECT_EQ(char(0xbc), config.language[0]); 9331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski EXPECT_EQ(char(0xd3), config.language[1]); 94b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath 95b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[4] = {1, 1, 1, 1}; 96b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath config.unpackLanguage(out); 97b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath EXPECT_EQ('t', out[0]); 98b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath EXPECT_EQ('g', out[1]); 99b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath EXPECT_EQ('p', out[2]); 100b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath EXPECT_EQ(0, out[3]); 101b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath} 102b2975916224caecfc2fbb84e71ebd625ce6eeb1cNarayan Kamath 10331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigLocaleTest, packAndUnpack3LetterRegion) { 104378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config config; 105378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.packRegion("419"); 106378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 107b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[4] = {1, 1, 1, 1}; 108378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackRegion(out); 109378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 110378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('4', out[0]); 111378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('1', out[1]); 112378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('9', out[2]); 113378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 114378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 115378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath/* static */ void fillIn(const char* lang, const char* country, 116378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath const char* script, const char* variant, ResTable_config* out) { 117378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath memset(out, 0, sizeof(ResTable_config)); 118378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath if (lang != NULL) { 119378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath out->packLanguage(lang); 120378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath } 121378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 122378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath if (country != NULL) { 123378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath out->packRegion(country); 124378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath } 125378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 126378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath if (script != NULL) { 127378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath memcpy(out->localeScript, script, 4); 1287960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader out->localeScriptWasComputed = false; 129b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader } else { 130b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader out->computeScript(); 1317960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader out->localeScriptWasComputed = true; 132378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath } 133378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 134378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath if (variant != NULL) { 135378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath memcpy(out->localeVariant, variant, strlen(variant)); 136378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath } 137378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 138378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 13931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigLocaleTest, IsMoreSpecificThan) { 140378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config l; 141378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config r; 142378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 143378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", NULL, NULL, NULL, &l); 144378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn(NULL, NULL, NULL, NULL, &r); 145378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 146378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(l.isMoreSpecificThan(r)); 147378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(r.isMoreSpecificThan(l)); 148378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 149378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("eng", NULL, NULL, NULL, &l); 150378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(l.isMoreSpecificThan(r)); 151378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(r.isMoreSpecificThan(l)); 152378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 153378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("eng", "419", NULL, NULL, &r); 154378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 155378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 156378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 157378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", NULL, NULL, NULL, &l); 158378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, NULL, &r); 159378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 160378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 161378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 162378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, NULL, &l); 163378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", "Latn", NULL, &r); 164378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 165378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 166378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 167378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, NULL, &l); 168378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, "POSIX", &r); 169378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 170378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 171378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 172378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", "Latn", NULL, &l); 173378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, "POSIX", &r); 174378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 175378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 1767ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 1777ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", "EG", NULL, NULL, &l); 1787ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", "EG", NULL, NULL, &r); 1797ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk memcpy(&r.localeNumberingSystem, "latn", 4); 1807ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_FALSE(l.isMoreSpecificThan(r)); 1817ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_TRUE(r.isMoreSpecificThan(l)); 1827ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 1837ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("en", "US", NULL, NULL, &l); 1847ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("es", "ES", NULL, NULL, &r); 1857ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 1867ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_FALSE(l.isMoreSpecificThan(r)); 1877ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_FALSE(r.isMoreSpecificThan(l)); 188378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 189378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 19031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigLocaleTest, setLocale) { 19191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath ResTable_config test; 19291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("en-US"); 19391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', test.language[0]); 19491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', test.language[1]); 19591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('U', test.country[0]); 19691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('S', test.country[1]); 1977960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader EXPECT_TRUE(test.localeScriptWasComputed); 198b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 19991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, test.localeVariant[0]); 200e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 20191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 20291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("eng-419"); 203b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[4] = {1, 1, 1, 1}; 20491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackLanguage(out); 20591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', out[0]); 20691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', out[1]); 20791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('g', out[2]); 20891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, out[3]); 20991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath memset(out, 1, 4); 21091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackRegion(out); 21191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('4', out[0]); 21291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('1', out[1]); 21391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('9', out[2]); 214e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 21591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 21691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("en-Latn-419"); 21791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', test.language[0]); 21891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', test.language[1]); 21991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 2207960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader EXPECT_FALSE(test.localeScriptWasComputed); 221b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 22291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackRegion(out); 22391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('4', out[0]); 22491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('1', out[1]); 22591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('9', out[2]); 226e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 227b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 228b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.setBcp47Locale("de-1901"); 229b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 230b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.unpackLanguage(out); 231b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('d', out[0]); 232b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('e', out[1]); 233b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('\0', out[2]); 2347960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader EXPECT_TRUE(test.localeScriptWasComputed); 235b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 236b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 237b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.unpackRegion(out); 238b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('\0', out[0]); 239b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("1901", test.localeVariant)); 240e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 241b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 242b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.setBcp47Locale("de-Latn-1901"); 243b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 244b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.unpackLanguage(out); 245b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('d', out[0]); 246b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('e', out[1]); 247b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('\0', out[2]); 2487960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader EXPECT_FALSE(test.localeScriptWasComputed); 249b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 250b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 251b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.unpackRegion(out); 252b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('\0', out[0]); 253b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("1901", test.localeVariant)); 254e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 255e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 256e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u-nu-latn"); 257e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ('a', test.language[0]); 258e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ('r', test.language[1]); 259e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ('E', test.country[0]); 260e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ('G', test.country[1]); 261e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_TRUE(test.localeScriptWasComputed); 262e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, memcmp("Arab", test.localeScript, 4)); 263e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeVariant[0]); 264e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, memcmp("latn", test.localeNumberingSystem, 4)); 265e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 266e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u"); 267e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 268e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 269e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u-nu"); 270e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 271e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 272e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u-attr-nu-latn"); 273e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, memcmp("latn", test.localeNumberingSystem, 4)); 274e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 275e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u-ca-gregory-nu-latn"); 276e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, memcmp("latn", test.localeNumberingSystem, 4)); 277e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 278e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u-nu-latn-ca-gregory"); 279e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, memcmp("latn", test.localeNumberingSystem, 4)); 280e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 281e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u-nu-toolongnumsys"); 282e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 283e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 284e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u-nu-latn-nu-arab"); 285e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, memcmp("latn", test.localeNumberingSystem, 4)); 286e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 287e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-EG-u-co-nu-latn"); 288e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 289e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk 290e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk test.setBcp47Locale("ar-u-co-abcd-attr-nu-latn"); 291e7bc60a954cfed8b4377a9f9b8601208781d5393Igor Viarheichyk EXPECT_EQ(0, test.localeNumberingSystem[0]); 292b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 293b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 294b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, computeScript) { 295b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config; 296b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 297b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config); 298b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("\0\0\0\0", config.localeScript, 4)); 299b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 300b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "TW", NULL, NULL, &config); 301b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Hant", config.localeScript, 4)); 302b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 303b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "CN", NULL, NULL, &config); 304b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Hans", config.localeScript, 4)); 305b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 306b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &config); 307b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", config.localeScript, 4)); 308b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 309b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "AZ", NULL, NULL, &config); 310b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", config.localeScript, 4)); 311b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 312b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "IR", NULL, NULL, &config); 313b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Arab", config.localeScript, 4)); 314b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 315b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("peo", NULL, NULL, NULL, &config); 316b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Xpeo", config.localeScript, 4)); 317b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 318b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", NULL, NULL, NULL, &config); 319b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("\0\0\0\0", config.localeScript, 4)); 320b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 321b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 322b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, getBcp47Locale_script) { 323b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config; 324b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, "Latn", NULL, &config); 325b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 326b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[RESTABLE_MAX_LOCALE_LEN]; 3277960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader config.localeScriptWasComputed = false; 328b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader config.getBcp47Locale(out); 329b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("en-Latn", out)); 330b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 3317960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader config.localeScriptWasComputed = true; 332b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader config.getBcp47Locale(out); 333b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("en", out)); 334b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 335b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 3367ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor ViarheichykTEST(ConfigLocaleTest, getBcp47Locale_numberingSystem) { 3377ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk ResTable_config config; 3387ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("en", NULL, NULL, NULL, &config); 3397ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 3407ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk char out[RESTABLE_MAX_LOCALE_LEN]; 3417ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 3427ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk memcpy(&config.localeNumberingSystem, "latn", 4); 3437ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk config.getBcp47Locale(out); 3447ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_EQ(0, strcmp("en-u-nu-latn", out)); 3457ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 3467ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("sr", "SR", "Latn", NULL, &config); 3477ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk memcpy(&config.localeNumberingSystem, "latn", 4); 3487ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk config.getBcp47Locale(out); 3497ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_EQ(0, strcmp("sr-Latn-SR-u-nu-latn", out)); 3507ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk} 3517ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 3527e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh PournaderTEST(ConfigLocaleTest, getBcp47Locale_canonicalize) { 3537e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader ResTable_config config; 3547e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader char out[RESTABLE_MAX_LOCALE_LEN]; 3557e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 3567e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", NULL, NULL, NULL, &config); 3577e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader config.getBcp47Locale(out); 3587e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_EQ(0, strcmp("tl", out)); 3597e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader config.getBcp47Locale(out, true /* canonicalize */); 3607e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_EQ(0, strcmp("fil", out)); 3617e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 3627e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, NULL, &config); 3637e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader config.getBcp47Locale(out); 3647e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_EQ(0, strcmp("tl-PH", out)); 3657e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader config.getBcp47Locale(out, true /* canonicalize */); 3667e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_EQ(0, strcmp("fil-PH", out)); 3677e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader} 3687e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 369b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, match) { 370b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config supported, requested; 371b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 372b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &supported); 373b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &requested); 374b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Empty locale matches everything (as a default). 375b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 376b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 377b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "CA", NULL, NULL, &supported); 378b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &requested); 379b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Different languages don't match. 380b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 381b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 3827e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, NULL, &supported); 3837e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &requested); 3847e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader // Equivalent languages match. 3857e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 3867e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 387b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", NULL, NULL, &supported); 388b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 389b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer the scripts, different regions don't match. 390b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 391b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 392b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", "Latn", NULL, &supported); 393b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 394b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer any of the scripts, different regions don't match. 395b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 396b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 397b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", NULL, NULL, &supported); 398b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", "Latn", NULL, &requested); 399b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer any of the scripts, different regions don't match. 400b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 401b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 402b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", NULL, NULL, NULL, &supported); 403b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 404b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // language-only resources still support language+region requests, even if we can't infer the 405b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // script. 406b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 407b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 408b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &supported); 409b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 410b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if we can't infer the scripts, exactly equal locales match. 411b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 412b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 413b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 414b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Latn", NULL, &requested); 415b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are the same, it doesn't matter if they were explicitly provided 416b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // or not, and they match. 417b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 418b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 419b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 420b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Cyrl", NULL, &requested); 421b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are different, they don't match. 422b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 423b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 424b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 425b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "IR", NULL, NULL, &requested); 426b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are different, they don't match. 427b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 428b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 429b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "IR", NULL, NULL, &supported); 430b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Arab", NULL, &requested); 431b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are the same, it doesn't matter if they were explicitly provided 432b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // or not, and they match. 433b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 434b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 435b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &supported); 436b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &requested); 437b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // en-XA is a pseudo-locale, and English resources are not a match for it. 438b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 439b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 440b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &supported); 441b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &requested); 442b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // en-XA is a pseudo-locale, and its resources don't support English locales. 443b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 444b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 445b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &supported); 446b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &requested); 447b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if they are pseudo-locales, exactly equal locales match. 448b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 449b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 450b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &supported); 451b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &requested); 452b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // ar-XB is a pseudo-locale, and Arabic resources are not a match for it. 453b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 454b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 455b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &supported); 456b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &requested); 457b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // ar-XB is a pseudo-locale, and its resources don't support Arabic locales. 458b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 459b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 460b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &supported); 461b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &requested); 462b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if they are pseudo-locales, exactly equal locales match. 463b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 4647ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 4657ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", "EG", NULL, NULL, &supported); 4667ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", "TN", NULL, NULL, &requested); 4677ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk memcpy(&supported.localeNumberingSystem, "latn", 4); 4687ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_TRUE(supported.match(requested)); 4694de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader} 4704de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader 4714de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh PournaderTEST(ConfigLocaleTest, match_emptyScript) { 4724de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader ResTable_config supported, requested; 4734de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader 4744de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader fillIn("fr", "FR", NULL, NULL, &supported); 4754de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &requested); 4764de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader 4774de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader // emulate packages built with older AAPT 4784de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader memset(supported.localeScript, '\0', 4); 4797960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader supported.localeScriptWasComputed = false; 4804de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader 4814de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 482b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 483b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 484b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_basics) { 485b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config1, config2, request; 486b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 487b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &request); 488b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "FR", NULL, NULL, &config1); 489b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &config2); 490b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 491b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 492b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 493b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &request); 494b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 495b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 496b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 497b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 498b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 499b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &request); 500b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "FR", NULL, NULL, &config1); 501b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 502b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 503b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 504b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 505b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &request); 5067e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &config1); 5077e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &config2); 5087e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 5097e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 5107e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 5117e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &request); 512b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &config1); 513b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1996", &config2); 514b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 515b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 516b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 517b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &request); 518b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &config1); 519b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &config2); 520b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 521b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 522b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 523b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &request); 524b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1996", &config1); 525b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &config2); 526b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 527b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 5287e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 5297e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &request); 5307e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, NULL, &config1); 5317e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "US", NULL, NULL, &config2); 5327e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 5337e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 5347e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 5357e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, "fonipa", &request); 5367e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, "fonipa", &config1); 5377e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &config2); 5387e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 5397e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 5407e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 5417e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &request); 5427e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &config1); 5437e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, NULL, &config2); 5447e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 5457e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 546b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 547b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 548b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_regionComparison) { 549b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config1, config2, request; 550b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 551b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 552b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 553b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 554b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Both supported locales are the same, so none is better than the other. 555b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 556b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 557b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 558b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 559b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &config1); 560b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 561b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // An exact locale match is better than a parent. 562b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 563b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 564b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 565b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 566b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 567b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config2); 568b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 569b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 570b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 571b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 572b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 573b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 574b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 575b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent representative locale. 576b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 577b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 578b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 579b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 580b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config1); 581b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 582b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent representative locale. 583b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 584b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 585b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 586b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 587b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "PE", NULL, NULL, &config1); 588b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 589b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 590b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 591b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 592b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 593b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 594a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config1); 595a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config2); 596a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Special case for Latin American Spanish: es-MX and es-US are 597a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // pseudo-parents of all Latin Ameircan Spanish locales. 598a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 599a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 600a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader 601a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &request); 602a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config1); 603a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config2); 604a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Special case for Latin American Spanish: es-MX and es-US are 605a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // pseudo-parents of all Latin Ameircan Spanish locales. 606a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 607a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 608a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader 609a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 610a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config1); 611a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config2); 612a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Special case for Latin American Spanish: es-MX and es-US are 613a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // pseudo-parents of all Latin Ameircan Spanish locales. 614a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 615a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 616a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader 617a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "US", NULL, NULL, &request); 618a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config1); 619a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config2); 620a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Special case for Latin American Spanish: es-MX and es-US are 621a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // pseudo-parents of all Latin Ameircan Spanish locales. 622a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 623a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 624a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader 625a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 626a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 627a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config2); 628a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Even though es-MX and es-US are pseudo-parents of all Latin Ameircan 629a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Spanish locales, es-419 is a closer parent. 630a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 631a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 632a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader 633a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "US", NULL, NULL, &request); 634a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 635a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config2); 636a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Even though es-MX and es-US are pseudo-parents of all Latin Ameircan 637a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Spanish locales, es-419 is a closer parent. 638a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 639a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 640a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader 641a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &request); 642a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 643a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config2); 644a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Even though es-MX and es-US are pseudo-parents of all Latin Ameircan 645a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Spanish locales, es-419 is a closer parent. 646a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 647a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 648a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader 649a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 650b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config1); 651b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "BO", NULL, NULL, &config2); 652a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Special case for Latin American Spanish: es-MX and es-US are 653a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // pseudo-parents of all Latin Ameircan Spanish locales. 654b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 655b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 656b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 657b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 658b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config1); 659b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "BO", NULL, NULL, &config2); 660a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // Special case for Latin American Spanish: es-MX and es-US are 661a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader // pseudo-parents of all Latin Ameircan Spanish locales. 662a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 663a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 664a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader 665a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "IC", NULL, NULL, &request); 666a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config1); 667a192a8ced65ceea8bfe44f0eac6a394cbf80d936Roozbeh Pournader fillIn("es", "GQ", NULL, NULL, &config2); 668b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 669b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 670b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 671b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 672b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 673b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config1); 674b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config2); 675b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better. 676b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 677b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 678b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 679b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "GQ", NULL, NULL, &request); 680b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "IC", NULL, NULL, &config1); 681b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 682b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better and 683b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // letters are better than numbers. 684b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 685b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 686b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 687b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &request); 688b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config1); 689b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &config2); 690b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 691b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 692b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 693b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 694b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 695b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 696b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 697b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 698b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 699b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 700b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 701b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "DE", NULL, NULL, &request); 702b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "150", NULL, NULL, &config1); 703b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 704b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 705b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 706b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 707b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 708b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 709b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config1); 710b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "US", NULL, NULL, &config2); 711b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 712b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 713b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 714b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 715b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 716b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config1); 717b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &config2); 718b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 719b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 720b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 721b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 722b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 723b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &config1); 724b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config2); 725b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 726b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 727b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 728b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 729b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 730b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config1); 731b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "CA", NULL, NULL, &config2); 732b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better. 733b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 734b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 735b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 736b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "MZ", NULL, NULL, &request); 737b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "PT", NULL, NULL, &config1); 738b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", NULL, NULL, NULL, &config2); 739b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 740b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 741b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 742b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 743b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "MZ", NULL, NULL, &request); 744b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "PT", NULL, NULL, &config1); 745b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "BR", NULL, NULL, &config2); 746b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 747b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 748b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 749b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 750b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "MO", "Hant", NULL, &request); 751b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "HK", "Hant", NULL, &config1); 752b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "TW", "Hant", NULL, &config2); 753b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 754b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 755b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 756b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 757b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "US", "Hant", NULL, &request); 758b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "TW", "Hant", NULL, &config1); 759b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "HK", "Hant", NULL, &config2); 760b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 761b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 762b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 763b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 764b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "DZ", NULL, NULL, &request); 765b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config1); 766b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &config2); 767b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 768b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 769b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 770b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 771b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "EG", NULL, NULL, &request); 772b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &config1); 773b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config2); 774b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 775b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 776b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 777b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 778b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "QA", NULL, NULL, &request); 779b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "EG", NULL, NULL, &config1); 780b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "BH", NULL, NULL, &config2); 781b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 782b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 783b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 784b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 785b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "QA", NULL, NULL, &request); 786b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "SA", NULL, NULL, &config1); 787b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config2); 788b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better and 789b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // letters are better than numbers. 790b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 791b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 79291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath} 793378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 7947ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor ViarheichykTEST(ConfigLocaleTest, isLocaleBetterThan_numberingSystem) { 7957ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk ResTable_config config1, config2, request; 7967ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 7977ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", "EG", NULL, NULL, &request); 7987ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk memcpy(&request.localeNumberingSystem, "latn", 4); 7997ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", NULL, NULL, NULL, &config1); 8007ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk memcpy(&config1.localeNumberingSystem, "latn", 4); 8017ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", NULL, NULL, NULL, &config2); 8027ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 8037ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 8047ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 8057ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", "EG", NULL, NULL, &request); 8067ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk memcpy(&request.localeNumberingSystem, "latn", 4); 8077ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", "TN", NULL, NULL, &config1); 8087ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk memcpy(&config1.localeNumberingSystem, "latn", 4); 8097ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk fillIn("ar", NULL, NULL, NULL, &config2); 8107ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_TRUE(config2.isLocaleBetterThan(config1, &request)); 8117ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 8127ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk} 8137ec28a888c7e59af02aeb0e0a9b078037d317e2eIgor Viarheichyk 81427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader// Default resources are considered better matches for US English 81527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader// and US-like English locales than International English locales 81627953c349fa1c46698f57ae5f26339560c21adacRoozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_UsEnglishIsSpecial) { 81727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader ResTable_config config1, config2, request; 81827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 81927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 82027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 82127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 82227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // default is better than International English 82327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 82427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 82527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 82627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 82727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 82827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "GB", NULL, NULL, &config2); 82927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // default is better than British English 83027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 83127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 83227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 83327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 83427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 83527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 83627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // Even for Puerto Rico, default is better than International English 83727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 83827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 83927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 84027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 84127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 84227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 84327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // "English" is better than default, since it's a parent of US English 84427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 84527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 84627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 84727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 84827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 84927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 85027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // "English" is better than default, since it's a parent of Puerto Rico English 85127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 85227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 85327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 85427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 85527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 85627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &config2); 85727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // For US English itself, we prefer default to its siblings in the parent tree 85827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 85927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 86027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader} 86127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 862b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} // namespace android 863