/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "Diagnostics.h" #include "ResourceTable.h" #include "ResourceValues.h" #include "util/Util.h" #include "test/Common.h" #include #include #include #include namespace aapt { struct ResourceTableTest : public ::testing::Test { struct EmptyDiagnostics : public IDiagnostics { void error(const DiagMessage& msg) override {} void warn(const DiagMessage& msg) override {} void note(const DiagMessage& msg) override {} }; EmptyDiagnostics mDiagnostics; }; TEST_F(ResourceTableTest, FailToAddResourceWithBadName) { ResourceTable table; EXPECT_FALSE(table.addResource( ResourceNameRef{ u"android", ResourceType::kId, u"hey,there" }, {}, Source{ "test.xml", 21 }, util::make_unique(), &mDiagnostics)); EXPECT_FALSE(table.addResource( ResourceNameRef{ u"android", ResourceType::kId, u"hey:there" }, {}, Source{ "test.xml", 21 }, util::make_unique(), &mDiagnostics)); } TEST_F(ResourceTableTest, AddOneResource) { ResourceTable table; EXPECT_TRUE(table.addResource(test::parseNameOrDie(u"@android:attr/id"), {}, Source{ "test/path/file.xml", 23 }, util::make_unique(), &mDiagnostics)); ASSERT_NE(nullptr, test::getValue(&table, u"@android:attr/id")); } TEST_F(ResourceTableTest, AddMultipleResources) { ResourceTable table; ConfigDescription config; ConfigDescription languageConfig; memcpy(languageConfig.language, "pl", sizeof(languageConfig.language)); EXPECT_TRUE(table.addResource( test::parseNameOrDie(u"@android:attr/layout_width"), config, Source{ "test/path/file.xml", 10 }, util::make_unique(), &mDiagnostics)); EXPECT_TRUE(table.addResource( test::parseNameOrDie(u"@android:attr/id"), config, Source{ "test/path/file.xml", 12 }, util::make_unique(), &mDiagnostics)); EXPECT_TRUE(table.addResource( test::parseNameOrDie(u"@android:string/ok"), config, Source{ "test/path/file.xml", 14 }, util::make_unique(), &mDiagnostics)); EXPECT_TRUE(table.addResource( test::parseNameOrDie(u"@android:string/ok"), languageConfig, Source{ "test/path/file.xml", 20 }, util::make_unique(android::Res_value{}), &mDiagnostics)); ASSERT_NE(nullptr, test::getValue(&table, u"@android:attr/layout_width")); ASSERT_NE(nullptr, test::getValue(&table, u"@android:attr/id")); ASSERT_NE(nullptr, test::getValue(&table, u"@android:string/ok")); ASSERT_NE(nullptr, test::getValueForConfig(&table, u"@android:string/ok", languageConfig)); } TEST_F(ResourceTableTest, OverrideWeakResourceValue) { ResourceTable table; ASSERT_TRUE(table.addResource(test::parseNameOrDie(u"@android:attr/foo"), {}, {}, util::make_unique(true), &mDiagnostics)); Attribute* attr = test::getValue(&table, u"@android:attr/foo"); ASSERT_NE(nullptr, attr); EXPECT_TRUE(attr->isWeak()); ASSERT_TRUE(table.addResource(test::parseNameOrDie(u"@android:attr/foo"), {}, {}, util::make_unique(false), &mDiagnostics)); attr = test::getValue(&table, u"@android:attr/foo"); ASSERT_NE(nullptr, attr); EXPECT_FALSE(attr->isWeak()); } } // namespace aapt