131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski/* 231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * Copyright (C) 2014 The Android Open Source Project 331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * 431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * Licensed under the Apache License, Version 2.0 (the "License"); 531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * you may not use this file except in compliance with the License. 631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * You may obtain a copy of the License at 731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * 831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * http://www.apache.org/licenses/LICENSE-2.0 931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * 1031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * Unless required by applicable law or agreed to in writing, software 1131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * distributed under the License is distributed on an "AS IS" BASIS, 1231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * See the License for the specific language governing permissions and 1431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski * limitations under the License. 1531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski */ 1631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 1731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski#include <androidfw/ResourceTypes.h> 1831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski#include <utils/Log.h> 1931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski#include <utils/String8.h> 2031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski#include <utils/Vector.h> 2131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 2231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski#include "TestHelpers.h" 2331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski#include <gtest/gtest.h> 2431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 2531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinskinamespace android { 2631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 2731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinskistatic ResTable_config selectBest(const ResTable_config& target, 2831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski const Vector<ResTable_config>& configs) { 2931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ResTable_config bestConfig; 3031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski memset(&bestConfig, 0, sizeof(bestConfig)); 3131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski const size_t configCount = configs.size(); 3231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski for (size_t i = 0; i < configCount; i++) { 3331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski const ResTable_config& thisConfig = configs[i]; 3431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski if (!thisConfig.match(target)) { 3531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski continue; 3631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski } 3731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 3831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski if (thisConfig.isBetterThan(bestConfig, &target)) { 3931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski bestConfig = thisConfig; 4031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski } 4131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski } 4231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski return bestConfig; 4331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski} 4431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 4531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinskistatic ResTable_config buildDensityConfig(int density) { 4631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ResTable_config config; 4731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski memset(&config, 0, sizeof(config)); 4831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski config.density = uint16_t(density); 4931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski config.sdkVersion = 4; 5031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski return config; 5131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski} 5231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 5331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigTest, shouldSelectBestDensity) { 5431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ResTable_config deviceConfig; 5531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski memset(&deviceConfig, 0, sizeof(deviceConfig)); 5631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski deviceConfig.density = ResTable_config::DENSITY_XHIGH; 5731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski deviceConfig.sdkVersion = 21; 5831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 5931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski Vector<ResTable_config> configs; 6031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 6131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ResTable_config expectedBest = buildDensityConfig(ResTable_config::DENSITY_HIGH); 6231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(expectedBest); 6331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); 6431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 6531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski expectedBest = buildDensityConfig(ResTable_config::DENSITY_XXHIGH); 6631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(expectedBest); 6731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); 6831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 6931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski expectedBest = buildDensityConfig(int(ResTable_config::DENSITY_XXHIGH) - 20); 7031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(expectedBest); 7131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); 7231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 7331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(buildDensityConfig(int(ResTable_config::DENSITY_HIGH) + 20)); 7431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); 7531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 7631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski expectedBest = buildDensityConfig(ResTable_config::DENSITY_XHIGH); 7731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(expectedBest); 7831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); 7931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 8031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski expectedBest = buildDensityConfig(ResTable_config::DENSITY_ANY); 8131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski expectedBest.sdkVersion = 21; 8231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(expectedBest); 8331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); 8431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski} 8531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 8631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam LesinskiTEST(ConfigTest, shouldSelectBestDensityWhenNoneSpecified) { 8731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ResTable_config deviceConfig; 8831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski memset(&deviceConfig, 0, sizeof(deviceConfig)); 8931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski deviceConfig.sdkVersion = 21; 9031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 9131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski Vector<ResTable_config> configs; 9231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(buildDensityConfig(ResTable_config::DENSITY_HIGH)); 9331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 9431245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ResTable_config expectedBest = buildDensityConfig(ResTable_config::DENSITY_MEDIUM); 9531245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(expectedBest); 9631245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); 9731245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 9831245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski expectedBest = buildDensityConfig(ResTable_config::DENSITY_ANY); 9931245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski configs.add(expectedBest); 10031245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski ASSERT_EQ(expectedBest, selectBest(deviceConfig, configs)); 10131245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski} 10231245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski 10331245b4f06003f1c8cd44c31b387c96ab4e282f9Adam Lesinski} // namespace android. 104