1355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski/* 2355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * Copyright (C) 2016 The Android Open Source Project 3355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * 4355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 5355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * you may not use this file except in compliance with the License. 6355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * You may obtain a copy of the License at 7355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * 8355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 9355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * 10355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * Unless required by applicable law or agreed to in writing, software 11355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 12355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * See the License for the specific language governing permissions and 14355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski * limitations under the License. 15355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski */ 16355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 17355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski#include "split/TableSplitter.h" 18355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski#include "test/Builders.h" 19355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski#include "test/Common.h" 20355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 21355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski#include <gtest/gtest.h> 22355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 23355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinskinamespace aapt { 24355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 25355f285ffd000f6cfe76680eb22d010546d124bbAdam LesinskiTEST(TableSplitterTest, NoSplitPreferredDensity) { 26355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski std::unique_ptr<ResourceTable> table = test::ResourceTableBuilder() 27355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski .addFileReference(u"@android:drawable/icon", u"res/drawable-mdpi/icon.png", 28355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("mdpi")) 29355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski .addFileReference(u"@android:drawable/icon", u"res/drawable-hdpi/icon.png", 30355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("hdpi")) 31355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski .addFileReference(u"@android:drawable/icon", u"res/drawable-xhdpi/icon.png", 32355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("xhdpi")) 33355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski .addFileReference(u"@android:drawable/icon", u"res/drawable-xxhdpi/icon.png", 34355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("xxhdpi")) 35355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski .addSimple(u"@android:string/one", {}) 36355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski .build(); 37355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 38355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski TableSplitterOptions options; 39355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski options.preferredDensity = ConfigDescription::DENSITY_XHIGH; 40355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski TableSplitter splitter({}, options); 41355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski splitter.splitTable(table.get()); 42355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 43355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<FileReference>(table.get(), 44355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski u"@android:drawable/icon", 45355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("mdpi"))); 46355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<FileReference>(table.get(), 47355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski u"@android:drawable/icon", 48355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("hdpi"))); 49355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_NE(nullptr, test::getValueForConfig<FileReference>(table.get(), 50355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski u"@android:drawable/icon", 51355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("xhdpi"))); 52355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<FileReference>(table.get(), 53355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski u"@android:drawable/icon", 54355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("xxhdpi"))); 55355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_NE(nullptr, test::getValue<Id>(table.get(), u"@android:string/one")); 56355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski} 57355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 58355f285ffd000f6cfe76680eb22d010546d124bbAdam LesinskiTEST(TableSplitterTest, SplitTableByConfigAndDensity) { 59355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski ResourceTable table; 60355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 61355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski const ResourceName foo = test::parseNameOrDie(u"@android:string/foo"); 62355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski ASSERT_TRUE(table.addResource(foo, test::parseConfigOrDie("land-hdpi"), {}, 63355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski util::make_unique<Id>(), 64355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::getDiagnostics())); 65355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski ASSERT_TRUE(table.addResource(foo, test::parseConfigOrDie("land-xhdpi"), {}, 66355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski util::make_unique<Id>(), 67355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::getDiagnostics())); 68355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski ASSERT_TRUE(table.addResource(foo, test::parseConfigOrDie("land-xxhdpi"), {}, 69355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski util::make_unique<Id>(), 70355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::getDiagnostics())); 71355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 72355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski std::vector<SplitConstraints> constraints; 73355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski constraints.push_back(SplitConstraints{ { test::parseConfigOrDie("land-mdpi") } }); 74355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski constraints.push_back(SplitConstraints{ { test::parseConfigOrDie("land-xhdpi") } }); 75355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 76355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski TableSplitter splitter(constraints, TableSplitterOptions{}); 77355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski splitter.splitTable(&table); 78355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 79355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski ASSERT_EQ(2u, splitter.getSplits().size()); 80355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 81355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski ResourceTable* splitOne = splitter.getSplits()[0].get(); 82355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski ResourceTable* splitTwo = splitter.getSplits()[1].get(); 83355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 84355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski // Since a split was defined, all densities should be gone from base. 85355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<Id>(&table, u"@android:string/foo", 86355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-hdpi"))); 87355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<Id>(&table, u"@android:string/foo", 88355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-xhdpi"))); 89355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<Id>(&table, u"@android:string/foo", 90355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-xxhdpi"))); 91355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 92355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_NE(nullptr, test::getValueForConfig<Id>(splitOne, u"@android:string/foo", 93355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-hdpi"))); 94355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<Id>(splitOne, u"@android:string/foo", 95355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-xhdpi"))); 96355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<Id>(splitOne, u"@android:string/foo", 97355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-xxhdpi"))); 98355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 99355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<Id>(splitTwo, u"@android:string/foo", 100355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-hdpi"))); 101355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_NE(nullptr, test::getValueForConfig<Id>(splitTwo, u"@android:string/foo", 102355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-xhdpi"))); 103355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski EXPECT_EQ(nullptr, test::getValueForConfig<Id>(splitTwo, u"@android:string/foo", 104355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski test::parseConfigOrDie("land-xxhdpi"))); 105355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski} 106355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski 107355f285ffd000f6cfe76680eb22d010546d124bbAdam Lesinski} // namespace aapt 108