140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski/* 240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Copyright (C) 2014 The Android Open Source Project 340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * you may not use this file except in compliance with the License. 640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * You may obtain a copy of the License at 740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * 1040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * Unless required by applicable law or agreed to in writing, software 1140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * See the License for the specific language governing permissions and 1440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski * limitations under the License. 1540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski */ 1640e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 1740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include "RuleGenerator.h" 1840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 19dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#include "aapt/SdkConstants.h" 20dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#include "TestRules.h" 21dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 2240e8eefbedcafc51948945647d746daaee092f16Adam Lesinski#include <gtest/gtest.h> 23dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski#include <utils/Vector.h> 2440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2540e8eefbedcafc51948945647d746daaee092f16Adam Lesinskiusing namespace android; 26dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinskiusing namespace split::test; 2740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 2840e8eefbedcafc51948945647d746daaee092f16Adam Lesinskinamespace split { 2940e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 3040e8eefbedcafc51948945647d746daaee092f16Adam LesinskiTEST(RuleGeneratorTest, testAbiRules) { 3140e8eefbedcafc51948945647d746daaee092f16Adam Lesinski Vector<abi::Variant> abis; 32dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t armeabiIndex = abis.add(abi::Variant_armeabi); 33dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t armeabi_v7aIndex = abis.add(abi::Variant_armeabi_v7a); 34dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t x86Index = abis.add(abi::Variant_x86); 3540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 36dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateAbi(abis, armeabiIndex), 37dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ContainsAnyRule(Rule::NATIVE_PLATFORM, "armeabi") 38dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 39dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 40dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateAbi(abis, armeabi_v7aIndex), 41dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ContainsAnyRule(Rule::NATIVE_PLATFORM, "armeabi-v7a", "arm64-v8a") 42dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 4340e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 44dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateAbi(abis, x86Index), 45dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ContainsAnyRule(Rule::NATIVE_PLATFORM, "x86", "x86_64") 46dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 4740e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} 4840e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 49dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam LesinskiTEST(RuleGeneratorTest, densityConstantsAreSane) { 50c3344e8a6d7402326204d1232a4c5ffa382f70a9Adam Lesinski EXPECT_LT(263, (int) ConfigDescription::DENSITY_XHIGH); 51c3344e8a6d7402326204d1232a4c5ffa382f70a9Adam Lesinski EXPECT_GT(262, (int) ConfigDescription::DENSITY_HIGH); 52c3344e8a6d7402326204d1232a4c5ffa382f70a9Adam Lesinski EXPECT_LT(363, (int) ConfigDescription::DENSITY_XXHIGH); 53c3344e8a6d7402326204d1232a4c5ffa382f70a9Adam Lesinski EXPECT_GT(362, (int) ConfigDescription::DENSITY_XHIGH); 5440e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} 5540e8eefbedcafc51948945647d746daaee092f16Adam Lesinski 56dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam LesinskiTEST(RuleGeneratorTest, testDensityRules) { 57dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski Vector<int> densities; 58dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t highIndex = densities.add(ConfigDescription::DENSITY_HIGH); 59dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t xhighIndex = densities.add(ConfigDescription::DENSITY_XHIGH); 60dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t xxhighIndex = densities.add(ConfigDescription::DENSITY_XXHIGH); 61dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 62dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateDensity(densities, highIndex), 63dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski AndRule() 64dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(LtRule(Rule::SCREEN_DENSITY, 263)) 65dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 66dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 67dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateDensity(densities, xhighIndex), 68dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski AndRule() 69dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(GtRule(Rule::SCREEN_DENSITY, 262)) 70dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(LtRule(Rule::SCREEN_DENSITY, 363)) 71dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 72dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 73dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateDensity(densities, xxhighIndex), 74dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski AndRule() 75dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(GtRule(Rule::SCREEN_DENSITY, 362)) 76dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 77c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski} 78c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski 79dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam LesinskiTEST(RuleGeneratorTest, testDensityRulesWithAnyDpi) { 80dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski Vector<int> densities; 81dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t highIndex = densities.add(ConfigDescription::DENSITY_HIGH); 82dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t xhighIndex = densities.add(ConfigDescription::DENSITY_XHIGH); 83dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t xxhighIndex = densities.add(ConfigDescription::DENSITY_XXHIGH); 84dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski const ssize_t anyIndex = densities.add(ConfigDescription::DENSITY_ANY); 85dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 86dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateDensity(densities, highIndex), 87dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski AndRule() 88dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(LtRule(Rule::SDK_VERSION, SDK_LOLLIPOP)) 89dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(LtRule(Rule::SCREEN_DENSITY, 263)) 90dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 91dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 92dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateDensity(densities, xhighIndex), 93dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski AndRule() 94dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(LtRule(Rule::SDK_VERSION, SDK_LOLLIPOP)) 95dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(GtRule(Rule::SCREEN_DENSITY, 262)) 96dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(LtRule(Rule::SCREEN_DENSITY, 363)) 97dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 98dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 99dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateDensity(densities, xxhighIndex), 100dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski AndRule() 101dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(LtRule(Rule::SDK_VERSION, SDK_LOLLIPOP)) 102dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski .add(GtRule(Rule::SCREEN_DENSITY, 362)) 103dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski ); 104dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski 105dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski // We expect AlwaysTrue because anydpi always has attached v21 to the configuration 106dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski // and the rest of the rule generation code generates the sdk version checks. 107dcdfe9fef4b07ee53d312c3fbecc74cb215ace6fAdam Lesinski EXPECT_RULES_EQ(RuleGenerator::generateDensity(densities, anyIndex), AlwaysTrue()); 108c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski} 109c3dc0b57b8d0b3875f868788e110aa67fb032b4aAdam Lesinski 11040e8eefbedcafc51948945647d746daaee092f16Adam Lesinski} // namespace split 111