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 17f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include <androidfw/ResourceTypes.h> 18f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 19f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include <utils/String8.h> 20f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include <utils/String16.h> 21f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include "TestHelpers.h" 22ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski#include "data/basic/R.h" 23f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 24f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski#include <gtest/gtest.h> 25f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 26833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinskiusing namespace android; 27833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 28833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinskinamespace { 29833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 30f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski/** 31f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * Include a binary resource table. This table 32f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * is a base table for an APK split. 33f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * 34833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski * Package: com.android.test.basic 35f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski */ 36833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski#include "data/basic/basic_arsc.h" 37f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 38f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski/** 39f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * Include a binary resource table. This table 40f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * is a configuration split table for an APK split. 41f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski * 42833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski * Package: com.android.test.basic 43f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski */ 44833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski#include "data/basic/split_de_fr_arsc.h" 4560293197379e522c870c4a28462804207bab505dAdam Lesinski#include "data/basic/split_hdpi_v4_arsc.h" 4660293197379e522c870c4a28462804207bab505dAdam Lesinski#include "data/basic/split_xhdpi_v4_arsc.h" 4760293197379e522c870c4a28462804207bab505dAdam Lesinski#include "data/basic/split_xxhdpi_v4_arsc.h" 48f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 49833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski/** 50833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski * Include a binary resource table. This table 51833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski * is a feature split table for an APK split. 52833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski * 53833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski * Package: com.android.test.basic 54833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski */ 55833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski#include "data/feature/feature_arsc.h" 56f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 57f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinskienum { MAY_NOT_BE_BAG = false }; 58f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 59f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinskivoid makeConfigFrench(ResTable_config* config) { 60f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memset(config, 0, sizeof(*config)); 61f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski config->language[0] = 'f'; 62f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski config->language[1] = 'r'; 63f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 64f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 65f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam LesinskiTEST(SplitTest, TestLoadBase) { 66f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable table; 67833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 68f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 69f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 70f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam LesinskiTEST(SplitTest, TestGetResourceFromBase) { 71f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_config frenchConfig; 72f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski makeConfigFrench(&frenchConfig); 73f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 74f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable table; 75f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski table.setParameters(&frenchConfig); 76f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 77833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 78f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 79f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_config expectedConfig; 80f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memset(&expectedConfig, 0, sizeof(expectedConfig)); 81f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 82f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski Res_value val; 83f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_config config; 84ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski ssize_t block = table.getResource(base::R::string::test1, &val, MAY_NOT_BE_BAG, 0, NULL, &config); 85f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 86f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski // The returned block should tell us which string pool to get the value, if it is a string. 87f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_GE(block, 0); 88f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 89f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski // We expect the default resource to be selected since it is the only resource configuration. 90f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ(0, expectedConfig.compare(config)); 91f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 92f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ(Res_value::TYPE_STRING, val.dataType); 93f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 94f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 95f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam LesinskiTEST(SplitTest, TestGetResourceFromSplit) { 96f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_config expectedConfig; 97f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski makeConfigFrench(&expectedConfig); 98f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 99f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable table; 100f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski table.setParameters(&expectedConfig); 101f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 102833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 103f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(split_de_fr_arsc, split_de_fr_arsc_len)); 104f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 105f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski Res_value val; 106f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_config config; 107ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski ssize_t block = table.getResource(base::R::string::test1, &val, MAY_NOT_BE_BAG, 0, NULL, &config); 108f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 109f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_GE(block, 0); 110f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 111f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ(0, expectedConfig.compare(config)); 112f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 113f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ(Res_value::TYPE_STRING, val.dataType); 114f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 115f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 116f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam LesinskiTEST(SplitTest, ResourcesFromBaseAndSplitHaveSameNames) { 117f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_config expectedConfig; 118f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski makeConfigFrench(&expectedConfig); 119f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 120f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable table; 121f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski table.setParameters(&expectedConfig); 122f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 123833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 124f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 125f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable::resource_name baseName; 126ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski EXPECT_TRUE(table.getResourceName(base::R::string::test1, false, &baseName)); 127f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 128f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(split_de_fr_arsc, split_de_fr_arsc_len)); 129f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 130f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable::resource_name frName; 131ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski EXPECT_TRUE(table.getResourceName(base::R::string::test1, false, &frName)); 132f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 133f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ( 134f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(baseName.package, baseName.packageLen), 135f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(frName.package, frName.packageLen)); 136f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 137f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ( 138f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(baseName.type, baseName.typeLen), 139f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(frName.type, frName.typeLen)); 140f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 141f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ( 142f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(baseName.name, baseName.nameLen), 143f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski String16(frName.name, frName.nameLen)); 144f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 145f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 146f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam LesinskiTEST(SplitTest, TypeEntrySpecFlagsAreUpdated) { 147f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable_config defaultConfig; 148f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski memset(&defaultConfig, 0, sizeof(defaultConfig)); 149f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 150f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ResTable table; 151833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 152f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 153f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski Res_value val; 154f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski uint32_t specFlags = 0; 155ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski ssize_t block = table.getResource(base::R::string::test1, &val, MAY_NOT_BE_BAG, 0, &specFlags, NULL); 156f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_GE(block, 0); 157f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 158f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ(static_cast<uint32_t>(0), specFlags); 159f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 160f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(split_de_fr_arsc, split_de_fr_arsc_len)); 161f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 162f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski uint32_t frSpecFlags = 0; 163ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski block = table.getResource(base::R::string::test1, &val, MAY_NOT_BE_BAG, 0, &frSpecFlags, NULL); 164f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_GE(block, 0); 165f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski 166f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski EXPECT_EQ(ResTable_config::CONFIG_LOCALE, frSpecFlags); 167f90f2f8dc36e7243b85e0b6a7fd5a590893c827eAdam Lesinski} 168833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 16960293197379e522c870c4a28462804207bab505dAdam LesinskiTEST(SplitTest, SelectBestDensity) { 17060293197379e522c870c4a28462804207bab505dAdam Lesinski ResTable_config baseConfig; 17160293197379e522c870c4a28462804207bab505dAdam Lesinski memset(&baseConfig, 0, sizeof(baseConfig)); 17260293197379e522c870c4a28462804207bab505dAdam Lesinski baseConfig.density = ResTable_config::DENSITY_XHIGH; 17360293197379e522c870c4a28462804207bab505dAdam Lesinski baseConfig.sdkVersion = 21; 17460293197379e522c870c4a28462804207bab505dAdam Lesinski 17560293197379e522c870c4a28462804207bab505dAdam Lesinski ResTable table; 17660293197379e522c870c4a28462804207bab505dAdam Lesinski table.setParameters(&baseConfig); 17760293197379e522c870c4a28462804207bab505dAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 17860293197379e522c870c4a28462804207bab505dAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(split_hdpi_v4_arsc, split_hdpi_v4_arsc_len)); 17960293197379e522c870c4a28462804207bab505dAdam Lesinski 18060293197379e522c870c4a28462804207bab505dAdam Lesinski EXPECT_TRUE(IsStringEqual(table, base::R::string::density, "hdpi")); 18160293197379e522c870c4a28462804207bab505dAdam Lesinski 18260293197379e522c870c4a28462804207bab505dAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(split_xhdpi_v4_arsc, split_xhdpi_v4_arsc_len)); 18360293197379e522c870c4a28462804207bab505dAdam Lesinski 18460293197379e522c870c4a28462804207bab505dAdam Lesinski EXPECT_TRUE(IsStringEqual(table, base::R::string::density, "xhdpi")); 18560293197379e522c870c4a28462804207bab505dAdam Lesinski 18660293197379e522c870c4a28462804207bab505dAdam Lesinski ASSERT_EQ(NO_ERROR, table.add(split_xxhdpi_v4_arsc, split_xxhdpi_v4_arsc_len)); 18760293197379e522c870c4a28462804207bab505dAdam Lesinski 18860293197379e522c870c4a28462804207bab505dAdam Lesinski EXPECT_TRUE(IsStringEqual(table, base::R::string::density, "xhdpi")); 18960293197379e522c870c4a28462804207bab505dAdam Lesinski 19060293197379e522c870c4a28462804207bab505dAdam Lesinski baseConfig.density = ResTable_config::DENSITY_XXHIGH; 19160293197379e522c870c4a28462804207bab505dAdam Lesinski table.setParameters(&baseConfig); 19260293197379e522c870c4a28462804207bab505dAdam Lesinski 19360293197379e522c870c4a28462804207bab505dAdam Lesinski EXPECT_TRUE(IsStringEqual(table, base::R::string::density, "xxhdpi")); 19460293197379e522c870c4a28462804207bab505dAdam Lesinski} 19560293197379e522c870c4a28462804207bab505dAdam Lesinski 196833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam LesinskiTEST(SplitFeatureTest, TestNewResourceIsAccessible) { 197833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ResTable table; 198833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 199833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 200833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski Res_value val; 201ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski ssize_t block = table.getResource(base::R::string::test3, &val, MAY_NOT_BE_BAG); 202833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski EXPECT_LT(block, 0); 203833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 204833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(feature_arsc, feature_arsc_len)); 205833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 206ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski block = table.getResource(base::R::string::test3, &val, MAY_NOT_BE_BAG); 207833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski EXPECT_GE(block, 0); 208833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 209833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski EXPECT_EQ(Res_value::TYPE_STRING, val.dataType); 210833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski} 211833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 212e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam LesinskiTEST(SplitFeatureTest, TestNewResourceNameHasCorrectName) { 213833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ResTable table; 214833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 215833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 216833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ResTable::resource_name name; 217ccf25c7bf69eb8c04246e3f79da31b52c2922a80Adam Lesinski EXPECT_FALSE(table.getResourceName(base::R::string::test3, false, &name)); 218833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 219833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(feature_arsc, feature_arsc_len)); 220833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 22160293197379e522c870c4a28462804207bab505dAdam Lesinski ASSERT_TRUE(table.getResourceName(base::R::string::test3, false, &name)); 222833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 223833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski EXPECT_EQ(String16("com.android.test.basic"), 224833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski String16(name.package, name.packageLen)); 225833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 226833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski EXPECT_EQ(String16("string"), 227833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski String16(name.type, name.typeLen)); 228833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 229833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski EXPECT_EQ(String16("test3"), 230833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski String16(name.name, name.nameLen)); 231833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski} 232833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski 233e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam LesinskiTEST(SplitFeatureTest, TestNewResourceIsAccessibleByName) { 234e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski ResTable table; 235e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(basic_arsc, basic_arsc_len)); 236e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski ASSERT_EQ(NO_ERROR, table.add(feature_arsc, feature_arsc_len)); 237e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski 238e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski const String16 name("test3"); 239e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski const String16 type("string"); 240e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski const String16 package("com.android.test.basic"); 241e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski ASSERT_EQ(base::R::string::test3, table.identifierForName(name.string(), name.size(), 242e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski type.string(), type.size(), 243e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski package.string(), package.size())); 244e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski} 245e60a87f5529b2867ba3f4e60b39d7b47b67f8ca3Adam Lesinski 246833f3ccbc8f4dd1ec8abb9121988b99ff34ec4c1Adam Lesinski} // namespace 247