ConfigLocale_test.cpp revision 7e5f96f1a37e51164a594930ecc862a94cc8c231
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)); 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]); 1857960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader EXPECT_TRUE(test.localeScriptWasComputed); 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)); 2067960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader EXPECT_FALSE(test.localeScriptWasComputed); 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]); 2197960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader EXPECT_TRUE(test.localeScriptWasComputed); 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]); 2327960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader EXPECT_FALSE(test.localeScriptWasComputed); 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]; 2737960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader config.localeScriptWasComputed = false; 274b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader config.getBcp47Locale(out); 275b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("en-Latn", out)); 276b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 2777960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader config.localeScriptWasComputed = true; 278b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader config.getBcp47Locale(out); 279b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_EQ(0, strcmp("en", out)); 280b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 281b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 2827e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh PournaderTEST(ConfigLocaleTest, getBcp47Locale_canonicalize) { 2837e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader ResTable_config config; 2847e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader char out[RESTABLE_MAX_LOCALE_LEN]; 2857e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 2867e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", NULL, NULL, NULL, &config); 2877e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader config.getBcp47Locale(out); 2887e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_EQ(0, strcmp("tl", out)); 2897e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader config.getBcp47Locale(out, true /* canonicalize */); 2907e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_EQ(0, strcmp("fil", out)); 2917e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 2927e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, NULL, &config); 2937e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader config.getBcp47Locale(out); 2947e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_EQ(0, strcmp("tl-PH", out)); 2957e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader config.getBcp47Locale(out, true /* canonicalize */); 2967e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_EQ(0, strcmp("fil-PH", out)); 2977e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader} 2987e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 299b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, match) { 300b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config supported, requested; 301b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 302b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &supported); 303b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &requested); 304b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Empty locale matches everything (as a default). 305b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 306b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 307b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "CA", NULL, NULL, &supported); 308b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &requested); 309b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Different languages don't match. 310b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 311b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 3127e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, NULL, &supported); 3137e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &requested); 3147e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader // Equivalent languages match. 3157e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 3167e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 317b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", NULL, NULL, &supported); 318b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 319b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer the scripts, different regions don't match. 320b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 321b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 322b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", "Latn", NULL, &supported); 323b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 324b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer any of the scripts, different regions don't match. 325b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 326b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 327b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "FR", NULL, NULL, &supported); 328b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", "Latn", NULL, &requested); 329b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If we can't infer any of the scripts, different regions don't match. 330b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 331b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 332b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", NULL, NULL, NULL, &supported); 333b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 334b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // language-only resources still support language+region requests, even if we can't infer the 335b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // script. 336b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 337b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 338b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &supported); 339b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("qaa", "CA", NULL, NULL, &requested); 340b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if we can't infer the scripts, exactly equal locales match. 341b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 342b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 343b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 344b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Latn", NULL, &requested); 345b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are the same, it doesn't matter if they were explicitly provided 346b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // or not, and they match. 347b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 348b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 349b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 350b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Cyrl", NULL, &requested); 351b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are different, they don't match. 352b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 353b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 354b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, NULL, NULL, &supported); 355b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "IR", NULL, NULL, &requested); 356b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are different, they don't match. 357b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 358b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 359b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", "IR", NULL, NULL, &supported); 360b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("az", NULL, "Arab", NULL, &requested); 361b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If the resolved scripts are the same, it doesn't matter if they were explicitly provided 362b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // or not, and they match. 363b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 364b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 365b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &supported); 366b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &requested); 367b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // en-XA is a pseudo-locale, and English resources are not a match for it. 368b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 369b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 370b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &supported); 371b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &requested); 372b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // en-XA is a pseudo-locale, and its resources don't support English locales. 373b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 374b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 375b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &supported); 376b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "XA", NULL, NULL, &requested); 377b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if they are pseudo-locales, exactly equal locales match. 378b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 379b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 380b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &supported); 381b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &requested); 382b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // ar-XB is a pseudo-locale, and Arabic resources are not a match for it. 383b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 384b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 385b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &supported); 386b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &requested); 387b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // ar-XB is a pseudo-locale, and its resources don't support Arabic locales. 388b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(supported.match(requested)); 389b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 390b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &supported); 391b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "XB", NULL, NULL, &requested); 392b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Even if they are pseudo-locales, exactly equal locales match. 393b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 3944de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader} 3954de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader 3964de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh PournaderTEST(ConfigLocaleTest, match_emptyScript) { 3974de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader ResTable_config supported, requested; 3984de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader 3994de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader fillIn("fr", "FR", NULL, NULL, &supported); 4004de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &requested); 4014de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader 4024de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader // emulate packages built with older AAPT 4034de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader memset(supported.localeScript, '\0', 4); 4047960898f6f886aadda1dd3d7a89106dde9f44217Roozbeh Pournader supported.localeScriptWasComputed = false; 4054de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader 4064de4596ac1175908657f29cdc2a56529f2ca4b25Roozbeh Pournader EXPECT_TRUE(supported.match(requested)); 407b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 408b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 409b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_basics) { 410b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config1, config2, request; 411b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 412b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &request); 413b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "FR", NULL, NULL, &config1); 414b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &config2); 415b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 416b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 417b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 418b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &request); 419b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 420b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 421b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 422b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 423b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 424b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "CA", NULL, NULL, &request); 425b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("fr", "FR", NULL, NULL, &config1); 426b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 427b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 428b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 429b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 430b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &request); 4317e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &config1); 4327e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &config2); 4337e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 4347e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 4357e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 4367e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &request); 437b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &config1); 438b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1996", &config2); 439b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 440b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 441b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 442b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &request); 443b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &config1); 444b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &config2); 445b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 446b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 447b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 448b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1901", &request); 449b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, "1996", &config1); 450b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("de", "DE", NULL, NULL, &config2); 451b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 452b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 4537e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 4547e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &request); 4557e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, NULL, &config1); 4567e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "US", NULL, NULL, &config2); 4577e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 4587e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 4597e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 4607e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, "fonipa", &request); 4617e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, "fonipa", &config1); 4627e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &config2); 4637e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 4647e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 4657e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader 4667e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &request); 4677e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("fil", "PH", NULL, NULL, &config1); 4687e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader fillIn("tl", "PH", NULL, NULL, &config2); 4697e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 4707e5f96f1a37e51164a594930ecc862a94cc8c231Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 471b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} 472b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 473b927c559e1ef8530b08712507f320502627db298Roozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_regionComparison) { 474b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader ResTable_config config1, config2, request; 475b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 476b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 477b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 478b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 479b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // Both supported locales are the same, so none is better than the other. 480b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config1.isLocaleBetterThan(config2, &request)); 481b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 482b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 483b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 484b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &config1); 485b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 486b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // An exact locale match is better than a parent. 487b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 488b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 489b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 490b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 491b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 492b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config2); 493b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 494b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 495b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 496b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 497b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 498b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config1); 499b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 500b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent representative locale. 501b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 502b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 503b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 504b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 505b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", NULL, NULL, NULL, &config1); 506b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 507b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent representative locale. 508b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 509b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 510b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 511b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 512b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "PE", NULL, NULL, &config1); 513b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "ES", NULL, NULL, &config2); 514b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 515b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 516b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 517b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 518b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 519b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config1); 520b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "BO", NULL, NULL, &config2); 521b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 522b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 523b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 524b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 525b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 526b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config1); 527b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "BO", NULL, NULL, &config2); 528b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 529b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 530b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 531b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 532b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "AR", NULL, NULL, &request); 533b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "MX", NULL, NULL, &config1); 534b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "US", NULL, NULL, &config2); 535b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better. 536b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 537b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 538b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 539b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "GQ", NULL, NULL, &request); 540b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "IC", NULL, NULL, &config1); 541b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("es", "419", NULL, NULL, &config2); 542b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better and 543b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // letters are better than numbers. 544b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 545b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 546b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 547b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &request); 548b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config1); 549b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &config2); 550b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 551b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 552b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 553b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 554b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 555b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 556b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 557b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 558b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 559b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 560b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 561b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "DE", NULL, NULL, &request); 562b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "150", NULL, NULL, &config1); 563b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 564b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 565b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 566b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 567b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 568b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 569b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config1); 570b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "US", NULL, NULL, &config2); 571b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 572b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 573b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 574b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 575b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 576b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "001", NULL, NULL, &config1); 577b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &config2); 578b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer locale is better. 579b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 580b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 581b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 582b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 583b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "GB", NULL, NULL, &config1); 584b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config2); 585b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 586b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 587b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 588b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 589b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "IN", NULL, NULL, &request); 590b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "AU", NULL, NULL, &config1); 591b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("en", "CA", NULL, NULL, &config2); 592b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better. 593b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 594b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 595b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 596b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "MZ", NULL, NULL, &request); 597b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "PT", NULL, NULL, &config1); 598b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", NULL, NULL, NULL, &config2); 599b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 600b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 601b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 602b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 603b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "MZ", NULL, NULL, &request); 604b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "PT", NULL, NULL, &config1); 605b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("pt", "BR", NULL, NULL, &config2); 606b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 607b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 608b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 609b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 610b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "MO", "Hant", NULL, &request); 611b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "HK", "Hant", NULL, &config1); 612b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "TW", "Hant", NULL, &config2); 613b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 614b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 615b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 616b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 617b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "US", "Hant", NULL, &request); 618b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "TW", "Hant", NULL, &config1); 619b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("zh", "HK", "Hant", NULL, &config2); 620b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 621b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 622b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 623b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 624b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "DZ", NULL, NULL, &request); 625b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config1); 626b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &config2); 627b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A closer parent is better. 628b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 629b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 630b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 631b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "EG", NULL, NULL, &request); 632b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", NULL, NULL, NULL, &config1); 633b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config2); 634b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A parent is better than a non-parent. 635b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 636b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 637b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 638b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "QA", NULL, NULL, &request); 639b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "EG", NULL, NULL, &config1); 640b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "BH", NULL, NULL, &config2); 641b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // A representative locale is better if they are equidistant. 642b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 643b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 644b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader 645b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "QA", NULL, NULL, &request); 646b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "SA", NULL, NULL, &config1); 647b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader fillIn("ar", "015", NULL, NULL, &config2); 648b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // If all is equal, the locale earlier in the dictionary is better and 649b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader // letters are better than numbers. 650b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 651b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 65291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath} 653378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 65427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader// Default resources are considered better matches for US English 65527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader// and US-like English locales than International English locales 65627953c349fa1c46698f57ae5f26339560c21adacRoozbeh PournaderTEST(ConfigLocaleTest, isLocaleBetterThan_UsEnglishIsSpecial) { 65727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader ResTable_config config1, config2, request; 65827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 65927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 66027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 66127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 66227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // default is better than International English 66327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 66427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 66527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 66627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 66727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 66827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "GB", NULL, NULL, &config2); 66927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // default is better than British English 67027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 67127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 67227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 67327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 67427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 67527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "001", NULL, NULL, &config2); 67627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // Even for Puerto Rico, default is better than International English 67727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 67827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 67927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 68027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 68127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 68227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 68327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // "English" is better than default, since it's a parent of US English 68427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 68527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 68627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 68727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &request); 68827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", NULL, NULL, NULL, &config1); 68927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config2); 69027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // "English" is better than default, since it's a parent of Puerto Rico English 69127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 69227953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 69327953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 69427953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "US", NULL, NULL, &request); 69527953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn(NULL, NULL, NULL, NULL, &config1); 69627953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader fillIn("en", "PR", NULL, NULL, &config2); 69727953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader // For US English itself, we prefer default to its siblings in the parent tree 69827953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_TRUE(config1.isLocaleBetterThan(config2, &request)); 69927953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader EXPECT_FALSE(config2.isLocaleBetterThan(config1, &request)); 70027953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader} 70127953c349fa1c46698f57ae5f26339560c21adacRoozbeh Pournader 702b927c559e1ef8530b08712507f320502627db298Roozbeh Pournader} // namespace android 703