diff options
author | Adam Lesinski <adamlesinski@google.com> | 2015-11-16 17:35:44 -0800 |
---|---|---|
committer | Adam Lesinski <adamlesinski@google.com> | 2015-11-19 14:46:53 -0800 |
commit | 467f171315f9c2037fcd3eb5edcfabc40671bf7b (patch) | |
tree | 3b14762e3d9e42a660479d0d5722883b391f835b /tools/aapt2/link/ReferenceLinker_test.cpp | |
parent | abf83cbe4f63cd76043aab89cd0e08525560fea2 (diff) |
AAPT2: Fail compiling when private symbols are referenced
Also moved some XML specific stuff into its own directory,
and refactored ReferenceLinker a bit.
Change-Id: I912247a82023c1bbf72dc191fbdaf62858cbec0c
Diffstat (limited to 'tools/aapt2/link/ReferenceLinker_test.cpp')
-rw-r--r-- | tools/aapt2/link/ReferenceLinker_test.cpp | 86 |
1 files changed, 80 insertions, 6 deletions
diff --git a/tools/aapt2/link/ReferenceLinker_test.cpp b/tools/aapt2/link/ReferenceLinker_test.cpp index 5e7641a4ec4f..8d324fe753a1 100644 --- a/tools/aapt2/link/ReferenceLinker_test.cpp +++ b/tools/aapt2/link/ReferenceLinker_test.cpp @@ -14,7 +14,7 @@ * limitations under the License. */ -#include "link/Linkers.h" +#include "link/ReferenceLinker.h" #include "process/SymbolTable.h" #include "test/Builders.h" @@ -44,7 +44,7 @@ TEST(ReferenceLinkerTest, LinkSimpleReferences) { .setSymbolTable(JoinedSymbolTableBuilder() .addSymbolTable(util::make_unique<SymbolTableWrapper>(table.get())) .addSymbolTable(test::StaticSymbolTableBuilder() - .addSymbol(u"@android:string/ok", ResourceId(0x01040034)) + .addPublicSymbol(u"@android:string/ok", ResourceId(0x01040034)) .build()) .build()) .build(); @@ -92,12 +92,12 @@ TEST(ReferenceLinkerTest, LinkStyleAttributes) { .setPackageId(0x7f) .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test" }) .setSymbolTable(test::StaticSymbolTableBuilder() - .addSymbol(u"@android:style/Theme.Material", ResourceId(0x01060000)) - .addSymbol(u"@android:attr/foo", ResourceId(0x01010001), + .addPublicSymbol(u"@android:style/Theme.Material", ResourceId(0x01060000)) + .addPublicSymbol(u"@android:attr/foo", ResourceId(0x01010001), test::AttributeBuilder() .setTypeMask(android::ResTable_map::TYPE_COLOR) .build()) - .addSymbol(u"@android:attr/bar", ResourceId(0x01010002), + .addPublicSymbol(u"@android:attr/bar", ResourceId(0x01010002), test::AttributeBuilder() .setTypeMask(android::ResTable_map::TYPE_FLAGS) .addItem(u"one", 0x01) @@ -132,7 +132,7 @@ TEST(ReferenceLinkerTest, LinkMangledReferencesAndAttributes) { .setPackageId(0x7f) .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test", { u"com.android.support" } }) .setSymbolTable(test::StaticSymbolTableBuilder() - .addSymbol(u"@com.app.test:attr/com.android.support$foo", + .addPublicSymbol(u"@com.app.test:attr/com.android.support$foo", ResourceId(0x7f010000), test::AttributeBuilder() .setTypeMask(android::ResTable_map::TYPE_COLOR).build()) .build()) @@ -156,4 +156,78 @@ TEST(ReferenceLinkerTest, LinkMangledReferencesAndAttributes) { EXPECT_EQ(style->entries.front().key.id.value(), ResourceId(0x7f010000)); } +TEST(ReferenceLinkerTest, FailToLinkPrivateSymbols) { + std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() + .setPackageId(u"com.app.test", 0x7f) + .addReference(u"@com.app.test:string/foo", ResourceId(0x7f020000), + u"@android:string/hidden") + .build(); + + std::unique_ptr<IAaptContext> context = test::ContextBuilder() + .setCompilationPackage(u"com.app.test") + .setPackageId(0x7f) + .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test" }) + .setSymbolTable(JoinedSymbolTableBuilder() + .addSymbolTable(util::make_unique<SymbolTableWrapper>(table.get())) + .addSymbolTable(test::StaticSymbolTableBuilder() + .addSymbol(u"@android:string/hidden", ResourceId(0x01040034)) + .build()) + .build()) + .build(); + + ReferenceLinker linker; + ASSERT_FALSE(linker.consume(context.get(), table.get())); +} + +TEST(ReferenceLinkerTest, FailToLinkPrivateMangledSymbols) { + std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() + .setPackageId(u"com.app.test", 0x7f) + .addReference(u"@com.app.test:string/foo", ResourceId(0x7f020000), + u"@com.app.lib:string/hidden") + .build(); + + std::unique_ptr<IAaptContext> context = test::ContextBuilder() + .setCompilationPackage(u"com.app.test") + .setPackageId(0x7f) + .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test", { u"com.app.lib" } }) + .setSymbolTable(JoinedSymbolTableBuilder() + .addSymbolTable(util::make_unique<SymbolTableWrapper>(table.get())) + .addSymbolTable(test::StaticSymbolTableBuilder() + .addSymbol(u"@com.app.test:string/com.app.lib$hidden", + ResourceId(0x7f040034)) + .build()) + .build()) + .build(); + + ReferenceLinker linker; + ASSERT_FALSE(linker.consume(context.get(), table.get())); +} + +TEST(ReferenceLinkerTest, FailToLinkPrivateStyleAttributes) { + std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() + .setPackageId(u"com.app.test", 0x7f) + .addValue(u"@com.app.test:style/Theme", test::StyleBuilder() + .addItem(u"@android:attr/hidden", ResourceUtils::tryParseColor(u"#ff00ff")) + .build()) + .build(); + + std::unique_ptr<IAaptContext> context = test::ContextBuilder() + .setCompilationPackage(u"com.app.test") + .setPackageId(0x7f) + .setNameManglerPolicy(NameManglerPolicy{ u"com.app.test" }) + .setSymbolTable(JoinedSymbolTableBuilder() + .addSymbolTable(util::make_unique<SymbolTableWrapper>(table.get())) + .addSymbolTable(test::StaticSymbolTableBuilder() + .addSymbol(u"@android:attr/hidden", ResourceId(0x01010001), + test::AttributeBuilder() + .setTypeMask(android::ResTable_map::TYPE_COLOR) + .build()) + .build()) + .build()) + .build(); + + ReferenceLinker linker; + ASSERT_FALSE(linker.consume(context.get(), table.get())); +} + } // namespace aapt |