| /* |
| * Copyright (C) 2014 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 <gtest/gtest.h> |
| #include <utils/String8.h> |
| #include <utils/Vector.h> |
| |
| #include "SplitDescription.h" |
| #include "SplitSelector.h" |
| #include "TestRules.h" |
| |
| namespace split { |
| |
| using namespace android; |
| |
| static ::testing::AssertionResult addSplit(Vector<SplitDescription>& splits, const char* str) { |
| SplitDescription split; |
| if (!SplitDescription::parse(String8(str), &split)) { |
| return ::testing::AssertionFailure() << str << " is not a valid configuration."; |
| } |
| splits.add(split); |
| return ::testing::AssertionSuccess(); |
| } |
| |
| TEST(SplitSelectorTest, rulesShouldMatchSelection) { |
| Vector<SplitDescription> splits; |
| ASSERT_TRUE(addSplit(splits, "hdpi")); |
| ASSERT_TRUE(addSplit(splits, "xhdpi")); |
| ASSERT_TRUE(addSplit(splits, "xxhdpi")); |
| ASSERT_TRUE(addSplit(splits, "mdpi")); |
| |
| SplitDescription targetSplit; |
| ASSERT_TRUE(SplitDescription::parse(String8("hdpi"), &targetSplit)); |
| |
| SplitSelector selector(splits); |
| SortedVector<SplitDescription> bestSplits; |
| bestSplits.merge(selector.getBestSplits(targetSplit)); |
| |
| SplitDescription expected; |
| ASSERT_TRUE(SplitDescription::parse(String8("hdpi"), &expected)); |
| EXPECT_GE(bestSplits.indexOf(expected), 0); |
| |
| KeyedVector<SplitDescription, sp<Rule> > rules = selector.getRules(); |
| ssize_t idx = rules.indexOfKey(expected); |
| ASSERT_GE(idx, 0); |
| sp<Rule> rule = rules[idx]; |
| ASSERT_TRUE(rule != NULL); |
| |
| ASSERT_GT(ResTable_config::DENSITY_HIGH, 180); |
| ASSERT_LT(ResTable_config::DENSITY_HIGH, 263); |
| |
| Rule expectedRule(test::AndRule() |
| .add(test::GtRule(Rule::SDK_VERSION, 3)) |
| .add(test::GtRule(Rule::SCREEN_DENSITY, 180)) |
| .add(test::LtRule(Rule::SCREEN_DENSITY, 263))); |
| EXPECT_RULES_EQ(rule, expectedRule); |
| } |
| |
| } // namespace split |