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" 186425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski#include "SdkConstants.h" 196425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski 201ab598f46c3ff520a67f9d80194847741f3467abAdam Lesinski#include "util/StringPiece.h" 216f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 226f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <gtest/gtest.h> 236f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski#include <string> 246f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 256f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskinamespace aapt { 266f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 276f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinskistatic ::testing::AssertionResult TestParse(const StringPiece& input, 286f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ConfigDescription* config = nullptr) { 296f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski if (ConfigDescription::parse(input, config)) { 306f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski return ::testing::AssertionSuccess() << input << " was successfully parsed"; 316f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski } 326f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski return ::testing::AssertionFailure() << input << " could not be parsed"; 336f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 346f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 356f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseFailWhenQualifiersAreOutOfOrder) { 366f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_FALSE(TestParse("en-sw600dp-ldrtl")); 376f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_FALSE(TestParse("land-en")); 386f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_FALSE(TestParse("hdpi-320dpi")); 396f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 406f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 416f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseFailWhenQualifiersAreNotMatched) { 426f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_FALSE(TestParse("en-sw600dp-ILLEGAL")); 436f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 446f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 456f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseFailWhenQualifiersHaveTrailingDash) { 466f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_FALSE(TestParse("en-sw600dp-land-")); 476f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 486f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 496f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseBasicQualifiers) { 506f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ConfigDescription config; 516f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_TRUE(TestParse("", &config)); 526f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(std::string(""), config.toString().string()); 536f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 546f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_TRUE(TestParse("fr-land", &config)); 556f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(std::string("fr-land"), config.toString().string()); 566f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 576f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_TRUE(TestParse("mcc310-pl-sw720dp-normal-long-port-night-" 586f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski "xhdpi-keyssoft-qwerty-navexposed-nonav", &config)); 596f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(std::string("mcc310-pl-sw720dp-normal-long-port-night-" 606f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski "xhdpi-keyssoft-qwerty-navexposed-nonav-v13"), config.toString().string()); 616f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 626f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 636f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseLocales) { 646f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ConfigDescription config; 656f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_TRUE(TestParse("en-rUS", &config)); 666f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(std::string("en-rUS"), config.toString().string()); 676f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 686f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 696f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseQualifierAddedInApi13) { 706f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ConfigDescription config; 716f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_TRUE(TestParse("sw600dp", &config)); 726f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(std::string("sw600dp-v13"), config.toString().string()); 736f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 746f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_TRUE(TestParse("sw600dp-v8", &config)); 756f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(std::string("sw600dp-v13"), config.toString().string()); 766f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 776f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 786f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam LesinskiTEST(ConfigDescriptionTest, ParseCarAttribute) { 796f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski ConfigDescription config; 806f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_TRUE(TestParse("car", &config)); 816f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski EXPECT_EQ(android::ResTable_config::UI_MODE_TYPE_CAR, config.uiMode); 826f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} 836f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski 846425497f4129a40e75569328525c0dcbaa6e3f22Adam LesinskiTEST(ConfigDescriptionTest, TestParsingRoundQualifier) { 856425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski ConfigDescription config; 866425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski EXPECT_TRUE(TestParse("round", &config)); 876425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski EXPECT_EQ(android::ResTable_config::SCREENROUND_YES, 886425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski config.screenLayout2 & android::ResTable_config::MASK_SCREENROUND); 896425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski EXPECT_EQ(SDK_MARSHMALLOW, config.sdkVersion); 906425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski EXPECT_EQ(std::string("round-v23"), config.toString().string()); 916425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski 926425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski EXPECT_TRUE(TestParse("notround", &config)); 936425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski EXPECT_EQ(android::ResTable_config::SCREENROUND_NO, 946425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski config.screenLayout2 & android::ResTable_config::MASK_SCREENROUND); 956425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski EXPECT_EQ(SDK_MARSHMALLOW, config.sdkVersion); 966425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski EXPECT_EQ(std::string("notround-v23"), config.toString().string()); 976425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski} 986425497f4129a40e75569328525c0dcbaa6e3f22Adam Lesinski 996f6ceb7e1456698b1f33e04536bfb3227f9fcfcbAdam Lesinski} // namespace aapt 100