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 171ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "link/Linkers.h" 18ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski 19d0f116b619feede0cfdb647157ce5ab4d50a1c46Adam Lesinski#include "test/Test.h" 201ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 211ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskinamespace aapt { 221ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 231ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(PrivateAttributeMoverTest, MovePrivateAttributes) { 24ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); 251ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 26cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski std::unique_ptr<ResourceTable> table = 27cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski test::ResourceTableBuilder() 28ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddSimple("android:attr/publicA") 29ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddSimple("android:attr/privateA") 30ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddSimple("android:attr/publicB") 31ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddSimple("android:attr/privateB") 32ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .SetSymbolState("android:attr/publicA", ResourceId(0x01010000), 33cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski SymbolState::kPublic) 34ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .SetSymbolState("android:attr/publicB", ResourceId(0x01010000), 35cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski SymbolState::kPublic) 36ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .Build(); 371ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 38cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski PrivateAttributeMover mover; 39ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski ASSERT_TRUE(mover.Consume(context.get(), table.get())); 401ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 41ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski ResourceTablePackage* package = table->FindPackage("android"); 42cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_NE(package, nullptr); 431ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 44ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski ResourceTableType* type = package->FindType(ResourceType::kAttr); 45cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_NE(type, nullptr); 46cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_EQ(type->entries.size(), 2u); 47ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski EXPECT_NE(type->FindEntry("publicA"), nullptr); 48ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski EXPECT_NE(type->FindEntry("publicB"), nullptr); 491ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 50ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski type = package->FindType(ResourceType::kAttrPrivate); 51cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_NE(type, nullptr); 52cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_EQ(type->entries.size(), 2u); 53ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski EXPECT_NE(type->FindEntry("privateA"), nullptr); 54ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski EXPECT_NE(type->FindEntry("privateB"), nullptr); 551ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 561ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 57ceb9b2f80f853059233cdd29057f39a5960a74aeAdam LesinskiTEST(PrivateAttributeMoverTest, LeavePrivateAttributesWhenNoPublicAttributesDefined) { 58ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); 591ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 60cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 61ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddSimple("android:attr/privateA") 62ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddSimple("android:attr/privateB") 63ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .Build(); 641ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 65cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski PrivateAttributeMover mover; 66ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski ASSERT_TRUE(mover.Consume(context.get(), table.get())); 671ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 68ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski ResourceTablePackage* package = table->FindPackage("android"); 69cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_NE(package, nullptr); 701ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 71ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski ResourceTableType* type = package->FindType(ResourceType::kAttr); 72cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_NE(type, nullptr); 73cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_EQ(type->entries.size(), 2u); 741ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 75ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski type = package->FindType(ResourceType::kAttrPrivate); 76cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_EQ(type, nullptr); 771ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 781ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 79ceb9b2f80f853059233cdd29057f39a5960a74aeAdam LesinskiTEST(PrivateAttributeMoverTest, DoNotCreatePrivateAttrsIfNoneExist) { 80ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder().Build(); 81ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski std::unique_ptr<ResourceTable> table = 82ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski test::ResourceTableBuilder() 83ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski .AddSimple("android:attr/pub") 84ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski .SetSymbolState("android:attr/pub", ResourceId(0x01010000), SymbolState::kPublic) 85ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski .Build(); 86ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski 87ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski ResourceTablePackage* package = table->FindPackage("android"); 88ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski ASSERT_NE(nullptr, package); 89ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski 90ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski ASSERT_EQ(nullptr, package->FindType(ResourceType::kAttrPrivate)); 91ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski 92ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski PrivateAttributeMover mover; 93ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski ASSERT_TRUE(mover.Consume(context.get(), table.get())); 94ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski 95ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski ASSERT_EQ(nullptr, package->FindType(ResourceType::kAttrPrivate)); 96ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski} 97ceb9b2f80f853059233cdd29057f39a5960a74aeAdam Lesinski 98cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski} // namespace aapt 99