ResourceUtils_test.cpp revision 1ab598f46c3ff520a67f9d80194847741f3467ab
1/* 2 * Copyright (C) 2015 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 "Resource.h" 18#include "ResourceUtils.h" 19 20#include "test/Common.h" 21 22#include <gtest/gtest.h> 23 24namespace aapt { 25 26TEST(ResourceUtilsTest, ParseReferenceWithNoPackage) { 27 ResourceNameRef expected = { {}, ResourceType::kColor, u"foo" }; 28 ResourceNameRef actual; 29 bool create = false; 30 bool privateRef = false; 31 EXPECT_TRUE(ResourceUtils::tryParseReference(u"@color/foo", &actual, &create, &privateRef)); 32 EXPECT_EQ(expected, actual); 33 EXPECT_FALSE(create); 34 EXPECT_FALSE(privateRef); 35} 36 37TEST(ResourceUtilsTest, ParseReferenceWithPackage) { 38 ResourceNameRef expected = { u"android", ResourceType::kColor, u"foo" }; 39 ResourceNameRef actual; 40 bool create = false; 41 bool privateRef = false; 42 EXPECT_TRUE(ResourceUtils::tryParseReference(u"@android:color/foo", &actual, &create, 43 &privateRef)); 44 EXPECT_EQ(expected, actual); 45 EXPECT_FALSE(create); 46 EXPECT_FALSE(privateRef); 47} 48 49TEST(ResourceUtilsTest, ParseReferenceWithSurroundingWhitespace) { 50 ResourceNameRef expected = { u"android", ResourceType::kColor, u"foo" }; 51 ResourceNameRef actual; 52 bool create = false; 53 bool privateRef = false; 54 EXPECT_TRUE(ResourceUtils::tryParseReference(u"\t @android:color/foo\n \n\t", &actual, 55 &create, &privateRef)); 56 EXPECT_EQ(expected, actual); 57 EXPECT_FALSE(create); 58 EXPECT_FALSE(privateRef); 59} 60 61TEST(ResourceUtilsTest, ParseAutoCreateIdReference) { 62 ResourceNameRef expected = { u"android", ResourceType::kId, u"foo" }; 63 ResourceNameRef actual; 64 bool create = false; 65 bool privateRef = false; 66 EXPECT_TRUE(ResourceUtils::tryParseReference(u"@+android:id/foo", &actual, &create, 67 &privateRef)); 68 EXPECT_EQ(expected, actual); 69 EXPECT_TRUE(create); 70 EXPECT_FALSE(privateRef); 71} 72 73TEST(ResourceUtilsTest, ParsePrivateReference) { 74 ResourceNameRef expected = { u"android", ResourceType::kId, u"foo" }; 75 ResourceNameRef actual; 76 bool create = false; 77 bool privateRef = false; 78 EXPECT_TRUE(ResourceUtils::tryParseReference(u"@*android:id/foo", &actual, &create, 79 &privateRef)); 80 EXPECT_EQ(expected, actual); 81 EXPECT_FALSE(create); 82 EXPECT_TRUE(privateRef); 83} 84 85TEST(ResourceUtilsTest, FailToParseAutoCreateNonIdReference) { 86 bool create = false; 87 bool privateRef = false; 88 ResourceNameRef actual; 89 EXPECT_FALSE(ResourceUtils::tryParseReference(u"@+android:color/foo", &actual, &create, 90 &privateRef)); 91} 92 93TEST(ResourceUtilsTest, ParseStyleParentReference) { 94 const ResourceName kAndroidStyleFooName = { u"android", ResourceType::kStyle, u"foo" }; 95 const ResourceName kStyleFooName = { {}, ResourceType::kStyle, u"foo" }; 96 97 std::string errStr; 98 Maybe<Reference> ref = ResourceUtils::parseStyleParentReference(u"@android:style/foo", &errStr); 99 AAPT_ASSERT_TRUE(ref); 100 EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName); 101 102 ref = ResourceUtils::parseStyleParentReference(u"@style/foo", &errStr); 103 AAPT_ASSERT_TRUE(ref); 104 EXPECT_EQ(ref.value().name.value(), kStyleFooName); 105 106 ref = ResourceUtils::parseStyleParentReference(u"?android:style/foo", &errStr); 107 AAPT_ASSERT_TRUE(ref); 108 EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName); 109 110 ref = ResourceUtils::parseStyleParentReference(u"?style/foo", &errStr); 111 AAPT_ASSERT_TRUE(ref); 112 EXPECT_EQ(ref.value().name.value(), kStyleFooName); 113 114 ref = ResourceUtils::parseStyleParentReference(u"android:style/foo", &errStr); 115 AAPT_ASSERT_TRUE(ref); 116 EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName); 117 118 ref = ResourceUtils::parseStyleParentReference(u"android:foo", &errStr); 119 AAPT_ASSERT_TRUE(ref); 120 EXPECT_EQ(ref.value().name.value(), kAndroidStyleFooName); 121 122 ref = ResourceUtils::parseStyleParentReference(u"foo", &errStr); 123 AAPT_ASSERT_TRUE(ref); 124 EXPECT_EQ(ref.value().name.value(), kStyleFooName); 125} 126 127} // namespace aapt 128