11ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski/* 21ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Copyright (C) 2015 The Android Open Source Project 31ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 41ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 51ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * you may not use this file except in compliance with the License. 61ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * You may obtain a copy of the License at 71ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 81ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 91ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * 101ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * Unless required by applicable law or agreed to in writing, software 111ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 121ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 131ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * See the License for the specific language governing permissions and 141ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski * limitations under the License. 151ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski */ 161ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 17467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski#include "link/ReferenceLinker.h" 1864587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski#include "test/Test.h" 191ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 2064587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinskiusing android::ResTable_map; 211ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 221ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskinamespace aapt { 231ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 241ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(ReferenceLinkerTest, LinkSimpleReferences) { 251ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 261ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(u"com.app.test", 0x7f) 271ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addReference(u"@com.app.test:string/foo", ResourceId(0x7f020000), 281ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski u"@com.app.test:string/bar") 291ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 301ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski // Test use of local reference (w/o package name). 311ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addReference(u"@com.app.test:string/bar", ResourceId(0x7f020001), u"@string/baz") 321ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 331ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addReference(u"@com.app.test:string/baz", ResourceId(0x7f020002), 341ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski u"@android:string/ok") 351ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 361ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 371ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder() 381ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setCompilationPackage(u"com.app.test") 391ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(0x7f) 401ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test" }) 4164587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(util::make_unique<ResourceTableSymbolSource>(table.get())) 4264587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(test::StaticSymbolSourceBuilder() 4364587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addPublicSymbol(u"@android:string/ok", ResourceId(0x01040034)) 4464587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 451ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 461ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 471ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ReferenceLinker linker; 481ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_TRUE(linker.consume(context.get(), table.get())); 491ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 501ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Reference* ref = test::getValue<Reference>(table.get(), u"@com.app.test:string/foo"); 511ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_NE(ref, nullptr); 521ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski AAPT_ASSERT_TRUE(ref->id); 531ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_EQ(ref->id.value(), ResourceId(0x7f020001)); 541ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 551ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ref = test::getValue<Reference>(table.get(), u"@com.app.test:string/bar"); 561ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_NE(ref, nullptr); 571ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski AAPT_ASSERT_TRUE(ref->id); 581ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_EQ(ref->id.value(), ResourceId(0x7f020002)); 591ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 601ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ref = test::getValue<Reference>(table.get(), u"@com.app.test:string/baz"); 611ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_NE(ref, nullptr); 621ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski AAPT_ASSERT_TRUE(ref->id); 631ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_EQ(ref->id.value(), ResourceId(0x01040034)); 641ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 651ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 661ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(ReferenceLinkerTest, LinkStyleAttributes) { 671ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 681ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(u"com.app.test", 0x7f) 691ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addValue(u"@com.app.test:style/Theme", test::StyleBuilder() 701ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setParent(u"@android:style/Theme.Material") 711ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addItem(u"@android:attr/foo", ResourceUtils::tryParseColor(u"#ff00ff")) 721ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addItem(u"@android:attr/bar", {} /* placeholder */) 731ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build()) 741ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 751ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 761ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski { 771ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski // We need to fill in the value for the attribute android:attr/bar after we build the 781ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski // table, because we need access to the string pool. 791ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Style* style = test::getValue<Style>(table.get(), u"@com.app.test:style/Theme"); 801ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_NE(style, nullptr); 811ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski style->entries.back().value = util::make_unique<RawString>( 821ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski table->stringPool.makeRef(u"one|two")); 831ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski } 841ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 851ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder() 861ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setCompilationPackage(u"com.app.test") 871ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(0x7f) 881ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test" }) 8964587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(test::StaticSymbolSourceBuilder() 9064587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addPublicSymbol(u"@android:style/Theme.Material", 9164587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski ResourceId(0x01060000)) 9264587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addPublicSymbol(u"@android:attr/foo", ResourceId(0x01010001), 9364587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski test::AttributeBuilder() 9464587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .setTypeMask(ResTable_map::TYPE_COLOR) 9564587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 9664587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addPublicSymbol(u"@android:attr/bar", ResourceId(0x01010002), 9764587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski test::AttributeBuilder() 9864587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .setTypeMask(ResTable_map::TYPE_FLAGS) 9964587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addItem(u"one", 0x01) 10064587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addItem(u"two", 0x02) 10164587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 10264587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 1031ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 1041ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1051ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ReferenceLinker linker; 1061ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_TRUE(linker.consume(context.get(), table.get())); 1071ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1081ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Style* style = test::getValue<Style>(table.get(), u"@com.app.test:style/Theme"); 1091ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_NE(style, nullptr); 1101ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski AAPT_ASSERT_TRUE(style->parent); 1111ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski AAPT_ASSERT_TRUE(style->parent.value().id); 1121ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_EQ(style->parent.value().id.value(), ResourceId(0x01060000)); 1131ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1141ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_EQ(2u, style->entries.size()); 1151ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1161ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski AAPT_ASSERT_TRUE(style->entries[0].key.id); 1171ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_EQ(style->entries[0].key.id.value(), ResourceId(0x01010001)); 1181ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_NE(valueCast<BinaryPrimitive>(style->entries[0].value.get()), nullptr); 1191ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1201ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski AAPT_ASSERT_TRUE(style->entries[1].key.id); 1211ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_EQ(style->entries[1].key.id.value(), ResourceId(0x01010002)); 1221ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_NE(valueCast<BinaryPrimitive>(style->entries[1].value.get()), nullptr); 1231ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 1241ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1251ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(ReferenceLinkerTest, LinkMangledReferencesAndAttributes) { 1261ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder() 1271ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setCompilationPackage(u"com.app.test") 1281ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(0x7f) 1291ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test", { u"com.android.support" } }) 13064587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(test::StaticSymbolSourceBuilder() 13164587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addPublicSymbol(u"@com.app.test:attr/com.android.support$foo", 13264587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski ResourceId(0x7f010000), 13364587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski test::AttributeBuilder() 13464587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .setTypeMask(ResTable_map::TYPE_COLOR) 13564587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 13664587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 1371ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 1381ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1391ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 1401ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .setPackageId(u"com.app.test", 0x7f) 1411ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .addValue(u"@com.app.test:style/Theme", ResourceId(0x7f020000), 1421ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski test::StyleBuilder().addItem(u"@com.android.support:attr/foo", 1431ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ResourceUtils::tryParseColor(u"#ff0000")) 1441ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build()) 1451ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski .build(); 1461ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1471ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ReferenceLinker linker; 1481ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_TRUE(linker.consume(context.get(), table.get())); 1491ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 1501ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski Style* style = test::getValue<Style>(table.get(), u"@com.app.test:style/Theme"); 1511ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_NE(style, nullptr); 1521ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski ASSERT_EQ(1u, style->entries.size()); 1531ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski AAPT_ASSERT_TRUE(style->entries.front().key.id); 1541ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski EXPECT_EQ(style->entries.front().key.id.value(), ResourceId(0x7f010000)); 1551ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 1561ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 157467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam LesinskiTEST(ReferenceLinkerTest, FailToLinkPrivateSymbols) { 158467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 159467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setPackageId(u"com.app.test", 0x7f) 160467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .addReference(u"@com.app.test:string/foo", ResourceId(0x7f020000), 161467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski u"@android:string/hidden") 162467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .build(); 163467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 164467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder() 165467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setCompilationPackage(u"com.app.test") 166467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setPackageId(0x7f) 167467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test" }) 16864587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(util::make_unique<ResourceTableSymbolSource>(table.get())) 16964587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(test::StaticSymbolSourceBuilder() 17064587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbol(u"@android:string/hidden", ResourceId(0x01040034)) 17164587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 172467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .build(); 173467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 174467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski ReferenceLinker linker; 175467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski ASSERT_FALSE(linker.consume(context.get(), table.get())); 176467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski} 177467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 178467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam LesinskiTEST(ReferenceLinkerTest, FailToLinkPrivateMangledSymbols) { 179467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 180467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setPackageId(u"com.app.test", 0x7f) 181467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .addReference(u"@com.app.test:string/foo", ResourceId(0x7f020000), 182467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski u"@com.app.lib:string/hidden") 183467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .build(); 184467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 185467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder() 186467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setCompilationPackage(u"com.app.test") 187467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setPackageId(0x7f) 188467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test", { u"com.app.lib" } }) 18964587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(util::make_unique<ResourceTableSymbolSource>(table.get())) 19064587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(test::StaticSymbolSourceBuilder() 19164587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbol(u"@com.app.test:string/com.app.lib$hidden", 19264587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski ResourceId(0x7f040034)) 19364587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 19464587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski 195467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .build(); 196467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 197467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski ReferenceLinker linker; 198467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski ASSERT_FALSE(linker.consume(context.get(), table.get())); 199467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski} 200467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 201467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam LesinskiTEST(ReferenceLinkerTest, FailToLinkPrivateStyleAttributes) { 202467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 203467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setPackageId(u"com.app.test", 0x7f) 204467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .addValue(u"@com.app.test:style/Theme", test::StyleBuilder() 205467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .addItem(u"@android:attr/hidden", ResourceUtils::tryParseColor(u"#ff00ff")) 206467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .build()) 207467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .build(); 208467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 209467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder() 210467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setCompilationPackage(u"com.app.test") 211467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setPackageId(0x7f) 212467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test" }) 21364587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(util::make_unique<ResourceTableSymbolSource>(table.get())) 21464587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(test::StaticSymbolSourceBuilder() 21564587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbol(u"@android:attr/hidden", ResourceId(0x01010001), 21664587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski test::AttributeBuilder() 21764587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .setTypeMask( 21864587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski android::ResTable_map::TYPE_COLOR) 21964587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 22064587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .build()) 221467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski .build(); 222467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 223467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski ReferenceLinker linker; 224467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski ASSERT_FALSE(linker.consume(context.get(), table.get())); 225467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski} 226467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski 2271ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} // namespace aapt 228