From 98c6138c70efb6cf609397f556c5a83f9eea604a Mon Sep 17 00:00:00 2001 From: Donald Chai Date: Fri, 31 May 2019 23:52:21 -0700 Subject: [PATCH] [aapt2] Pseudolocalize values. (.won slaer roF) Bug: 134190774 Test: aapt2_tests Change-Id: If307af4adfb1d556c41d7cb08590d1c25287f992 (cherry picked from commit 4c3da0f8a4e3db7ae6a0dff3888d7faab3198bb1) --- tools/aapt2/compile/PseudolocaleGenerator.cpp | 2 +- .../compile/PseudolocaleGenerator_test.cpp | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/tools/aapt2/compile/PseudolocaleGenerator.cpp b/tools/aapt2/compile/PseudolocaleGenerator.cpp index c5de9e058907b..5e0300b3071ba 100644 --- a/tools/aapt2/compile/PseudolocaleGenerator.cpp +++ b/tools/aapt2/compile/PseudolocaleGenerator.cpp @@ -231,7 +231,7 @@ class Visitor : public ValueVisitor { Visitor sub_visitor(pool_, method_); if (plural->values[i]) { plural->values[i]->Accept(&sub_visitor); - if (sub_visitor.value) { + if (sub_visitor.item) { localized->values[i] = std::move(sub_visitor.item); } else { localized->values[i] = std::unique_ptr(plural->values[i]->Clone(pool_)); diff --git a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp index 31358020ab60c..e816c86e20a82 100644 --- a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp +++ b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp @@ -234,6 +234,27 @@ TEST(PseudolocaleGeneratorTest, PseudolocalizeOnlyDefaultConfigs) { test::ParseConfigOrDie("ar-rXB"))); } +TEST(PseudolocaleGeneratorTest, PluralsArePseudolocalized) { + std::unique_ptr context = test::ContextBuilder().Build(); + std::unique_ptr table = + test::ResourceTableBuilder().SetPackageId("com.pkg", 0x7F).Build(); + std::unique_ptr plural = util::make_unique(); + plural->values = {util::make_unique(table->string_pool.MakeRef("zero")), + util::make_unique(table->string_pool.MakeRef("one"))}; + ASSERT_TRUE(table->AddResource(test::ParseNameOrDie("com.pkg:plurals/foo"), ConfigDescription{}, + {}, std::move(plural), context->GetDiagnostics())); + std::unique_ptr expected = util::make_unique(); + expected->values = {util::make_unique(table->string_pool.MakeRef("[žéŕö one]")), + util::make_unique(table->string_pool.MakeRef("[öñé one]"))}; + + PseudolocaleGenerator generator; + ASSERT_TRUE(generator.Consume(context.get(), table.get())); + + const auto* actual = test::GetValueForConfig(table.get(), "com.pkg:plurals/foo", + test::ParseConfigOrDie("en-rXA")); + EXPECT_TRUE(actual->Equals(expected.get())); +} + TEST(PseudolocaleGeneratorTest, RespectUntranslateableSections) { std::unique_ptr context = test::ContextBuilder().SetCompilationPackage("android").Build();