1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17#include "filter/ConfigFilter.h" 18 19#include "test/Test.h" 20 21namespace aapt { 22 23TEST(ConfigFilterTest, EmptyFilterMatchesAnything) { 24 AxisConfigFilter filter; 25 26 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("320dpi"))); 27 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("fr"))); 28} 29 30TEST(ConfigFilterTest, MatchesConfigWithUnrelatedAxis) { 31 AxisConfigFilter filter; 32 filter.AddConfig(test::ParseConfigOrDie("fr")); 33 34 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("320dpi"))); 35} 36 37TEST(ConfigFilterTest, MatchesConfigWithSameValueAxis) { 38 AxisConfigFilter filter; 39 filter.AddConfig(test::ParseConfigOrDie("fr")); 40 41 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("fr"))); 42} 43 44TEST(ConfigFilterTest, MatchesConfigWithSameValueAxisAndOtherUnrelatedAxis) { 45 AxisConfigFilter filter; 46 filter.AddConfig(test::ParseConfigOrDie("fr")); 47 48 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("fr-320dpi"))); 49} 50 51TEST(ConfigFilterTest, MatchesConfigWithOneMatchingAxis) { 52 AxisConfigFilter filter; 53 filter.AddConfig(test::ParseConfigOrDie("fr-rFR")); 54 filter.AddConfig(test::ParseConfigOrDie("sw360dp")); 55 filter.AddConfig(test::ParseConfigOrDie("normal")); 56 filter.AddConfig(test::ParseConfigOrDie("en-rUS")); 57 58 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("en"))); 59} 60 61TEST(ConfigFilterTest, DoesNotMatchConfigWithDifferentValueAxis) { 62 AxisConfigFilter filter; 63 filter.AddConfig(test::ParseConfigOrDie("fr")); 64 65 EXPECT_FALSE(filter.Match(test::ParseConfigOrDie("de"))); 66} 67 68TEST(ConfigFilterTest, DoesNotMatchWhenOneQualifierIsExplicitlyNotMatched) { 69 AxisConfigFilter filter; 70 filter.AddConfig(test::ParseConfigOrDie("fr-rFR")); 71 filter.AddConfig(test::ParseConfigOrDie("en-rUS")); 72 filter.AddConfig(test::ParseConfigOrDie("normal")); 73 filter.AddConfig(test::ParseConfigOrDie("large")); 74 filter.AddConfig(test::ParseConfigOrDie("xxhdpi")); 75 filter.AddConfig(test::ParseConfigOrDie("sw320dp")); 76 77 EXPECT_FALSE(filter.Match(test::ParseConfigOrDie("fr-sw600dp-v13"))); 78} 79 80TEST(ConfigFilterTest, MatchesSmallestWidthWhenSmaller) { 81 AxisConfigFilter filter; 82 filter.AddConfig(test::ParseConfigOrDie("sw600dp")); 83 84 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("fr-sw320dp-v13"))); 85} 86 87TEST(ConfigFilterTest, MatchesConfigWithSameLanguageButNoRegionSpecified) { 88 AxisConfigFilter filter; 89 filter.AddConfig(test::ParseConfigOrDie("de-rDE")); 90 91 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("de"))); 92} 93 94TEST(ConfigFilterTest, IgnoresVersion) { 95 AxisConfigFilter filter; 96 filter.AddConfig(test::ParseConfigOrDie("normal-v4")); 97 98 // The configs don't match on any axis besides version, which should be 99 // ignored. 100 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("sw600dp-v13"))); 101} 102 103TEST(ConfigFilterTest, MatchesConfigWithRegion) { 104 AxisConfigFilter filter; 105 filter.AddConfig(test::ParseConfigOrDie("kok")); 106 filter.AddConfig(test::ParseConfigOrDie("kok-rIN")); 107 filter.AddConfig(test::ParseConfigOrDie("kok-v419")); 108 109 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("kok-rIN"))); 110} 111 112TEST(ConfigFilterTest, MatchesScripts) { 113 AxisConfigFilter filter; 114 115 // "sr" gets automatically computed the script "Cyrl" 116 filter.AddConfig(test::ParseConfigOrDie("sr")); 117 118 // "sr" -> "b+sr+Cyrl" 119 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("b+sr+Cyrl"))); 120 121 // The incoming "sr" is also auto-computed to "b+sr+Cyrl". 122 EXPECT_TRUE(filter.Match(test::ParseConfigOrDie("sr"))); 123 124 // "sr" -> "b+sr+Cyrl", which doesn't match "Latn". 125 EXPECT_FALSE(filter.Match(test::ParseConfigOrDie("b+sr+Latn"))); 126} 127 128} // namespace aapt 129