ManifestFixer_test.cpp revision 6b17d2cec2cc3bd97c684b7da490e3f6eab0d980
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() 30d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski .setCompilationPackage("android") 312ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setPackageId(0x01) 32d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski .setNameManglerPolicy(NameManglerPolicy{ "android" }) 3364587af8179affd38ee26543b748f2d63b7f67bbAdam Lesinski .addSymbolSource(test::StaticSymbolSourceBuilder() 3458a20a6482a56a262fd83a617482641e3a981db1Adam Lesinski .addSymbol("android:attr/package", ResourceId(0x01010000), 352ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski test::AttributeBuilder() 362ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .setTypeMask(android::ResTable_map::TYPE_STRING) 372ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski .build()) 3858a20a6482a56a262fd83a617482641e3a981db1Adam Lesinski .addSymbol("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()) 4358a20a6482a56a262fd83a617482641e3a981db1Adam Lesinski .addSymbol("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()) 4858a20a6482a56a262fd83a617482641e3a981db1Adam Lesinski .addSymbol("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) { 86d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski ManifestFixerOptions options = { std::string("8"), std::string("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); 100d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski el = el->findChild({}, "uses-sdk"); 1012ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 102d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "minSdkVersion"); 1032ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 104d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ("7", attr->value); 105d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion"); 1062ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 107d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ("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); 118d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski el = el->findChild({}, "uses-sdk"); 1192ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 120d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "minSdkVersion"); 1212ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 122d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ("8", attr->value); 123d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion"); 1242ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 125d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ("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); 136d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski el = el->findChild({}, "uses-sdk"); 1372ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 138d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "minSdkVersion"); 1392ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 140d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ("8", attr->value); 141d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion"); 1422ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 143d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ("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); 152d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski el = el->findChild({}, "uses-sdk"); 1532ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, el); 154d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "minSdkVersion"); 1552ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 156d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ("8", attr->value); 157d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "targetSdkVersion"); 1582ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski ASSERT_NE(nullptr, attr); 159d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ("22", attr->value); 1602ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski} 1612ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski 16252364f7ae31716d7827ea8f8566f4a28bd30a921Adam LesinskiTEST_F(ManifestFixerTest, RenameManifestPackageAndFullyQualifyClasses) { 16352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ManifestFixerOptions options; 164d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski options.renameManifestPackage = std::string("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"> 169cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski <application android:name=".MainApplication" text="hello"> 170cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski <activity android:name=".activity.Start" /> 171cc5609d8e484ec82ef1dced793af7f674f059b1cAdam Lesinski <receiver android: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 181d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = manifestEl->findAttribute({},"package"); 18252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 183d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ(std::string("com.android"), attr->value); 18452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 185d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski xml::Element* applicationEl = manifestEl->findChild({}, "application"); 18652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, applicationEl); 18752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 188d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = applicationEl->findAttribute(xml::kSchemaAndroid, "name"); 18952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 190d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ(std::string("android.MainApplication"), attr->value); 19152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 192d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = applicationEl->findAttribute({}, "text"); 19352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 194d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ(std::string("hello"), attr->value); 19552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 19652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski xml::Element* el; 197d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski el = applicationEl->findChild({}, "activity"); 19852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, el); 19952364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 200d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "name"); 20152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, el); 202d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ(std::string("android.activity.Start"), attr->value); 20352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 204d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski el = applicationEl->findChild({}, "receiver"); 20552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, el); 20652364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 207d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = el->findAttribute(xml::kSchemaAndroid, "name"); 20852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, el); 209d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ(std::string("com.google.android.Receiver"), attr->value); 21052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski} 21152364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 21252364f7ae31716d7827ea8f8566f4a28bd30a921Adam LesinskiTEST_F(ManifestFixerTest, RenameManifestInstrumentationPackageAndFullyQualifyTarget) { 21352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ManifestFixerOptions options; 214d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski options.renameInstrumentationTargetPackage = std::string("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 226d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski xml::Element* instrumentationEl = manifestEl->findChild({}, "instrumentation"); 22752364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, instrumentationEl); 22852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 229d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski xml::Attribute* attr = instrumentationEl->findAttribute(xml::kSchemaAndroid, "targetPackage"); 23052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 231d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ(std::string("com.android"), attr->value); 23252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski} 23352364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 23452364f7ae31716d7827ea8f8566f4a28bd30a921Adam LesinskiTEST_F(ManifestFixerTest, UseDefaultVersionNameAndCode) { 23552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ManifestFixerOptions options; 236d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski options.versionNameDefault = std::string("Beta"); 237d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski options.versionCodeDefault = std::string("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 247d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski xml::Attribute* attr = manifestEl->findAttribute(xml::kSchemaAndroid, "versionName"); 24852364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 249d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ(std::string("Beta"), attr->value); 25052364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 251d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski attr = manifestEl->findAttribute(xml::kSchemaAndroid, "versionCode"); 25252364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski ASSERT_NE(nullptr, attr); 253d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski EXPECT_EQ(std::string("0x10000000"), attr->value); 25452364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski} 25552364f7ae31716d7827ea8f8566f4a28bd30a921Adam Lesinski 2566b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam LesinskiTEST_F(ManifestFixerTest, EnsureManifestAttributesAreTyped) { 2576b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski EXPECT_EQ(nullptr, verify("<manifest package=\"android\" coreApp=\"hello\" />")); 2586b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski EXPECT_EQ(nullptr, verify("<manifest package=\"android\" coreApp=\"1dp\" />")); 2596b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski 2606b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski std::unique_ptr<xml::XmlResource> doc = 2616b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski verify("<manifest package=\"android\" coreApp=\"true\" />"); 2626b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski ASSERT_NE(nullptr, doc); 2636b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski 2646b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski xml::Element* el = xml::findRootElement(doc.get()); 2656b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski ASSERT_NE(nullptr, el); 2666b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski 2676b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski EXPECT_EQ("manifest", el->name); 2686b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski 2696b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski xml::Attribute* attr = el->findAttribute("", "coreApp"); 2706b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski ASSERT_NE(nullptr, attr); 2716b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski 2726b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski EXPECT_NE(nullptr, attr->compiledValue); 2736b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski EXPECT_NE(nullptr, valueCast<BinaryPrimitive>(attr->compiledValue.get())); 2746b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski} 2756b17d2cec2cc3bd97c684b7da490e3f6eab0d980Adam Lesinski 2762ae4a877d1623f851040ce69239552c873f1abf0Adam Lesinski} // namespace aapt 277