ResourceFilter_test.cpp revision fab50875b98e8274ac8ee44b38ba42521bbbf1f9
15ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver/* 25ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * Copyright (C) 2014 The Android Open Source Project 35ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * 45ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * Licensed under the Apache License, Version 2.0 (the "License"); 55ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * you may not use this file except in compliance with the License. 65ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * You may obtain a copy of the License at 75ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * 85ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * http://www.apache.org/licenses/LICENSE-2.0 95ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * 105ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * Unless required by applicable law or agreed to in writing, software 115ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * distributed under the License is distributed on an "AS IS" BASIS, 125ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * See the License for the specific language governing permissions and 145ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver * limitations under the License. 155ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver */ 165ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver 175ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver#include <androidfw/ResourceTypes.h> 185ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver#include <utils/String8.h> 195ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver#include <gtest/gtest.h> 205ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver 215ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver#include "AaptConfig.h" 225ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver#include "ResourceFilter.h" 235ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver#include "ConfigDescription.h" 245ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver 255ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruverusing android::String8; 265ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver 275ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver// In this context, 'Axis' represents a particular field in the configuration, 285ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver// such as language or density. 295ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver 305ff4ee9a3fc898dbe9a67386e984f14c21338391Ben GruverTEST(WeakResourceFilterTest, EmptyFilterMatchesAnything) { 315ff4ee9a3fc898dbe9a67386e984f14c21338391Ben Gruver WeakResourceFilter filter; 32bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver ASSERT_EQ(NO_ERROR, filter.parse(String8(""))); 33bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 34bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver ConfigDescription config; 35bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver config.density = 320; 36bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 37bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver EXPECT_TRUE(filter.match(config)); 38bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 39bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver config.language[0] = 'f'; 40bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver config.language[1] = 'r'; 41bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 42bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver EXPECT_TRUE(filter.match(config)); 43bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver} 44bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 45bb7937fd308738b46db61e5e6181dff3c8e6e19eBen GruverTEST(WeakResourceFilterTest, MatchesConfigWithUnrelatedAxis) { 46bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver WeakResourceFilter filter; 47bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver ASSERT_EQ(NO_ERROR, filter.parse(String8("fr"))); 48bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 49bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver ConfigDescription config; 50bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver config.density = 320; 51bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 52bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver EXPECT_TRUE(filter.match(config)); 53bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver} 54bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 55bb7937fd308738b46db61e5e6181dff3c8e6e19eBen GruverTEST(WeakResourceFilterTest, MatchesConfigWithSameValueAxis) { 56bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver WeakResourceFilter filter; 57bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver ASSERT_EQ(NO_ERROR, filter.parse(String8("fr"))); 58bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 59bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver ConfigDescription config; 60bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver config.language[0] = 'f'; 61bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver config.language[1] = 'r'; 62bb7937fd308738b46db61e5e6181dff3c8e6e19eBen Gruver 63 EXPECT_TRUE(filter.match(config)); 64} 65 66TEST(WeakResourceFilterTest, MatchesConfigWithSameValueAxisAndOtherUnrelatedAxis) { 67 WeakResourceFilter filter; 68 ASSERT_EQ(NO_ERROR, filter.parse(String8("fr"))); 69 70 ConfigDescription config; 71 config.language[0] = 'f'; 72 config.language[1] = 'r'; 73 config.density = 320; 74 75 EXPECT_TRUE(filter.match(config)); 76} 77 78TEST(WeakResourceFilterTest, DoesNotMatchConfigWithDifferentValueAxis) { 79 WeakResourceFilter filter; 80 ASSERT_EQ(NO_ERROR, filter.parse(String8("fr"))); 81 82 ConfigDescription config; 83 config.language[0] = 'd'; 84 config.language[1] = 'e'; 85 86 EXPECT_FALSE(filter.match(config)); 87} 88 89TEST(WeakResourceFilterTest, MatchesConfigWithSameLanguageButNoRegionSpecified) { 90 WeakResourceFilter filter; 91 ASSERT_EQ(NO_ERROR, filter.parse(String8("de-rDE"))); 92 93 ConfigDescription config; 94 config.language[0] = 'd'; 95 config.language[1] = 'e'; 96 97 EXPECT_TRUE(filter.match(config)); 98} 99 100TEST(WeakResourceFilterTest, ParsesStandardLocaleOnlyString) { 101 WeakResourceFilter filter; 102 EXPECT_EQ(NO_ERROR, filter.parse(String8("de_DE"))); 103} 104 105TEST(WeakResourceFilterTest, IgnoresVersion) { 106 WeakResourceFilter filter; 107 ASSERT_EQ(NO_ERROR, filter.parse(String8("normal-v4"))); 108 109 ConfigDescription config; 110 config.smallestScreenWidthDp = 600; 111 config.version = 13; 112 113 // The configs don't match on any axis besides version, which should be ignored. 114 EXPECT_TRUE(filter.match(config)); 115} 116 117TEST(WeakResourceFilterTest, MatchesConfigWithRegion) { 118 WeakResourceFilter filter; 119 ASSERT_EQ(NO_ERROR, filter.parse(String8("kok,kok_IN,kok_419"))); 120 121 ConfigDescription config; 122 AaptLocaleValue val; 123 ASSERT_TRUE(val.initFromFilterString(String8("kok_IN"))); 124 val.writeTo(&config); 125 126 EXPECT_TRUE(filter.match(config)); 127} 128 129