ConfigLocale_test.cpp revision 27953c349fa1c46698f57ae5f26339560c21adac
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); 128b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader out->localeScriptWasProvided = true; 129b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader } else { 130b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader out->computeScript(); 131b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader out->localeScriptWasProvided = false; 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)); 176378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 177378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 17831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigLocaleTest, setLocale) { 17991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath ResTable_config test; 18091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("en-US"); 18191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', test.language[0]); 18291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', test.language[1]); 18391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('U', test.country[0]); 18491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('S', test.country[1]); 185b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(test.localeScriptWasProvided); 186b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 18791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, test.localeVariant[0]); 18891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 18991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("eng-419"); 190b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[4] = {1, 1, 1, 1}; 19191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackLanguage(out); 19291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', out[0]); 19391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', out[1]); 19491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('g', out[2]); 19591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, out[3]); 19691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath memset(out, 1, 4); 19791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackRegion(out); 19891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('4', out[0]); 19991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('1', out[1]); 20091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('9', out[2]); 20191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 20291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("en-Latn-419"); 20391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', test.language[0]); 20491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', test.language[1]); 20591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 206b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(test.localeScriptWasProvided); 207b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 20891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackRegion(out); 20991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('4', out[0]); 21091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('1', out[1]); 21191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('9', out[2]); 212b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 213b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.setBcp47Locale("de-1901"); 214b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 215b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.unpackLanguage(out); 216b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('d', out[0]); 217b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('e', out[1]); 218b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('\0', out[2]); 219b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(test.localeScriptWasProvided); 220b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 221b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 222b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.unpackRegion(out); 223b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('\0', out[0]); 224b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("1901", test.localeVariant)); 225b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 226b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.setBcp47Locale("de-Latn-1901"); 227b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 228b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.unpackLanguage(out); 229b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('d', out[0]); 230b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('e', out[1]); 231b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('\0', out[2]); 232b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(test.localeScriptWasProvided); 233b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 234b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader memset(out, 1, 4); 235b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader test.unpackRegion(out); 236b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ('\0', out[0]); 237b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("1901", test.localeVariant)); 238b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 239b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 240b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, computeScript) { 241b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config; 242b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 243b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config); 244b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("\0\0\0\0", config.localeScript, 4)); 245b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 246b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "TW", NULL, NULL, &config); 247b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Hant", config.localeScript, 4)); 248b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 249b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "CN", NULL, NULL, &config); 250b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Hans", config.localeScript, 4)); 251b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 252b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &config); 253b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", config.localeScript, 4)); 254b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 255b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "AZ", NULL, NULL, &config); 256b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Latn", config.localeScript, 4)); 257b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 258b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "IR", NULL, NULL, &config); 259b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Arab", config.localeScript, 4)); 260b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 261b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("peo", NULL, NULL, NULL, &config); 262b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("Xpeo", config.localeScript, 4)); 263b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 264b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", NULL, NULL, NULL, &config); 265b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, memcmp("\0\0\0\0", config.localeScript, 4)); 266b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 267b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 268b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, getBcp47Locale_script) { 269b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config; 270b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, "Latn", NULL, &config); 271b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 272b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader char out[RESTABLE_MAX_LOCALE_LEN]; 273b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader config.localeScriptWasProvided = true; 274b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader config.getBcp47Locale(out); 275b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("en-Latn", out)); 276b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 277b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader config.localeScriptWasProvided = false; 278b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader config.getBcp47Locale(out); 279b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("en", out)); 280b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 281b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 282b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, match) { 283b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config supported, requested; 284b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 285b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &supported); 286b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &requested); 287b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Empty locale matches everything (as a default). 288b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 289b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 290b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "CA", NULL, NULL, &supported); 291b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &requested); 292b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Different languages don't match. 293b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 294b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 295b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", NULL, NULL, &supported); 296b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 297b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer the scripts, different regions don't match. 298b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 299b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 300b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", "Latn", NULL, &supported); 301b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 302b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer any of the scripts, different regions don't match. 303b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 304b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 305b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", NULL, NULL, &supported); 306b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", "Latn", NULL, &requested); 307b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer any of the scripts, different regions don't match. 308b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 309b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 310b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", NULL, NULL, NULL, &supported); 311b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 312b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // language-only resources still support language+region requests, even if we can't infer the 313b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // script. 314b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 315b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 316b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &supported); 317b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 318b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if we can't infer the scripts, exactly equal locales match. 319b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 320b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 321b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 322b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Latn", NULL, &requested); 323b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are the same, it doesn't matter if they were explicitly provided 324b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // or not, and they match. 325b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 326b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 327b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 328b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Cyrl", NULL, &requested); 329b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are different, they don't match. 330b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 331b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 332b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 333b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "IR", NULL, NULL, &requested); 334b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are different, they don't match. 335b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 336b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 337b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "IR", NULL, NULL, &supported); 338b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Arab", NULL, &requested); 339b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are the same, it doesn't matter if they were explicitly provided 340b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // or not, and they match. 341b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 342b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 343b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &supported); 344b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &requested); 345b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // en-XA is a pseudo-locale, and English resources are not a match for it. 346b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 347b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 348b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &supported); 349b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &requested); 350b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // en-XA is a pseudo-locale, and its resources don't support English locales. 351b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 352b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 353b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &supported); 354b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &requested); 355b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if they are pseudo-locales, exactly equal locales match. 356b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 357b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 358b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &supported); 359b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &requested); 360b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // ar-XB is a pseudo-locale, and Arabic resources are not a match for it. 361b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 362b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 363b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &supported); 364b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &requested); 365b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // ar-XB is a pseudo-locale, and its resources don't support Arabic locales. 366b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 367b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 368b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &supported); 369b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &requested); 370b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if they are pseudo-locales, exactly equal locales match. 371b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 372b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 373b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 374b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_basics) { 375b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config1, config2, request; 376b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 377b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &request); 378b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "FR", NULL, NULL, &config1); 379b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &config2); 380b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 381b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 382b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 383b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &request); 384b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 385b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 386b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 387b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 388b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 389b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &request); 390b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "FR", NULL, NULL, &config1); 391b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 392b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 393b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 394b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 395b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &request); 396b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &config1); 397b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1996", &config2); 398b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 399b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 400b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 401b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &request); 402b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &config1); 403b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &config2); 404b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 405b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 406b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 407b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &request); 408b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1996", &config1); 409b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &config2); 410b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 411b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 412b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 413b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 414b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_regionComparison) { 415b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config1, config2, request; 416b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 417b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 418b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 419b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 420b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Both supported locales are the same, so none is better than the other. 421b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 422b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 423b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 424b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 425b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &config1); 426b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 427b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // An exact locale match is better than a parent. 428b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 429b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 430b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 431b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 432b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 433b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config2); 434b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 435b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 436b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 437b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 438b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 439b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 440b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 441b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent representative locale. 442b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 443b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 444b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 445b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 446b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config1); 447b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 448b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent representative locale. 449b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 450b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 451b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 452b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 453b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "PE", NULL, NULL, &config1); 454b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 455b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 456b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 457b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 458b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 459b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 460b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config1); 461b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "BO", NULL, NULL, &config2); 462b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 463b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 464b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 465b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 466b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 467b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config1); 468b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "BO", NULL, NULL, &config2); 469b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 470b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 471b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 472b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 473b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 474b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config1); 475b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config2); 476b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better. 477b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 478b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 479b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 480b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "GQ", NULL, NULL, &request); 481b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "IC", NULL, NULL, &config1); 482b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 483b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better and 484b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // letters are better than numbers. 485b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 486b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 487b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 488b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &request); 489b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config1); 490b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &config2); 491b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 492b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 493b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 494b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 495b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 496b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 497b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 498b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 499b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 500b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 501b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 502b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "DE", NULL, NULL, &request); 503b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "150", NULL, NULL, &config1); 504b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 505b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 506b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 507b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 508b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 509b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 510b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config1); 511b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "US", NULL, NULL, &config2); 512b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 513b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 514b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 515b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 516b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 517b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config1); 518b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &config2); 519b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 520b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 521b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 522b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 523b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 524b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &config1); 525b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config2); 526b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 527b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 528b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 529b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 530b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 531b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config1); 532b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "CA", NULL, NULL, &config2); 533b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better. 534b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 535b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 536b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 537b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "MZ", NULL, NULL, &request); 538b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "PT", NULL, NULL, &config1); 539b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", NULL, NULL, NULL, &config2); 540b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 541b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 542b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 543b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 544b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "MZ", NULL, NULL, &request); 545b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "PT", NULL, NULL, &config1); 546b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "BR", NULL, NULL, &config2); 547b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 548b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 549b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 550b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 551b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "MO", "Hant", NULL, &request); 552b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "HK", "Hant", NULL, &config1); 553b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "TW", "Hant", NULL, &config2); 554b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 555b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 556b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 557b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 558b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "US", "Hant", NULL, &request); 559b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "TW", "Hant", NULL, &config1); 560b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "HK", "Hant", NULL, &config2); 561b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 562b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 563b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 564b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 565b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "DZ", NULL, NULL, &request); 566b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config1); 567b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", 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("ar", "EG", NULL, NULL, &request); 573b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &config1); 574b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config2); 575b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 576b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 577b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 578b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 579b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "QA", NULL, NULL, &request); 580b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "EG", NULL, NULL, &config1); 581b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "BH", NULL, NULL, &config2); 582b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 583b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 584b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 585b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 586b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "QA", NULL, NULL, &request); 587b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "SA", NULL, NULL, &config1); 588b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config2); 589b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better and 590b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // letters are better than numbers. 591b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 592b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 59391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath} 594378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 59527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader// Default resources are considered better matches for US English 59627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader// and US-like English locales than International English locales 59727953c349fa1c46698f57ae5f26339560c21adacRoozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_UsEnglishIsSpecial) { 59827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader ResTable_config config1, config2, request; 59927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 60027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 60127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 60227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 60327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // default is better than International English 60427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 60527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 60627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 60727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 60827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 60927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "GB", NULL, NULL, &config2); 61027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // default is better than British English 61127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 61227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 61327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 61427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 61527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 61627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 61727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // Even for Puerto Rico, default is better than International English 61827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 61927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 62027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 62127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 62227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 62327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 62427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // "English" is better than default, since it's a parent of US English 62527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 62627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 62727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 62827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 62927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 63027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 63127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // "English" is better than default, since it's a parent of Puerto Rico English 63227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 63327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 63427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 63527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 63627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 63727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &config2); 63827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // For US English itself, we prefer default to its siblings in the parent tree 63927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 64027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 64127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader} 64227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 643b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} // namespace android 644