From a04880771254f5169a1fe460ff40b565d9dceb0d Mon Sep 17 00:00:00 2001 From: Ryan Mitchell Date: Wed, 28 Mar 2018 18:22:57 -0700 Subject: [PATCH] Changed AAPT2 to abide by AAPT resource whitespace triming. Bug: b/74331008 Test: Created tests in ResourceParser_test.cpp Change-Id: Id7b387692b795774cd77452ca8cf06a8447bf3be --- tools/aapt2/ResourceParser_test.cpp | 33 +++++++++++++++++++++++++++++ tools/aapt2/ResourceUtils.cpp | 3 +-- 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/tools/aapt2/ResourceParser_test.cpp b/tools/aapt2/ResourceParser_test.cpp index c98c0b95b69bb..fc1aeaa58fe2e 100644 --- a/tools/aapt2/ResourceParser_test.cpp +++ b/tools/aapt2/ResourceParser_test.cpp @@ -164,6 +164,39 @@ TEST_F(ResourceParserTest, ParseStringWithWhitespace) { EXPECT_THAT(*str, StrValueEq(" This is what I think ")); } +TEST_F(ResourceParserTest, ParseStringTruncateASCII) { + // Tuncate leading and trailing whitespace + EXPECT_TRUE(TestParse(R"( Hello )")); + + String* str = test::GetValue(&table_, "string/foo"); + ASSERT_THAT(str, NotNull()); + EXPECT_THAT(*str->value, StrEq("Hello")); + EXPECT_THAT(str->untranslatable_sections, IsEmpty()); + + // AAPT does not truncate unicode whitespace + EXPECT_TRUE(TestParse(R"(\u0020\Hello\u0020)")); + + str = test::GetValue(&table_, "string/foo2"); + ASSERT_THAT(str, NotNull()); + EXPECT_THAT(*str->value, StrEq(" Hello ")); + EXPECT_THAT(str->untranslatable_sections, IsEmpty()); + + // Preserve non-ASCII whitespace including extended ASCII characters + EXPECT_TRUE(TestParse(R"( Hello )")); + + str = test::GetValue(&table_, "string/foo3"); + ASSERT_THAT(str, NotNull()); + EXPECT_THAT(*str->value, StrEq("\xC2\xA0Hello\xC2\xA0")); + EXPECT_THAT(str->untranslatable_sections, IsEmpty()); + + EXPECT_TRUE(TestParse(R"(2005年6月1日)")); + + str = test::GetValue(&table_, "string/foo4"); + ASSERT_THAT(str, NotNull()); + EXPECT_THAT(*str->value, StrEq("2005年6月1日")); + EXPECT_THAT(str->untranslatable_sections, IsEmpty()); +} + TEST_F(ResourceParserTest, ParseStyledStringWithWhitespace) { std::string input = R"( My favorite string )"; ASSERT_TRUE(TestParse(input)); diff --git a/tools/aapt2/ResourceUtils.cpp b/tools/aapt2/ResourceUtils.cpp index 8fc3d65801652..560077cc322c3 100644 --- a/tools/aapt2/ResourceUtils.cpp +++ b/tools/aapt2/ResourceUtils.cpp @@ -30,7 +30,6 @@ #include "util/Files.h" #include "util/Util.h" -using ::aapt::text::IsWhitespace; using ::aapt::text::Utf8Iterator; using ::android::StringPiece; using ::android::StringPiece16; @@ -807,7 +806,7 @@ StringBuilder& StringBuilder::AppendText(const std::string& text) { Utf8Iterator iter(text); while (iter.HasNext()) { char32_t codepoint = iter.Next(); - if (!quote_ && text::IsWhitespace(codepoint)) { + if (!quote_ && iswspace(codepoint)) { if (!last_codepoint_was_space_) { // Emit a space if it's the first. xml_string_.text += ' ';