1f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski/* 2f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * Copyright (C) 2014 The Android Open Source Project 3f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * 4f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * you may not use this file except in compliance with the License. 6f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * You may obtain a copy of the License at 7f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * 8f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * 10f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * Unless required by applicable law or agreed to in writing, software 11f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * See the License for the specific language governing permissions and 14f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * limitations under the License. 15f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski */ 16f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 174c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski#include "androidfw/ResourceTypes.h" 184c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski 194c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski#include "utils/String16.h" 204c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski#include "utils/String8.h" 21f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 22f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include "TestHelpers.h" 23ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski#include "data/basic/R.h" 24f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 254c67a475a334e4f65238d439a3339195e03c03beAdam Lesinskiusing com::android::basic::R; 26f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 274c67a475a334e4f65238d439a3339195e03c03beAdam Lesinskinamespace android { 28f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 294c67a475a334e4f65238d439a3339195e03c03beAdam Lesinskistatic void makeConfigFrench(ResTable_config* config) { 304c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski memset(config, 0, sizeof(*config)); 314c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski config->language[0] = 'f'; 324c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski config->language[1] = 'r'; 33f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 34f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 354c67a475a334e4f65238d439a3339195e03c03beAdam Lesinskiclass SplitTest : public ::testing::Test { 364c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski public: 374c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski void SetUp() override { 384c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_TRUE(ReadFileFromZipToString(GetTestDataPath() + "/basic/basic.apk", 394c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski "resources.arsc", &basic_contents_)); 404c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_TRUE( 414c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ReadFileFromZipToString(GetTestDataPath() + "/basic/basic_de_fr.apk", 424c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski "resources.arsc", &basic_de_fr_contents_)); 434c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_TRUE( 444c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ReadFileFromZipToString(GetTestDataPath() + "/basic/basic_hdpi-v4.apk", 454c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski "resources.arsc", &basic_hdpi_contents_)); 464c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_TRUE( 474c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ReadFileFromZipToString(GetTestDataPath() + "/basic/basic_xhdpi-v4.apk", 484c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski "resources.arsc", &basic_xhdpi_contents_)); 494c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_TRUE(ReadFileFromZipToString( 504c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski GetTestDataPath() + "/basic/basic_xxhdpi-v4.apk", "resources.arsc", 514c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski &basic_xxhdpi_contents_)); 524c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_TRUE( 534c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ReadFileFromZipToString(GetTestDataPath() + "/feature/feature.apk", 544c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski "resources.arsc", &feature_contents_)); 554c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski } 564c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski 574c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski protected: 584c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski std::string basic_contents_; 594c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski std::string basic_de_fr_contents_; 604c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski std::string basic_hdpi_contents_; 614c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski std::string basic_xhdpi_contents_; 624c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski std::string basic_xxhdpi_contents_; 634c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski std::string feature_contents_; 644c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski}; 654c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski 664c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, TestLoadBase) { 674c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 684c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 694c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 70f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 71f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 724c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, TestGetResourceFromBase) { 734c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable_config frenchConfig; 744c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski makeConfigFrench(&frenchConfig); 75f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 764c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 774c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.setParameters(&frenchConfig); 78f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 794c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 804c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 81f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 824c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable_config expectedConfig; 834c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski memset(&expectedConfig, 0, sizeof(expectedConfig)); 84f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 854c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski Res_value val; 864c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable_config config; 874c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ssize_t block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG, 0, 884c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski NULL, &config); 89f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 904c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski // The returned block should tell us which string pool to get the value, if it 914c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski // is a string. 924c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_GE(block, 0); 93f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 944c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski // We expect the default resource to be selected since it is the only resource 954c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski // configuration. 964c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(0, expectedConfig.compare(config)); 97f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 984c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(Res_value::TYPE_STRING, val.dataType); 99f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 100f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1014c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, TestGetResourceFromSplit) { 1024c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable_config expectedConfig; 1034c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski makeConfigFrench(&expectedConfig); 104f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1054c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 1064c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.setParameters(&expectedConfig); 107f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1084c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 1094c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 1104c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_de_fr_contents_.data(), 1114c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski basic_de_fr_contents_.size())); 112f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1134c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski Res_value val; 1144c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable_config config; 1154c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ssize_t block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG, 0, 1164c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski NULL, &config); 117f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1184c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_GE(block, 0); 119f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1204c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(0, expectedConfig.compare(config)); 121f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1224c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(Res_value::TYPE_STRING, val.dataType); 123f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 124f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1254c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, ResourcesFromBaseAndSplitHaveSameNames) { 1264c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable_config expectedConfig; 1274c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski makeConfigFrench(&expectedConfig); 128f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1294c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 1304c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.setParameters(&expectedConfig); 131f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1324c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 1334c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 134f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1354c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable::resource_name baseName; 1364c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_TRUE(table.getResourceName(R::string::test1, false, &baseName)); 137f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1384c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_de_fr_contents_.data(), 1394c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski basic_de_fr_contents_.size())); 140f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1414c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable::resource_name frName; 1424c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_TRUE(table.getResourceName(R::string::test1, false, &frName)); 143f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1444c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(String16(baseName.package, baseName.packageLen), 145f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(frName.package, frName.packageLen)); 146f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1474c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(String16(baseName.type, baseName.typeLen), 148f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(frName.type, frName.typeLen)); 149f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1504c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(String16(baseName.name, baseName.nameLen), 151f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(frName.name, frName.nameLen)); 152f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 153f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1544c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, TypeEntrySpecFlagsAreUpdated) { 1554c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable_config defaultConfig; 1564c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski memset(&defaultConfig, 0, sizeof(defaultConfig)); 157f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1584c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 1594c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 1604c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 161f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1624c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski Res_value val; 1634c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski uint32_t specFlags = 0; 1644c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ssize_t block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG, 0, 1654c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski &specFlags, NULL); 1664c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_GE(block, 0); 167f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 168351471f928022fb22a1b19f9e5e647a7901152fdAdam Lesinski EXPECT_EQ(static_cast<uint32_t>(ResTable_typeSpec::SPEC_PUBLIC), specFlags); 169f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1704c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_de_fr_contents_.data(), 1714c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski basic_de_fr_contents_.size())); 172f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 1734c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski uint32_t frSpecFlags = 0; 1744c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski block = table.getResource(R::string::test1, &val, MAY_NOT_BE_BAG, 0, 1754c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski &frSpecFlags, NULL); 176351471f928022fb22a1b19f9e5e647a7901152fdAdam Lesinski ASSERT_GE(block, 0); 177f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 178351471f928022fb22a1b19f9e5e647a7901152fdAdam Lesinski EXPECT_EQ(static_cast<uint32_t>(ResTable_config::CONFIG_LOCALE | ResTable_typeSpec::SPEC_PUBLIC), 179351471f928022fb22a1b19f9e5e647a7901152fdAdam Lesinski frSpecFlags); 180f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 181833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 1824c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, SelectBestDensity) { 1834c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable_config baseConfig; 1844c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski memset(&baseConfig, 0, sizeof(baseConfig)); 1854c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski baseConfig.density = ResTable_config::DENSITY_XHIGH; 1864c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski baseConfig.sdkVersion = 21; 18760293197379e522c870c4a28462804207bab505dAdam Lesinski 1884c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 1894c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.setParameters(&baseConfig); 1904c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 1914c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 1924c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_hdpi_contents_.data(), 1934c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski basic_hdpi_contents_.size())); 19460293197379e522c870c4a28462804207bab505dAdam Lesinski 1954c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_TRUE(IsStringEqual(table, R::string::density, "hdpi")); 19660293197379e522c870c4a28462804207bab505dAdam Lesinski 1974c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_xhdpi_contents_.data(), 1984c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski basic_xhdpi_contents_.size())); 19960293197379e522c870c4a28462804207bab505dAdam Lesinski 2004c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_TRUE(IsStringEqual(table, R::string::density, "xhdpi")); 20160293197379e522c870c4a28462804207bab505dAdam Lesinski 2024c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_xxhdpi_contents_.data(), 2034c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski basic_xxhdpi_contents_.size())); 20460293197379e522c870c4a28462804207bab505dAdam Lesinski 2054c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_TRUE(IsStringEqual(table, R::string::density, "xhdpi")); 20660293197379e522c870c4a28462804207bab505dAdam Lesinski 2074c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski baseConfig.density = ResTable_config::DENSITY_XXHIGH; 2084c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.setParameters(&baseConfig); 20960293197379e522c870c4a28462804207bab505dAdam Lesinski 2104c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_TRUE(IsStringEqual(table, R::string::density, "xxhdpi")); 21160293197379e522c870c4a28462804207bab505dAdam Lesinski} 21260293197379e522c870c4a28462804207bab505dAdam Lesinski 2134c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, TestNewResourceIsAccessible) { 2144c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 2154c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 2164c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 217833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2184c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski Res_value val; 2194c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ssize_t block = table.getResource(R::string::test3, &val, MAY_NOT_BE_BAG); 2204c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_LT(block, 0); 221833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2224c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 2234c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(feature_contents_.data(), feature_contents_.size())); 224833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2254c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski block = table.getResource(R::string::test3, &val, MAY_NOT_BE_BAG); 226351471f928022fb22a1b19f9e5e647a7901152fdAdam Lesinski ASSERT_GE(block, 0); 227833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2284c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(Res_value::TYPE_STRING, val.dataType); 229833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski} 230833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2314c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, TestNewResourceNameHasCorrectName) { 2324c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 2334c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 2344c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 235833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2364c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable::resource_name name; 2374c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_FALSE(table.getResourceName(R::string::test3, false, &name)); 238833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2394c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 2404c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(feature_contents_.data(), feature_contents_.size())); 241833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2424c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_TRUE(table.getResourceName(R::string::test3, false, &name)); 243833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2444c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(String16("com.android.basic"), 245833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski String16(name.package, name.packageLen)); 246833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2474c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(String16("string"), String16(name.type, name.typeLen)); 248833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2494c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski EXPECT_EQ(String16("test3"), String16(name.name, name.nameLen)); 250833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski} 251833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 2524c67a475a334e4f65238d439a3339195e03c03beAdam LesinskiTEST_F(SplitTest, TestNewResourceIsAccessibleByName) { 2534c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ResTable table; 2544c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 2554c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(basic_contents_.data(), basic_contents_.size())); 2564c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ(NO_ERROR, 2574c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.add(feature_contents_.data(), feature_contents_.size())); 2584c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski 2594c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski const String16 name("test3"); 2604c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski const String16 type("string"); 2614c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski const String16 package("com.android.basic"); 2624c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski ASSERT_EQ( 2634c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski R::string::test3, 2644c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski table.identifierForName(name.string(), name.size(), type.string(), 2654c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski type.size(), package.string(), package.size())); 266e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski} 267e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski 2684c67a475a334e4f65238d439a3339195e03c03beAdam Lesinski} // namespace 269