summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Donald Chai <dchai@google.com> 2019-05-31 23:52:21 -0700
committer Donald Chai <dchai@google.com> 2019-06-03 03:02:43 +0000
commit4c3da0f8a4e3db7ae6a0dff3888d7faab3198bb1 (patch)
tree6f5c9d8f14fc1e82ab6eab99bbfe81ab91cb2b8d
parente7ac92cd7d47c53feb70e0ef3fd820affee87863 (diff)
[aapt2] Pseudolocalize <plurals> values.
(.won slaer roF) Bug: 134190774 Test: aapt2_tests Change-Id: If307af4adfb1d556c41d7cb08590d1c25287f992
-rw-r--r--tools/aapt2/compile/PseudolocaleGenerator.cpp2
-rw-r--r--tools/aapt2/compile/PseudolocaleGenerator_test.cpp21
2 files changed, 22 insertions, 1 deletions
diff --git a/tools/aapt2/compile/PseudolocaleGenerator.cpp b/tools/aapt2/compile/PseudolocaleGenerator.cpp
index c5de9e058907..5e0300b3071b 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<Item>(plural->values[i]->Clone(pool_));
diff --git a/tools/aapt2/compile/PseudolocaleGenerator_test.cpp b/tools/aapt2/compile/PseudolocaleGenerator_test.cpp
index 31358020ab60..e816c86e20a8 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<IAaptContext> context = test::ContextBuilder().Build();
+ std::unique_ptr<ResourceTable> table =
+ test::ResourceTableBuilder().SetPackageId("com.pkg", 0x7F).Build();
+ std::unique_ptr<Plural> plural = util::make_unique<Plural>();
+ plural->values = {util::make_unique<String>(table->string_pool.MakeRef("zero")),
+ util::make_unique<String>(table->string_pool.MakeRef("one"))};
+ ASSERT_TRUE(table->AddResource(test::ParseNameOrDie("com.pkg:plurals/foo"), ConfigDescription{},
+ {}, std::move(plural), context->GetDiagnostics()));
+ std::unique_ptr<Plural> expected = util::make_unique<Plural>();
+ expected->values = {util::make_unique<String>(table->string_pool.MakeRef("[žéŕö one]")),
+ util::make_unique<String>(table->string_pool.MakeRef("[öñé one]"))};
+
+ PseudolocaleGenerator generator;
+ ASSERT_TRUE(generator.Consume(context.get(), table.get()));
+
+ const auto* actual = test::GetValueForConfig<Plural>(table.get(), "com.pkg:plurals/foo",
+ test::ParseConfigOrDie("en-rXA"));
+ EXPECT_TRUE(actual->Equals(expected.get()));
+}
+
TEST(PseudolocaleGeneratorTest, RespectUntranslateableSections) {
std::unique_ptr<IAaptContext> context =
test::ContextBuilder().SetCompilationPackage("android").Build();