SplitSelector_test.cpp revision 42eea270a0a2bc54f454312817c41ac357e3a884
142eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski/* 242eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * Copyright (C) 2014 The Android Open Source Project 342eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * 442eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 542eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * you may not use this file except in compliance with the License. 642eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * You may obtain a copy of the License at 742eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * 842eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 942eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * 1042eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * Unless required by applicable law or agreed to in writing, software 1142eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1242eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1342eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * See the License for the specific language governing permissions and 1442eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski * limitations under the License. 1542eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski */ 1642eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 1742eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski#include <gtest/gtest.h> 1842eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski#include <utils/String8.h> 1942eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski#include <utils/Vector.h> 2042eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 2142eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski#include "SplitDescription.h" 2242eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski#include "SplitSelector.h" 2342eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski#include "TestRules.h" 2442eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 2542eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinskinamespace split { 2642eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 2742eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinskiusing namespace android; 2842eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 2942eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinskistatic ::testing::AssertionResult addSplit(Vector<SplitDescription>& splits, const char* str) { 3042eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski SplitDescription split; 3142eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski if (!SplitDescription::parse(String8(str), &split)) { 3242eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski return ::testing::AssertionFailure() << str << " is not a valid configuration."; 3342eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski } 3442eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski splits.add(split); 3542eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski return ::testing::AssertionSuccess(); 3642eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski} 3742eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 3842eea270a0a2bc54f454312817c41ac357e3a884Adam LesinskiTEST(SplitSelectorTest, rulesShouldMatchSelection) { 3942eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski Vector<SplitDescription> splits; 4042eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_TRUE(addSplit(splits, "hdpi")); 4142eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_TRUE(addSplit(splits, "xhdpi")); 4242eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_TRUE(addSplit(splits, "xxhdpi")); 4342eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_TRUE(addSplit(splits, "mdpi")); 4442eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 4542eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski SplitDescription targetSplit; 4642eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_TRUE(SplitDescription::parse(String8("hdpi"), &targetSplit)); 4742eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 4842eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski SplitSelector selector(splits); 4942eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski SortedVector<SplitDescription> bestSplits; 5042eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski bestSplits.merge(selector.getBestSplits(targetSplit)); 5142eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 5242eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski SplitDescription expected; 5342eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_TRUE(SplitDescription::parse(String8("hdpi"), &expected)); 5442eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski EXPECT_GE(bestSplits.indexOf(expected), 0); 5542eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 5642eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski KeyedVector<SplitDescription, sp<Rule> > rules = selector.getRules(); 5742eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ssize_t idx = rules.indexOfKey(expected); 5842eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_GE(idx, 0); 5942eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski sp<Rule> rule = rules[idx]; 6042eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_TRUE(rule != NULL); 6142eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 6242eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_GT(ResTable_config::DENSITY_HIGH, 180); 6342eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski ASSERT_LT(ResTable_config::DENSITY_HIGH, 263); 6442eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 6542eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski Rule expectedRule(test::AndRule() 6642eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski .add(test::GtRule(Rule::SDK_VERSION, 3)) 6742eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski .add(test::GtRule(Rule::SCREEN_DENSITY, 180)) 6842eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski .add(test::LtRule(Rule::SCREEN_DENSITY, 263))); 6942eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski EXPECT_RULES_EQ(rule, expectedRule); 7042eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski} 7142eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski 7242eea270a0a2bc54f454312817c41ac357e3a884Adam Lesinski} // namespace split 73