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#include "test/Common.h"
19
20#include <gtest/gtest.h>
21
22namespace aapt {
23
24TEST(ConfigFilterTest, EmptyFilterMatchesAnything) {
25    AxisConfigFilter filter;
26
27    EXPECT_TRUE(filter.match(test::parseConfigOrDie("320dpi")));
28    EXPECT_TRUE(filter.match(test::parseConfigOrDie("fr")));
29}
30
31TEST(ConfigFilterTest, MatchesConfigWithUnrelatedAxis) {
32    AxisConfigFilter filter;
33    filter.addConfig(test::parseConfigOrDie("fr"));
34
35    EXPECT_TRUE(filter.match(test::parseConfigOrDie("320dpi")));
36}
37
38TEST(ConfigFilterTest, MatchesConfigWithSameValueAxis) {
39    AxisConfigFilter filter;
40    filter.addConfig(test::parseConfigOrDie("fr"));
41
42    EXPECT_TRUE(filter.match(test::parseConfigOrDie("fr")));
43}
44
45TEST(ConfigFilterTest, MatchesConfigWithSameValueAxisAndOtherUnrelatedAxis) {
46    AxisConfigFilter filter;
47    filter.addConfig(test::parseConfigOrDie("fr"));
48
49    EXPECT_TRUE(filter.match(test::parseConfigOrDie("fr-320dpi")));
50}
51
52TEST(ConfigFilterTest, MatchesConfigWithOneMatchingAxis) {
53    AxisConfigFilter filter;
54    filter.addConfig(test::parseConfigOrDie("fr-rFR"));
55    filter.addConfig(test::parseConfigOrDie("sw360dp"));
56    filter.addConfig(test::parseConfigOrDie("normal"));
57    filter.addConfig(test::parseConfigOrDie("en-rUS"));
58
59    EXPECT_TRUE(filter.match(test::parseConfigOrDie("en")));
60}
61
62TEST(ConfigFilterTest, DoesNotMatchConfigWithDifferentValueAxis) {
63    AxisConfigFilter filter;
64    filter.addConfig(test::parseConfigOrDie("fr"));
65
66    EXPECT_FALSE(filter.match(test::parseConfigOrDie("de")));
67}
68
69TEST(ConfigFilterTest, DoesNotMatchWhenOneQualifierIsExplicitlyNotMatched) {
70    AxisConfigFilter filter;
71    filter.addConfig(test::parseConfigOrDie("fr-rFR"));
72    filter.addConfig(test::parseConfigOrDie("en-rUS"));
73    filter.addConfig(test::parseConfigOrDie("normal"));
74    filter.addConfig(test::parseConfigOrDie("large"));
75    filter.addConfig(test::parseConfigOrDie("xxhdpi"));
76    filter.addConfig(test::parseConfigOrDie("sw320dp"));
77
78    EXPECT_FALSE(filter.match(test::parseConfigOrDie("fr-sw600dp-v13")));
79}
80
81TEST(ConfigFilterTest, MatchesSmallestWidthWhenSmaller) {
82    AxisConfigFilter filter;
83    filter.addConfig(test::parseConfigOrDie("sw600dp"));
84
85    EXPECT_TRUE(filter.match(test::parseConfigOrDie("fr-sw320dp-v13")));
86}
87
88TEST(ConfigFilterTest, MatchesConfigWithSameLanguageButNoRegionSpecified) {
89    AxisConfigFilter filter;
90    filter.addConfig(test::parseConfigOrDie("de-rDE"));
91
92    EXPECT_TRUE(filter.match(test::parseConfigOrDie("de")));
93}
94
95TEST(ConfigFilterTest, IgnoresVersion) {
96    AxisConfigFilter filter;
97    filter.addConfig(test::parseConfigOrDie("normal-v4"));
98
99    // The configs don't match on any axis besides version, which should be 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
112} // namespace aapt
113