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