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