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 19ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski#include "ConfigDescription.h" 20fb6312fe93a8544e6a95d1c619c8cea3940cbe1aAdam Lesinski#include "test/Test.h" 211ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 22a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinskiusing ::testing::NotNull; 23a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski 241ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinskinamespace aapt { 251ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 261ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(AutoVersionerTest, GenerateVersionedResources) { 27ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski const ConfigDescription land_config = test::ParseConfigOrDie("land"); 28a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski const ConfigDescription sw600dp_land_config = test::ParseConfigOrDie("sw600dp-land"); 29cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 30cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ResourceEntry entry("foo"); 31a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski entry.values.push_back(util::make_unique<ResourceConfigValue>(ConfigDescription::DefaultConfig(), "")); 32a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski entry.values.push_back(util::make_unique<ResourceConfigValue>(land_config, "")); 33a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski entry.values.push_back(util::make_unique<ResourceConfigValue>(sw600dp_land_config, "")); 34a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski 35a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_TRUE(ShouldGenerateVersionedResource(&entry, ConfigDescription::DefaultConfig(), 17)); 36ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski EXPECT_TRUE(ShouldGenerateVersionedResource(&entry, land_config, 17)); 371ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 381ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 391ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(AutoVersionerTest, GenerateVersionedResourceWhenHigherVersionExists) { 40a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski const ConfigDescription sw600dp_v13_config = test::ParseConfigOrDie("sw600dp-v13"); 41ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski const ConfigDescription v21_config = test::ParseConfigOrDie("v21"); 42cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 43cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ResourceEntry entry("foo"); 44a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski entry.values.push_back(util::make_unique<ResourceConfigValue>(ConfigDescription::DefaultConfig(), "")); 455b7337f77cf036dda2c7218ccf22dedc774dcf76Adam Lesinski entry.values.push_back(util::make_unique<ResourceConfigValue>(sw600dp_v13_config, "")); 46bb94f32a0042c8e2ab3d6e0de1b693713d2a6eabAdam Lesinski entry.values.push_back(util::make_unique<ResourceConfigValue>(v21_config, "")); 47a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski 48a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_TRUE(ShouldGenerateVersionedResource(&entry, ConfigDescription::DefaultConfig(), 17)); 49a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_FALSE(ShouldGenerateVersionedResource(&entry, ConfigDescription::DefaultConfig(), 22)); 501ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 511ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 521ab598f46c3ff520a67f9d80194847741f3467abAdam LesinskiTEST(AutoVersionerTest, VersionStylesForTable) { 53cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski std::unique_ptr<ResourceTable> table = 54cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski test::ResourceTableBuilder() 55ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .SetPackageId("app", 0x7f) 56ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddValue( 57ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski "app:style/Foo", test::ParseConfigOrDie("v4"), 58cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ResourceId(0x7f020000), 59cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski test::StyleBuilder() 60ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddItem("android:attr/onClick", ResourceId(0x0101026f), 61cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski util::make_unique<Id>()) 62ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddItem("android:attr/paddingStart", ResourceId(0x010103b3), 63cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski util::make_unique<Id>()) 64ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddItem("android:attr/requiresSmallestWidthDp", 65cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ResourceId(0x01010364), util::make_unique<Id>()) 66ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddItem("android:attr/colorAccent", ResourceId(0x01010435), 67cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski util::make_unique<Id>()) 68ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .Build()) 69ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddValue( 70ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski "app:style/Foo", test::ParseConfigOrDie("v21"), 71cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ResourceId(0x7f020000), 72cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski test::StyleBuilder() 73ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .AddItem("android:attr/paddingEnd", ResourceId(0x010103b4), 74cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski util::make_unique<Id>()) 75ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .Build()) 76ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .Build(); 77cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 78cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski std::unique_ptr<IAaptContext> context = test::ContextBuilder() 79ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .SetCompilationPackage("app") 80ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .SetPackageId(0x7f) 81ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski .Build(); 82cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 83cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski AutoVersioner versioner; 84ce5e56e243d262a9b65459c3bd0bb9eaadd40628Adam Lesinski ASSERT_TRUE(versioner.Consume(context.get(), table.get())); 85cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 86a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski Style* style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo", test::ParseConfigOrDie("v4")); 87a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski ASSERT_THAT(style, NotNull()); 88cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_EQ(style->entries.size(), 1u); 89a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/onClick")), style->entries.front().key.name); 90cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski 91a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo", test::ParseConfigOrDie("v13")); 92a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski ASSERT_THAT(style, NotNull()); 93cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_EQ(style->entries.size(), 2u); 94a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/onClick")),style->entries[0].key.name); 95a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/requiresSmallestWidthDp")), style->entries[1].key.name); 96a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski 97a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo", test::ParseConfigOrDie("v17")); 98a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski ASSERT_THAT(style, NotNull()); 99cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski ASSERT_EQ(style->entries.size(), 3u); 100a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/onClick")), style->entries[0].key.name); 101a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/requiresSmallestWidthDp")), style->entries[1].key.name); 102a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/paddingStart")), style->entries[2].key.name); 103a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski 104a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski style = test::GetValueForConfig<Style>(table.get(), "app:style/Foo", test::ParseConfigOrDie("v21")); 105a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski ASSERT_THAT(style, NotNull()); 106a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski ASSERT_EQ(1u, style->entries.size()); 107a45893a5c51cc26f1fd63ec1aa4c39f55911c85bAdam Lesinski EXPECT_EQ(make_value(test::ParseNameOrDie("android:attr/paddingEnd")), style->entries.front().key.name); 1081ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski} 1091ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski 110cacb28f2d60858106e2819cc7d95a65e8bda890bAdam Lesinski} // namespace aapt 111