PrivateAttributeMover_test.cpp revision 1ab598f46c3ff520a67f9d80194847741f3467ab
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"
181ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "test/Builders.h"
191ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "test/Context.h"
201ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
211ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include <gtest/gtest.h>
221ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
231ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskinamespace aapt {
241ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
251ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(PrivateAttributeMoverTest, MovePrivateAttributes) {
261ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
271ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
281ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder()
291ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski            .addSimple(u"@android:attr/publicA")
301ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski            .addSimple(u"@android:attr/privateA")
311ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski            .addSimple(u"@android:attr/publicB")
321ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski            .addSimple(u"@android:attr/privateB")
331ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski            .build();
341ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_TRUE(table->markPublic(test::parseNameOrDie(u"@android:attr/publicA"),
351ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski                                  ResourceId(0x01010000), {}, context->getDiagnostics()));
361ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_TRUE(table->markPublic(test::parseNameOrDie(u"@android:attr/publicB"),
371ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski                                      ResourceId(0x01010002), {}, context->getDiagnostics()));
381ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
391ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    PrivateAttributeMover mover;
401ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_TRUE(mover.consume(context.get(), table.get()));
411ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
421ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ResourceTablePackage* package = table->findPackage(u"android");
431ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_NE(package, nullptr);
441ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
451ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ResourceTableType* type = package->findType(ResourceType::kAttr);
461ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_NE(type, nullptr);
471ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_EQ(type->entries.size(), 2u);
481ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    EXPECT_NE(type->findEntry(u"publicA"), nullptr);
491ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    EXPECT_NE(type->findEntry(u"publicB"), nullptr);
501ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
511ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    type = package->findType(ResourceType::kAttrPrivate);
521ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_NE(type, nullptr);
531ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_EQ(type->entries.size(), 2u);
541ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    EXPECT_NE(type->findEntry(u"privateA"), nullptr);
551ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    EXPECT_NE(type->findEntry(u"privateB"), nullptr);
561ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski}
571ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
581ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(PrivateAttributeMoverTest, LeavePrivateAttributesWhenNoPublicAttributesDefined) {
591ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    std::unique_ptr<IAaptContext> context = test::ContextBuilder().build();
601ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
611ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder()
621ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski            .addSimple(u"@android:attr/privateA")
631ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski            .addSimple(u"@android:attr/privateB")
641ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski            .build();
651ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
661ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    PrivateAttributeMover mover;
671ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_TRUE(mover.consume(context.get(), table.get()));
681ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
691ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ResourceTablePackage* package = table->findPackage(u"android");
701ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_NE(package, nullptr);
711ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
721ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ResourceTableType* type = package->findType(ResourceType::kAttr);
731ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_NE(type, nullptr);
741ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_EQ(type->entries.size(), 2u);
751ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
761ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    type = package->findType(ResourceType::kAttrPrivate);
771ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski    ASSERT_EQ(type, nullptr);
781ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski}
791ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski
801ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} // namespace aapt
81