ManifestFixer_test.cpp revision 52364f7ae31716d7827ea8f8566f4a28bd30a921
12ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski/* 22ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * Copyright (C) 2015 The Android Open Source Project 32ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * 42ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 52ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * you may not use this file except in compliance with the License. 62ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * You may obtain a copy of the License at 72ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * 82ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 92ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * 102ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * Unless required by applicable law or agreed to in writing, software 112ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 122ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 132ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * See the License for the specific language governing permissions and 142ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski * limitations under the License. 152ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski */ 162ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 172ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#include "link/ManifestFixer.h" 182ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#include "test/Builders.h" 192ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#include "test/Context.h" 202ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 212ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski#include <gtest/gtest.h> 222ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 232ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinskinamespace aapt { 242ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 252ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinskistruct ManifestFixerTest : public ::testing::Test { 262ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski std::unique_ptr<IAaptContext> mContext; 272ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 282ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski void SetUp() override { 292ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski mContext = test::ContextBuilder() 302ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setCompilationPackage(u"android") 312ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setPackageId(0x01) 322ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setNameManglerPolicy(NameManglerPolicy{ u"android" }) 332ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setSymbolTable(test::StaticSymbolTableBuilder() 342ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .addSymbol(u"@android:attr/package", ResourceId(0x01010000), 352ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski test::AttributeBuilder() 362ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setTypeMask(android::ResTable_map::TYPE_STRING) 372ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .build()) 382ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .addSymbol(u"@android:attr/minSdkVersion", ResourceId(0x01010001), 392ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski test::AttributeBuilder() 402ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setTypeMask(android::ResTable_map::TYPE_STRING | 412ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski android::ResTable_map::TYPE_INTEGER) 422ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .build()) 432ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .addSymbol(u"@android:attr/targetSdkVersion", ResourceId(0x01010002), 442ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski test::AttributeBuilder() 452ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setTypeMask(android::ResTable_map::TYPE_STRING | 462ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski android::ResTable_map::TYPE_INTEGER) 472ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .build()) 482ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .addSymbol(u"@android:string/str", ResourceId(0x01060000)) 492ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .build()) 502ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .build(); 512ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski } 522ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 53467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<xml::XmlResource> verify(const StringPiece& str) { 542ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski return verifyWithOptions(str, {}); 552ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski } 562ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 57467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<xml::XmlResource> verifyWithOptions(const StringPiece& str, 58467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski const ManifestFixerOptions& options) { 59467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<xml::XmlResource> doc = test::buildXmlDom(str); 602ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ManifestFixer fixer(options); 612ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski if (fixer.consume(mContext.get(), doc.get())) { 622ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski return doc; 632ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski } 642ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski return {}; 652ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski } 662ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski}; 672ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 682ae4a877d1623f851040ce69239552c873f1abf0Adam LesinskiTEST_F(ManifestFixerTest, EnsureManifestIsRootTag) { 692ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(nullptr, verify("<other-tag />")); 702ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(nullptr, verify("<ns:manifest xmlns:ns=\"com\" />")); 712ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_NE(nullptr, verify("<manifest package=\"android\"></manifest>")); 722ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski} 732ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 742ae4a877d1623f851040ce69239552c873f1abf0Adam LesinskiTEST_F(ManifestFixerTest, EnsureManifestHasPackage) { 752ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_NE(nullptr, verify("<manifest package=\"android\" />")); 762ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_NE(nullptr, verify("<manifest package=\"com.android\" />")); 772ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_NE(nullptr, verify("<manifest package=\"com.android.google\" />")); 782ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(nullptr, verify("<manifest package=\"com.android.google.Class$1\" />")); 792ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(nullptr, 802ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski verify("<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" " 812ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski "android:package=\"com.android\" />")); 822ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(nullptr, verify("<manifest package=\"@string/str\" />")); 832ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski} 842ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 852ae4a877d1623f851040ce69239552c873f1abf0Adam LesinskiTEST_F(ManifestFixerTest, UseDefaultSdkVersionsIfNonePresent) { 862ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ManifestFixerOptions options = { std::u16string(u"8"), std::u16string(u"22") }; 872ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 88467f171315f9c2037fcd3eb5edcfabc40671bf7bAdam Lesinski std::unique_ptr<xml::XmlResource> doc = verifyWithOptions(R"EOF( 892ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android" 902ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski package="android"> 912ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski <uses-sdk android:minSdkVersion="7" android:targetSdkVersion="21" /> 922ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski </manifest>)EOF", options); 932ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, doc); 942ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 952ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski xml::Element* el; 962ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski xml::Attribute* attr; 972ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 9852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski el = xml::findRootElement(doc.get()); 992ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 1002ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski el = el->findChild({}, u"uses-sdk"); 1012ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 1022ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, u"minSdkVersion"); 1032ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 1042ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(u"7", attr->value); 1052ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, u"targetSdkVersion"); 1062ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 1072ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(u"21", attr->value); 1082ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 1092ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski doc = verifyWithOptions(R"EOF( 1102ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android" 1112ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski package="android"> 1122ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski <uses-sdk android:targetSdkVersion="21" /> 1132ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski </manifest>)EOF", options); 1142ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, doc); 1152ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 11652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski el = xml::findRootElement(doc.get()); 1172ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 1182ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski el = el->findChild({}, u"uses-sdk"); 1192ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 1202ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, u"minSdkVersion"); 1212ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 1222ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(u"8", attr->value); 1232ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, u"targetSdkVersion"); 1242ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 1252ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(u"21", attr->value); 1262ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 1272ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski doc = verifyWithOptions(R"EOF( 1282ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android" 1292ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski package="android"> 1302ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski <uses-sdk /> 1312ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski </manifest>)EOF", options); 1322ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, doc); 1332ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 13452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski el = xml::findRootElement(doc.get()); 1352ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 1362ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski el = el->findChild({}, u"uses-sdk"); 1372ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 1382ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, u"minSdkVersion"); 1392ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 1402ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(u"8", attr->value); 1412ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, u"targetSdkVersion"); 1422ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 1432ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(u"22", attr->value); 1442ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 1452ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski doc = verifyWithOptions(R"EOF( 1462ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android" 1472ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski package="android" />)EOF", options); 1482ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, doc); 1492ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 15052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski el = xml::findRootElement(doc.get()); 1512ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 1522ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski el = el->findChild({}, u"uses-sdk"); 1532ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 1542ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, u"minSdkVersion"); 1552ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 1562ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(u"8", attr->value); 1572ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, u"targetSdkVersion"); 1582ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 1592ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski EXPECT_EQ(u"22", attr->value); 1602ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski} 1612ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 16252364f7ae31716d7827ea8f8566f4a28bd30a921Adam LesinskiTEST_F(ManifestFixerTest, RenameManifestPackageAndFullyQualifyClasses) { 16352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ManifestFixerOptions options; 16452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski options.renameManifestPackage = std::u16string(u"com.android"); 16552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 16652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski std::unique_ptr<xml::XmlResource> doc = verifyWithOptions(R"EOF( 16752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android" 16852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski package="android"> 16952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski <application name=".MainApplication" text="hello"> 17052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski <activity name=".activity.Start" /> 17152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski <receiver name="com.google.android.Receiver" /> 17252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski </application> 17352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski </manifest>)EOF", options); 17452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, doc); 17552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 17652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Element* manifestEl = xml::findRootElement(doc.get()); 17752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, manifestEl); 17852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 17952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Attribute* attr = nullptr; 18052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 18152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski attr = manifestEl->findAttribute({}, u"package"); 18252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 18352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski EXPECT_EQ(std::u16string(u"com.android"), attr->value); 18452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 18552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Element* applicationEl = manifestEl->findChild({}, u"application"); 18652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, applicationEl); 18752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 18852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski attr = applicationEl->findAttribute({}, u"name"); 18952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 19052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski EXPECT_EQ(std::u16string(u"android.MainApplication"), attr->value); 19152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 19252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski attr = applicationEl->findAttribute({}, u"text"); 19352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 19452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski EXPECT_EQ(std::u16string(u"hello"), attr->value); 19552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 19652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Element* el; 19752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski el = applicationEl->findChild({}, u"activity"); 19852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, el); 19952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 20052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski attr = el->findAttribute({}, u"name"); 20152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, el); 20252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski EXPECT_EQ(std::u16string(u"android.activity.Start"), attr->value); 20352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 20452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski el = applicationEl->findChild({}, u"receiver"); 20552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, el); 20652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 20752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski attr = el->findAttribute({}, u"name"); 20852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, el); 20952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski EXPECT_EQ(std::u16string(u"com.google.android.Receiver"), attr->value); 21052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski} 21152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 21252364f7ae31716d7827ea8f8566f4a28bd30a921Adam LesinskiTEST_F(ManifestFixerTest, RenameManifestInstrumentationPackageAndFullyQualifyTarget) { 21352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ManifestFixerOptions options; 21452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski options.renameInstrumentationTargetPackage = std::u16string(u"com.android"); 21552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 21652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski std::unique_ptr<xml::XmlResource> doc = verifyWithOptions(R"EOF( 21752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android" 21852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski package="android"> 21952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski <instrumentation android:targetPackage="android" /> 22052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski </manifest>)EOF", options); 22152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, doc); 22252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 22352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Element* manifestEl = xml::findRootElement(doc.get()); 22452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, manifestEl); 22552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 22652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Element* instrumentationEl = manifestEl->findChild({}, u"instrumentation"); 22752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, instrumentationEl); 22852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 22952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Attribute* attr = instrumentationEl->findAttribute(xml::kSchemaAndroid, u"targetPackage"); 23052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 23152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski EXPECT_EQ(std::u16string(u"com.android"), attr->value); 23252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski} 23352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 23452364f7ae31716d7827ea8f8566f4a28bd30a921Adam LesinskiTEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) { 23552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ManifestFixerOptions options; 23652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski options.versionNameDefault = std::u16string(u"Beta"); 23752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski options.versionCodeDefault = std::u16string(u"0x10000000"); 23852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 23952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski std::unique_ptr<xml::XmlResource> doc = verifyWithOptions(R"EOF( 24052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski <manifest xmlns:android="http://schemas.android.com/apk/res/android" 24152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski package="android" />)EOF", options); 24252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, doc); 24352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 24452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Element* manifestEl = xml::findRootElement(doc.get()); 24552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, manifestEl); 24652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 24752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Attribute* attr = manifestEl->findAttribute(xml::kSchemaAndroid, u"versionName"); 24852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 24952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski EXPECT_EQ(std::u16string(u"Beta"), attr->value); 25052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 25152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski attr = manifestEl->findAttribute(xml::kSchemaAndroid, u"versionCode"); 25252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 25352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski EXPECT_EQ(std::u16string(u"0x10000000"), attr->value); 25452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski} 25552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 2562ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski} // namespace aapt 257