ConfigDescription_test.cpp revision 6f6ceb7e1456698b1f33e04536bfb3227f9fcfcb
16f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski/*
26f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Copyright (C) 2015 The Android Open Source Project
36f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
46f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Licensed under the Apache License, Version 2.0 (the "License");
56f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * you may not use this file except in compliance with the License.
66f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * You may obtain a copy of the License at
76f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
86f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *      http://www.apache.org/licenses/LICENSE-2.0
96f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski *
106f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * Unless required by applicable law or agreed to in writing, software
116f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * distributed under the License is distributed on an "AS IS" BASIS,
126f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
136f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * See the License for the specific language governing permissions and
146f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski * limitations under the License.
156f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski */
166f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
176f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "ConfigDescription.h"
186f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include "StringPiece.h"
196f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
206f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <gtest/gtest.h>
216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <string>
226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt {
246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistatic ::testing::AssertionResult TestParse(const StringPiece& input,
266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski                                            ConfigDescription* config = nullptr) {
276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    if (ConfigDescription::parse(input, config)) {
286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski        return ::testing::AssertionSuccess() << input << " was successfully parsed";
296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    }
306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    return ::testing::AssertionFailure() << input << " could not be parsed";
316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseFailWhenQualifiersAreOutOfOrder) {
346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_FALSE(TestParse("en-sw600dp-ldrtl"));
356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_FALSE(TestParse("land-en"));
366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_FALSE(TestParse("hdpi-320dpi"));
376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseFailWhenQualifiersAreNotMatched) {
406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_FALSE(TestParse("en-sw600dp-ILLEGAL"));
416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseFailWhenQualifiersHaveTrailingDash) {
446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_FALSE(TestParse("en-sw600dp-land-"));
456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseBasicQualifiers) {
486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    ConfigDescription config;
496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_TRUE(TestParse("", &config));
506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_EQ(std::string(""), config.toString().string());
516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_TRUE(TestParse("fr-land", &config));
536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_EQ(std::string("fr-land"), config.toString().string());
546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_TRUE(TestParse("mcc310-pl-sw720dp-normal-long-port-night-"
566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski                "xhdpi-keyssoft-qwerty-navexposed-nonav", &config));
576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_EQ(std::string("mcc310-pl-sw720dp-normal-long-port-night-"
586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski                "xhdpi-keyssoft-qwerty-navexposed-nonav-v13"), config.toString().string());
596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseLocales) {
626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    ConfigDescription config;
636f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_TRUE(TestParse("en-rUS", &config));
646f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_EQ(std::string("en-rUS"), config.toString().string());
656f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
666f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
676f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseQualifierAddedInApi13) {
686f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    ConfigDescription config;
696f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_TRUE(TestParse("sw600dp", &config));
706f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_EQ(std::string("sw600dp-v13"), config.toString().string());
716f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
726f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_TRUE(TestParse("sw600dp-v8", &config));
736f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_EQ(std::string("sw600dp-v13"), config.toString().string());
746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
766f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseCarAttribute) {
776f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    ConfigDescription config;
786f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_TRUE(TestParse("car", &config));
796f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski    EXPECT_EQ(android::ResTable_config::UI_MODE_TYPE_CAR, config.uiMode);
806f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski}
816f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski
826f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt
83