ConfigLocale_test.cpp revision f90f2f8dc36e7243b85e0b6a7fd5a590893c827e
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 17378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath#include <androidfw/ResourceTypes.h> 18378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath#include <utils/Log.h> 19378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath#include <utils/String8.h> 20378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 21378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath#include <gtest/gtest.h> 22378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamathnamespace android { 23378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 24378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan KamathTEST(ResourceTypesTest, ResourceConfig_packAndUnpack2LetterLanguage) { 25378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config config; 26378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.packLanguage("en"); 27378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 28378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('e', config.language[0]); 29378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('n', config.language[1]); 30378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 31378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath char out[4] = { 1, 1, 1, 1}; 32378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackLanguage(out); 33378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('e', out[0]); 34378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('n', out[1]); 35378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[2]); 36378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[3]); 37378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 38378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath memset(out, 1, sizeof(out)); 39378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.locale = 0; 40378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackLanguage(out); 41378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[0]); 42378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[1]); 43378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[2]); 44378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[3]); 45378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 46378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 47378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan KamathTEST(ResourceTypesTest, ResourceConfig_packAndUnpack2LetterRegion) { 48378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config config; 49378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.packRegion("US"); 50378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 51378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('U', config.country[0]); 52378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('S', config.country[1]); 53378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 54378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath char out[4] = { 1, 1, 1, 1}; 55378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackRegion(out); 56378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('U', out[0]); 57378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('S', out[1]); 58378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[2]); 59378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[3]); 60378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 61378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 62378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan KamathTEST(ResourceTypesTest, ResourceConfig_packAndUnpack3LetterLanguage) { 63378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config config; 64378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.packLanguage("eng"); 65378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 66378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath // 1-00110-01 101-00100 67f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ('\x99', config.language[0]); 68f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ('\xA4', config.language[1]); 69378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 70378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath char out[4] = { 1, 1, 1, 1}; 71378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackLanguage(out); 72378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('e', out[0]); 73378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('n', out[1]); 74378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('g', out[2]); 75378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ(0, out[3]); 76378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 77378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 78378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan KamathTEST(ResourceTypesTest, ResourceConfig_packAndUnpack3LetterRegion) { 79378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config config; 80378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.packRegion("419"); 81378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 82378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath char out[4] = { 1, 1, 1, 1}; 83378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath config.unpackRegion(out); 84378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 85378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('4', out[0]); 86378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('1', out[1]); 87378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_EQ('9', out[2]); 88378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 89378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 90378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath/* static */ void fillIn(const char* lang, const char* country, 91378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath const char* script, const char* variant, ResTable_config* out) { 92378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath memset(out, 0, sizeof(ResTable_config)); 93378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath if (lang != NULL) { 94378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath out->packLanguage(lang); 95378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath } 96378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 97378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath if (country != NULL) { 98378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath out->packRegion(country); 99378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath } 100378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 101378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath if (script != NULL) { 102378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath memcpy(out->localeScript, script, 4); 103378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath } 104378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 105378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath if (variant != NULL) { 106378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath memcpy(out->localeVariant, variant, strlen(variant)); 107378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath } 108378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 109378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 110378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan KamathTEST(ResourceTypesTest, IsMoreSpecificThan) { 111378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config l; 112378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath ResTable_config r; 113378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 114378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", NULL, NULL, NULL, &l); 115378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn(NULL, NULL, NULL, NULL, &r); 116378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 117378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(l.isMoreSpecificThan(r)); 118378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(r.isMoreSpecificThan(l)); 119378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 120378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("eng", NULL, NULL, NULL, &l); 121378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(l.isMoreSpecificThan(r)); 122378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(r.isMoreSpecificThan(l)); 123378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 124378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("eng", "419", NULL, NULL, &r); 125378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 126378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 127378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 128378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", NULL, NULL, NULL, &l); 129378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, NULL, &r); 130378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 131378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 132378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 133378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, NULL, &l); 134378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", "Latn", NULL, &r); 135378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 136378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 137378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 138378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, NULL, &l); 139378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, "POSIX", &r); 140378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 141378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 142378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 143378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", "Latn", NULL, &l); 144378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath fillIn("en", "US", NULL, "POSIX", &r); 145378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_FALSE(l.isMoreSpecificThan(r)); 146378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath EXPECT_TRUE(r.isMoreSpecificThan(l)); 147378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} 148378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 14991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan KamathTEST(ResourceTypesTest, setLocale) { 15091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath ResTable_config test; 15191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("en-US"); 15291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', test.language[0]); 15391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', test.language[1]); 15491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('U', test.country[0]); 15591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('S', test.country[1]); 15691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, test.localeScript[0]); 15791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, test.localeVariant[0]); 15891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 15991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("eng-419"); 16091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath char out[4] = { 1, 1, 1, 1}; 16191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackLanguage(out); 16291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', out[0]); 16391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', out[1]); 16491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('g', out[2]); 16591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, out[3]); 16691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath memset(out, 1, 4); 16791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackRegion(out); 16891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('4', out[0]); 16991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('1', out[1]); 17091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('9', out[2]); 17191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 17291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 17391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.setBcp47Locale("en-Latn-419"); 17491447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath memset(out, 1, 4); 17591447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('e', test.language[0]); 17691447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('n', test.language[1]); 17791447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath 17891447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ(0, memcmp("Latn", test.localeScript, 4)); 17991447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath test.unpackRegion(out); 18091447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('4', out[0]); 18191447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('1', out[1]); 18291447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath EXPECT_EQ('9', out[2]); 18391447d88f2bdf9c2bf8d1a53570efef6172fba74Narayan Kamath} 184378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath 185378c6775a62d9c461cde51f06c1b14bb014c78fdNarayan Kamath} // namespace android. 186