diff options
Diffstat (limited to 'tools/aapt2/link/XmlReferenceLinker_test.cpp')
-rw-r--r-- | tools/aapt2/link/XmlReferenceLinker_test.cpp | 74 |
1 files changed, 40 insertions, 34 deletions
diff --git a/tools/aapt2/link/XmlReferenceLinker_test.cpp b/tools/aapt2/link/XmlReferenceLinker_test.cpp index 7f91ec348c9d..3bfaf91854bb 100644 --- a/tools/aapt2/link/XmlReferenceLinker_test.cpp +++ b/tools/aapt2/link/XmlReferenceLinker_test.cpp @@ -31,37 +31,40 @@ public: .setNameManglerPolicy( NameManglerPolicy{ u"com.app.test", { u"com.android.support" } }) .setSymbolTable(test::StaticSymbolTableBuilder() - .addSymbol(u"@android:attr/layout_width", ResourceId(0x01010000), + .addPublicSymbol(u"@android:attr/layout_width", ResourceId(0x01010000), test::AttributeBuilder() .setTypeMask(android::ResTable_map::TYPE_ENUM | android::ResTable_map::TYPE_DIMENSION) .addItem(u"match_parent", 0xffffffff) .build()) - .addSymbol(u"@android:attr/background", ResourceId(0x01010001), + .addPublicSymbol(u"@android:attr/background", ResourceId(0x01010001), test::AttributeBuilder() .setTypeMask(android::ResTable_map::TYPE_COLOR).build()) - .addSymbol(u"@android:attr/attr", ResourceId(0x01010002), + .addPublicSymbol(u"@android:attr/attr", ResourceId(0x01010002), test::AttributeBuilder().build()) - .addSymbol(u"@android:attr/text", ResourceId(0x01010003), + .addPublicSymbol(u"@android:attr/text", ResourceId(0x01010003), test::AttributeBuilder() .setTypeMask(android::ResTable_map::TYPE_STRING) .build()) // Add one real symbol that was introduces in v21 - .addSymbol(u"@android:attr/colorAccent", ResourceId(0x01010435), + .addPublicSymbol(u"@android:attr/colorAccent", ResourceId(0x01010435), test::AttributeBuilder().build()) - .addSymbol(u"@android:id/id", ResourceId(0x01030000)) + // Private symbol. + .addSymbol(u"@android:color/hidden", ResourceId(0x01020001)) + + .addPublicSymbol(u"@android:id/id", ResourceId(0x01030000)) .addSymbol(u"@com.app.test:id/id", ResourceId(0x7f030000)) .addSymbol(u"@com.app.test:color/green", ResourceId(0x7f020000)) .addSymbol(u"@com.app.test:color/red", ResourceId(0x7f020001)) .addSymbol(u"@com.app.test:attr/colorAccent", ResourceId(0x7f010000), test::AttributeBuilder() .setTypeMask(android::ResTable_map::TYPE_COLOR).build()) - .addSymbol(u"@com.app.test:attr/com.android.support$colorAccent", + .addPublicSymbol(u"@com.app.test:attr/com.android.support$colorAccent", ResourceId(0x7f010001), test::AttributeBuilder() .setTypeMask(android::ResTable_map::TYPE_COLOR).build()) - .addSymbol(u"@com.app.test:attr/attr", ResourceId(0x7f010002), + .addPublicSymbol(u"@com.app.test:attr/attr", ResourceId(0x7f010002), test::AttributeBuilder().build()) .build()) .build(); @@ -71,23 +74,8 @@ protected: std::unique_ptr<IAaptContext> mContext; }; -static xml::Element* getRootElement(XmlResource* doc) { - xml::Node* node = doc->root.get(); - while (xml::nodeCast<xml::Namespace>(node)) { - if (node->children.empty()) { - return nullptr; - } - node = node->children.front().get(); - } - - if (xml::Element* el = xml::nodeCast<xml::Element>(node)) { - return el; - } - return nullptr; -} - TEST_F(XmlReferenceLinkerTest, LinkBasicAttributes) { - std::unique_ptr<XmlResource> doc = test::buildXmlDom(R"EOF( + std::unique_ptr<xml::XmlResource> doc = test::buildXmlDomForPackageName(mContext.get(), R"EOF( <View xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:background="@color/green" @@ -97,7 +85,7 @@ TEST_F(XmlReferenceLinkerTest, LinkBasicAttributes) { XmlReferenceLinker linker; ASSERT_TRUE(linker.consume(mContext.get(), doc.get())); - xml::Element* viewEl = getRootElement(doc.get()); + xml::Element* viewEl = xml::findRootElement(doc.get()); ASSERT_NE(viewEl, nullptr); xml::Attribute* xmlAttr = viewEl->findAttribute(u"http://schemas.android.com/apk/res/android", @@ -132,8 +120,26 @@ TEST_F(XmlReferenceLinkerTest, LinkBasicAttributes) { ASSERT_EQ(xmlAttr->compiledValue, nullptr); } +TEST_F(XmlReferenceLinkerTest, PrivateSymbolsAreNotLinked) { + std::unique_ptr<xml::XmlResource> doc = test::buildXmlDomForPackageName(mContext.get(), R"EOF( + <View xmlns:android="http://schemas.android.com/apk/res/android" + android:colorAccent="@android:color/hidden" />)EOF"); + + XmlReferenceLinker linker; + ASSERT_FALSE(linker.consume(mContext.get(), doc.get())); +} + +TEST_F(XmlReferenceLinkerTest, PrivateSymbolsAreLinkedWhenReferenceHasStarPrefix) { + std::unique_ptr<xml::XmlResource> doc = test::buildXmlDomForPackageName(mContext.get(), R"EOF( + <View xmlns:android="http://schemas.android.com/apk/res/android" + android:colorAccent="@*android:color/hidden" />)EOF"); + + XmlReferenceLinker linker; + ASSERT_TRUE(linker.consume(mContext.get(), doc.get())); +} + TEST_F(XmlReferenceLinkerTest, SdkLevelsAreRecorded) { - std::unique_ptr<XmlResource> doc = test::buildXmlDom(R"EOF( + std::unique_ptr<xml::XmlResource> doc = test::buildXmlDomForPackageName(mContext.get(), R"EOF( <View xmlns:android="http://schemas.android.com/apk/res/android" android:colorAccent="#ffffff" />)EOF"); @@ -143,14 +149,14 @@ TEST_F(XmlReferenceLinkerTest, SdkLevelsAreRecorded) { } TEST_F(XmlReferenceLinkerTest, LinkMangledAttributes) { - std::unique_ptr<XmlResource> doc = test::buildXmlDom(R"EOF( + std::unique_ptr<xml::XmlResource> doc = test::buildXmlDomForPackageName(mContext.get(), R"EOF( <View xmlns:support="http://schemas.android.com/apk/res/com.android.support" support:colorAccent="#ff0000" />)EOF"); XmlReferenceLinker linker; ASSERT_TRUE(linker.consume(mContext.get(), doc.get())); - xml::Element* viewEl = getRootElement(doc.get()); + xml::Element* viewEl = xml::findRootElement(doc.get()); ASSERT_NE(viewEl, nullptr); xml::Attribute* xmlAttr = viewEl->findAttribute( @@ -162,14 +168,14 @@ TEST_F(XmlReferenceLinkerTest, LinkMangledAttributes) { } TEST_F(XmlReferenceLinkerTest, LinkAutoResReference) { - std::unique_ptr<XmlResource> doc = test::buildXmlDom(R"EOF( + std::unique_ptr<xml::XmlResource> doc = test::buildXmlDomForPackageName(mContext.get(), R"EOF( <View xmlns:app="http://schemas.android.com/apk/res-auto" app:colorAccent="@app:color/red" />)EOF"); XmlReferenceLinker linker; ASSERT_TRUE(linker.consume(mContext.get(), doc.get())); - xml::Element* viewEl = getRootElement(doc.get()); + xml::Element* viewEl = xml::findRootElement(doc.get()); ASSERT_NE(viewEl, nullptr); xml::Attribute* xmlAttr = viewEl->findAttribute(u"http://schemas.android.com/apk/res-auto", @@ -185,7 +191,7 @@ TEST_F(XmlReferenceLinkerTest, LinkAutoResReference) { } TEST_F(XmlReferenceLinkerTest, LinkViewWithShadowedPackageAlias) { - std::unique_ptr<XmlResource> doc = test::buildXmlDom(R"EOF( + std::unique_ptr<xml::XmlResource> doc = test::buildXmlDomForPackageName(mContext.get(), R"EOF( <View xmlns:app="http://schemas.android.com/apk/res/android" app:attr="@app:id/id"> <View xmlns:app="http://schemas.android.com/apk/res/com.app.test" @@ -195,7 +201,7 @@ TEST_F(XmlReferenceLinkerTest, LinkViewWithShadowedPackageAlias) { XmlReferenceLinker linker; ASSERT_TRUE(linker.consume(mContext.get(), doc.get())); - xml::Element* viewEl = getRootElement(doc.get()); + xml::Element* viewEl = xml::findRootElement(doc.get()); ASSERT_NE(viewEl, nullptr); // All attributes and references in this element should be referring to "android" (0x01). @@ -225,14 +231,14 @@ TEST_F(XmlReferenceLinkerTest, LinkViewWithShadowedPackageAlias) { } TEST_F(XmlReferenceLinkerTest, LinkViewWithLocalPackageAndAliasOfTheSameName) { - std::unique_ptr<XmlResource> doc = test::buildXmlDom(R"EOF( + std::unique_ptr<xml::XmlResource> doc = test::buildXmlDomForPackageName(mContext.get(), R"EOF( <View xmlns:android="http://schemas.android.com/apk/res/com.app.test" android:attr="@id/id"/>)EOF"); XmlReferenceLinker linker; ASSERT_TRUE(linker.consume(mContext.get(), doc.get())); - xml::Element* viewEl = getRootElement(doc.get()); + xml::Element* viewEl = xml::findRootElement(doc.get()); ASSERT_NE(viewEl, nullptr); // All attributes and references in this element should be referring to "com.app.test" (0x7f). |