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 += ' ';