Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c3da0f8 authored by Donald Chai's avatar Donald Chai
Browse files

[aapt2] Pseudolocalize <plurals> values.

(.won slaer roF)

Bug: 134190774
Test: aapt2_tests
Change-Id: If307af4adfb1d556c41d7cb08590d1c25287f992
parent e7ac92cd
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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_));
+21 −0
Original line number Diff line number Diff line
@@ -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();