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

Commit 1d008d1d authored by Ryan Mitchell's avatar Ryan Mitchell
Browse files

Refactor aapt2 tests ResourceTable changes

This changes refactors tests to use the NewResourceBuilder class
that makes it easier to construct resource entries.

Bug: 183102797
Test: aapt2_tests
Change-Id: I851f9fb99a003769f8df8c1876997eee0864822a
parent 9634efb6
Loading
Loading
Loading
Loading
+2 −14
Original line number Diff line number Diff line
@@ -831,25 +831,13 @@ TEST_F(ResourceParserTest, AutoIncrementIdsInPublicGroup) {

  Maybe<ResourceTable::SearchResult> result = table_.FindResource(test::ParseNameOrDie("attr/foo"));
  ASSERT_TRUE(result);

  ASSERT_TRUE(result.value().package->id);
  ASSERT_TRUE(result.value().type->id);
  ASSERT_TRUE(result.value().entry->id);
  ResourceId actual_id(result.value().package->id.value(),
                       result.value().type->id.value(),
                       result.value().entry->id.value());
  EXPECT_THAT(actual_id, Eq(ResourceId(0x01010040)));
  EXPECT_THAT(result.value().entry->id.value(), Eq(ResourceId(0x01010040)));

  result = table_.FindResource(test::ParseNameOrDie("attr/bar"));
  ASSERT_TRUE(result);

  ASSERT_TRUE(result.value().package->id);
  ASSERT_TRUE(result.value().type->id);
  ASSERT_TRUE(result.value().entry->id);
  actual_id = ResourceId(result.value().package->id.value(),
                         result.value().type->id.value(),
                         result.value().entry->id.value());
  EXPECT_THAT(actual_id, Eq(ResourceId(0x01010041)));
  EXPECT_THAT(result.value().entry->id.value(), Eq(ResourceId(0x01010041)));
}

TEST_F(ResourceParserTest, StrongestSymbolVisibilityWins) {
+109 −97
Original line number Diff line number Diff line
@@ -37,31 +37,32 @@ namespace aapt {
TEST(ResourceTableTest, FailToAddResourceWithBadName) {
  ResourceTable table;

  EXPECT_FALSE(table.AddResource(
      test::ParseNameOrDie("android:id/hey,there"), ConfigDescription{}, "",
      test::ValueBuilder<Id>().SetSource("test.xml", 21u).Build(),
  EXPECT_FALSE(
      table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:id/hey,there")).Build(),
                        test::GetDiagnostics()));

  EXPECT_FALSE(table.AddResource(
      test::ParseNameOrDie("android:id/hey:there"), ConfigDescription{}, "",
      test::ValueBuilder<Id>().SetSource("test.xml", 21u).Build(),
  EXPECT_FALSE(
      table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:id/hey:there")).Build(),
                        test::GetDiagnostics()));
}

TEST(ResourceTableTest, AddResourceWithWeirdNameWhenAddingMangledResources) {
  ResourceTable table;

  EXPECT_TRUE(table.AddResourceMangled(
      test::ParseNameOrDie("android:id/heythere       "), ConfigDescription{}, "",
      test::ValueBuilder<Id>().SetSource("test.xml", 21u).Build(), test::GetDiagnostics()));
  EXPECT_TRUE(
      table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:id/heythere       "))
                            .SetAllowMangled(true)
                            .Build(),
                        test::GetDiagnostics()));
}

TEST(ResourceTableTest, AddOneResource) {
  ResourceTable table;

  EXPECT_TRUE(table.AddResource(
      test::ParseNameOrDie("android:attr/id"), ConfigDescription{}, "",
      test::ValueBuilder<Id>().SetSource("test/path/file.xml", 23u).Build(),
      NewResourceBuilder(test::ParseNameOrDie("android:attr/id"))
          .SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 23u).Build())
          .Build(),
      test::GetDiagnostics()));

  EXPECT_THAT(test::GetValue<Id>(&table, "android:attr/id"), NotNull());
@@ -70,30 +71,34 @@ TEST(ResourceTableTest, AddOneResource) {
TEST(ResourceTableTest, AddMultipleResources) {
  ResourceTable table;

  ConfigDescription config;
  ConfigDescription language_config;
  memcpy(language_config.language, "pl", sizeof(language_config.language));

  EXPECT_TRUE(table.AddResource(
      test::ParseNameOrDie("android:attr/layout_width"), config, "",
      test::ValueBuilder<Id>().SetSource("test/path/file.xml", 10u).Build(),
      NewResourceBuilder(test::ParseNameOrDie("android:attr/layout_width"))
          .SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 10u).Build())
          .Build(),
      test::GetDiagnostics()));

  EXPECT_TRUE(table.AddResource(
      test::ParseNameOrDie("android:attr/id"), config, "",
      test::ValueBuilder<Id>().SetSource("test/path/file.xml", 12u).Build(),
      NewResourceBuilder(test::ParseNameOrDie("android:attr/id"))
          .SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 12u).Build())
          .Build(),
      test::GetDiagnostics()));

  EXPECT_TRUE(table.AddResource(
      test::ParseNameOrDie("android:string/ok"), config, "",
      test::ValueBuilder<Id>().SetSource("test/path/file.xml", 14u).Build(),
      NewResourceBuilder(test::ParseNameOrDie("android:string/ok"))
          .SetValue(test::ValueBuilder<Id>().SetSource("test/path/file.xml", 14u).Build())
          .Build(),
      test::GetDiagnostics()));

  EXPECT_TRUE(table.AddResource(
      test::ParseNameOrDie("android:string/ok"), language_config, "",
      test::ValueBuilder<BinaryPrimitive>(android::Res_value{})
  EXPECT_TRUE(
      table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:string/ok"))
                            .SetValue(test::ValueBuilder<BinaryPrimitive>(android::Res_value{})
                                          .SetSource("test/path/file.xml", 20u)
                                          .Build(),
                                      language_config)
                            .Build(),
                        test::GetDiagnostics()));

  EXPECT_THAT(test::GetValue<Id>(&table, "android:attr/layout_width"), NotNull());
@@ -104,17 +109,19 @@ TEST(ResourceTableTest, AddMultipleResources) {

TEST(ResourceTableTest, OverrideWeakResourceValue) {
  ResourceTable table;

  ASSERT_TRUE(table.AddResource(test::ParseNameOrDie("android:attr/foo"), ConfigDescription{}, "",
                                test::AttributeBuilder().SetWeak(true).Build(),
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:attr/foo"))
                                    .SetValue(test::AttributeBuilder().SetWeak(true).Build())
                                    .Build(),
                                test::GetDiagnostics()));

  Attribute* attr = test::GetValue<Attribute>(&table, "android:attr/foo");
  ASSERT_THAT(attr, NotNull());
  EXPECT_TRUE(attr->IsWeak());

  ASSERT_TRUE(table.AddResource(test::ParseNameOrDie("android:attr/foo"), ConfigDescription{}, "",
                                util::make_unique<Attribute>(), test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(test::ParseNameOrDie("android:attr/foo"))
                                    .SetValue(util::make_unique<Attribute>())
                                    .Build(),
                                test::GetDiagnostics()));

  attr = test::GetValue<Attribute>(&table, "android:attr/foo");
  ASSERT_THAT(attr, NotNull());
@@ -130,22 +137,26 @@ TEST(ResourceTableTest, AllowCompatibleDuplicateAttributes) {
  Attribute attr_two(android::ResTable_map::TYPE_STRING | android::ResTable_map::TYPE_REFERENCE);
  attr_two.SetWeak(true);

  ASSERT_TRUE(table.AddResource(name, ConfigDescription{}, "",
                                util::make_unique<Attribute>(attr_one), test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(name, ConfigDescription{}, "",
                                util::make_unique<Attribute>(attr_two), test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(
      NewResourceBuilder(name).SetValue(util::make_unique<Attribute>(attr_one)).Build(),
      test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(
      NewResourceBuilder(name).SetValue(util::make_unique<Attribute>(attr_two)).Build(),
      test::GetDiagnostics()));
}

TEST(ResourceTableTest, ProductVaryingValues) {
  ResourceTable table;

  EXPECT_TRUE(table.AddResource(test::ParseNameOrDie("android:string/foo"),
                                test::ParseConfigOrDie("land"), "tablet",
                                util::make_unique<Id>(),
  ASSERT_TRUE(table.AddResource(
      NewResourceBuilder(test::ParseNameOrDie("android:string/foo"))
          .SetValue(util::make_unique<Id>(), test::ParseConfigOrDie("land"), "tablet")
          .Build(),
      test::GetDiagnostics()));
  EXPECT_TRUE(table.AddResource(test::ParseNameOrDie("android:string/foo"),
                                test::ParseConfigOrDie("land"), "phone",
                                util::make_unique<Id>(),

  ASSERT_TRUE(table.AddResource(
      NewResourceBuilder(test::ParseNameOrDie("android:string/foo"))
          .SetValue(util::make_unique<Id>(), test::ParseConfigOrDie("land"), "phone")
          .Build(),
      test::GetDiagnostics()));

  EXPECT_THAT(test::GetValueForConfigAndProduct<Id>(&table, "android:string/foo",test::ParseConfigOrDie("land"), "tablet"), NotNull());
@@ -203,22 +214,26 @@ TEST(ResourceTableTest, SetVisibility) {
  Visibility visibility;
  visibility.level = Visibility::Level::kPrivate;
  visibility.comment = "private";
  ASSERT_TRUE(table.SetVisibility(name, visibility, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetVisibility(visibility).Build(),
                                test::GetDiagnostics()));
  ASSERT_TRUE(VisibilityOfResource(table, name, Level::kPrivate, "private"));

  visibility.level = Visibility::Level::kUndefined;
  visibility.comment = "undefined";
  ASSERT_TRUE(table.SetVisibility(name, visibility, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetVisibility(visibility).Build(),
                                test::GetDiagnostics()));
  ASSERT_TRUE(VisibilityOfResource(table, name, Level::kPrivate, "private"));

  visibility.level = Visibility::Level::kPublic;
  visibility.comment = "public";
  ASSERT_TRUE(table.SetVisibility(name, visibility, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetVisibility(visibility).Build(),
                                test::GetDiagnostics()));
  ASSERT_TRUE(VisibilityOfResource(table, name, Level::kPublic, "public"));

  visibility.level = Visibility::Level::kPrivate;
  visibility.comment = "private";
  ASSERT_TRUE(table.SetVisibility(name, visibility, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetVisibility(visibility).Build(),
                                test::GetDiagnostics()));
  ASSERT_TRUE(VisibilityOfResource(table, name, Level::kPublic, "public"));
}

@@ -230,14 +245,16 @@ TEST(ResourceTableTest, SetAllowNew) {
  Maybe<ResourceTable::SearchResult> result;

  allow_new.comment = "first";
  ASSERT_TRUE(table.SetAllowNew(name, allow_new, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetAllowNew(allow_new).Build(),
                                test::GetDiagnostics()));
  result = table.FindResource(name);
  ASSERT_TRUE(result);
  ASSERT_TRUE(result.value().entry->allow_new);
  ASSERT_THAT(result.value().entry->allow_new.value().comment, StrEq("first"));

  allow_new.comment = "second";
  ASSERT_TRUE(table.SetAllowNew(name, allow_new, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetAllowNew(allow_new).Build(),
                                test::GetDiagnostics()));
  result = table.FindResource(name);
  ASSERT_TRUE(result);
  ASSERT_TRUE(result.value().entry->allow_new);
@@ -255,7 +272,8 @@ TEST(ResourceTableTest, SetOverlayable) {
  overlayable_item.source = Source("res/values/overlayable.xml", 42);

  const ResourceName name = test::ParseNameOrDie("android:string/foo");
  ASSERT_TRUE(table.SetOverlayable(name, overlayable_item, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item).Build(),
                                test::GetDiagnostics()));
  Maybe<ResourceTable::SearchResult> search_result = table.FindResource(name);

  ASSERT_TRUE(search_result);
@@ -280,17 +298,20 @@ TEST(ResourceTableTest, SetMultipleOverlayableResources) {
  auto group = std::make_shared<Overlayable>("Name", "overlay://theme");
  OverlayableItem overlayable(group);
  overlayable.policies = PolicyFlags::PRODUCT_PARTITION;
  ASSERT_TRUE(table.SetOverlayable(foo, overlayable, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(foo).SetOverlayable(overlayable).Build(),
                                test::GetDiagnostics()));

  const ResourceName bar = test::ParseNameOrDie("android:string/bar");
  OverlayableItem overlayable2(group);
  overlayable2.policies = PolicyFlags::PRODUCT_PARTITION;
  ASSERT_TRUE(table.SetOverlayable(bar, overlayable2, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(bar).SetOverlayable(overlayable2).Build(),
                                test::GetDiagnostics()));

  const ResourceName baz = test::ParseNameOrDie("android:string/baz");
  OverlayableItem overlayable3(group);
  overlayable3.policies = PolicyFlags::VENDOR_PARTITION;
  ASSERT_TRUE(table.SetOverlayable(baz, overlayable3, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(baz).SetOverlayable(overlayable3).Build(),
                                test::GetDiagnostics()));
}

TEST(ResourceTableTest, SetOverlayableDifferentResourcesDifferentName) {
@@ -299,12 +320,14 @@ TEST(ResourceTableTest, SetOverlayableDifferentResourcesDifferentName) {
  const ResourceName foo = test::ParseNameOrDie("android:string/foo");
  OverlayableItem overlayable_item(std::make_shared<Overlayable>("Name", "overlay://theme"));
  overlayable_item.policies = PolicyFlags::PRODUCT_PARTITION;
  ASSERT_TRUE(table.SetOverlayable(foo, overlayable_item, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(foo).SetOverlayable(overlayable_item).Build(),
                                test::GetDiagnostics()));

  const ResourceName bar = test::ParseNameOrDie("android:string/bar");
  OverlayableItem overlayable_item2(std::make_shared<Overlayable>("Name2",  "overlay://theme"));
  overlayable_item2.policies = PolicyFlags::PRODUCT_PARTITION;
  ASSERT_TRUE(table.SetOverlayable(bar, overlayable_item2, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(bar).SetOverlayable(overlayable_item2).Build(),
                                test::GetDiagnostics()));
}

TEST(ResourceTableTest, SetOverlayableSameResourcesFail) {
@@ -313,10 +336,12 @@ TEST(ResourceTableTest, SetOverlayableSameResourcesFail) {

  auto overlayable = std::make_shared<Overlayable>("Name", "overlay://theme");
  OverlayableItem overlayable_item(overlayable);
  ASSERT_TRUE(table.SetOverlayable(name, overlayable_item, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item).Build(),
                                test::GetDiagnostics()));

  OverlayableItem overlayable_item2(overlayable);
  ASSERT_FALSE(table.SetOverlayable(name, overlayable_item2, test::GetDiagnostics()));
  ASSERT_FALSE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item2).Build(),
                                 test::GetDiagnostics()));
}

TEST(ResourceTableTest,  SetOverlayableSameResourcesDifferentNameFail) {
@@ -325,51 +350,38 @@ TEST(ResourceTableTest, SetOverlayableSameResourcesDifferentNameFail) {

  auto overlayable = std::make_shared<Overlayable>("Name", "overlay://theme");
  OverlayableItem overlayable_item(overlayable);
  ASSERT_TRUE(table.SetOverlayable(name, overlayable_item, test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item).Build(),
                                test::GetDiagnostics()));

  auto overlayable2 = std::make_shared<Overlayable>("Other", "overlay://theme");
  OverlayableItem overlayable_item2(overlayable2);
  ASSERT_FALSE(table.SetOverlayable(name, overlayable_item2, test::GetDiagnostics()));
  ASSERT_FALSE(table.AddResource(NewResourceBuilder(name).SetOverlayable(overlayable_item2).Build(),
                                 test::GetDiagnostics()));
}

TEST(ResourceTableTest, AllowDuplictaeResourcesNames) {
  ResourceTable table(/* validate_resources */ false);

  const ResourceName foo_name = test::ParseNameOrDie("android:bool/foo");
  ASSERT_TRUE(table.AddResourceWithId(foo_name, ResourceId(0x7f0100ff), ConfigDescription{} , "",
                                      test::BuildPrimitive(android::Res_value::TYPE_INT_BOOLEAN, 0),
                                      test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResourceWithId(foo_name, ResourceId(0x7f010100), ConfigDescription{} , "",
                                      test::BuildPrimitive(android::Res_value::TYPE_INT_BOOLEAN, 1),
                                      test::GetDiagnostics()));

  ASSERT_TRUE(table.SetVisibilityWithId(foo_name, Visibility{Visibility::Level::kPublic},
                                        ResourceId(0x7f0100ff), test::GetDiagnostics()));
  ASSERT_TRUE(table.SetVisibilityWithId(foo_name, Visibility{Visibility::Level::kPrivate},
                                        ResourceId(0x7f010100), test::GetDiagnostics()));

  auto package = table.FindPackageById(0x7f);
  ASSERT_THAT(package, NotNull());
  auto type = package->FindType(ResourceType::kBool);
  ASSERT_THAT(type, NotNull());

  auto entry1 = type->FindEntry("foo", 0x00ff);
  ASSERT_THAT(entry1, NotNull());
  ASSERT_THAT(entry1->id, Eq(0x00ff));
  ASSERT_THAT(entry1->values[0], NotNull());
  ASSERT_THAT(entry1->values[0]->value, NotNull());
  ASSERT_THAT(ValueCast<BinaryPrimitive>(entry1->values[0]->value.get()), NotNull());
  ASSERT_THAT(ValueCast<BinaryPrimitive>(entry1->values[0]->value.get())->value.data, Eq(0u));
  ASSERT_THAT(entry1->visibility.level, Visibility::Level::kPublic);

  auto entry2 = type->FindEntry("foo", 0x0100);
  ASSERT_THAT(entry2, NotNull());
  ASSERT_THAT(entry2->id, Eq(0x0100));
  ASSERT_THAT(entry2->values[0], NotNull());
  ASSERT_THAT(entry1->values[0]->value, NotNull());
  ASSERT_THAT(ValueCast<BinaryPrimitive>(entry2->values[0]->value.get()), NotNull());
  ASSERT_THAT(ValueCast<BinaryPrimitive>(entry2->values[0]->value.get())->value.data, Eq(1u));
  ASSERT_THAT(entry2->visibility.level, Visibility::Level::kPrivate);
TEST(ResourceTableTest, ConflictingIds) {
  ResourceTable table;
  const ResourceName name = test::ParseNameOrDie("android:string/foo");
  ASSERT_TRUE(table.AddResource(NewResourceBuilder(name).SetId(0x01010000).Build(),
                                test::GetDiagnostics()));
  ASSERT_FALSE(table.AddResource(NewResourceBuilder(name).SetId(0x01010001).Build(),
                                 test::GetDiagnostics()));
}

TEST(ResourceTableTest, ConflictingIdsCreateEntry) {
  ResourceTable table;
  const ResourceName name = test::ParseNameOrDie("android:string/foo");
  ASSERT_TRUE(table.AddResource(
      NewResourceBuilder(name).SetId(0x01010000, OnIdConflict::CREATE_ENTRY).Build(),
      test::GetDiagnostics()));
  ASSERT_TRUE(table.AddResource(
      NewResourceBuilder(name).SetId(0x01010001, OnIdConflict::CREATE_ENTRY).Build(),
      test::GetDiagnostics()));

  // Non-ambiguous query
  ASSERT_TRUE(table.AddResource(
      NewResourceBuilder(name).SetId(0x01010001).SetValue(std::make_unique<Id>()).Build(),
      test::GetDiagnostics()));
}

}  // namespace aapt
+1 −0
Original line number Diff line number Diff line
@@ -217,6 +217,7 @@ static void AssertTranslations(CommandTestFixture *ctf, std::string file_name,
  }, compiled_files_dir, &diag));

  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag);
  ASSERT_NE(apk, nullptr);

  ResourceTable* table = apk->GetResourceTable();
  ASSERT_NE(table, nullptr);
+8 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ TEST_F(LinkTest, RemoveRawXmlStrings) {
  // Load the binary xml tree
  android::ResXMLTree tree;
  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag);
  ASSERT_THAT(apk, Ne(nullptr));

  std::unique_ptr<io::IData> data = OpenFileAsData(apk.get(), "res/xml/test.xml");
  ASSERT_THAT(data, Ne(nullptr));
  AssertLoadXml(apk.get(), data.get(), &tree);
@@ -73,6 +75,8 @@ TEST_F(LinkTest, KeepRawXmlStrings) {
  // Load the binary xml tree
  android::ResXMLTree tree;
  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag);
  ASSERT_THAT(apk, Ne(nullptr));

  std::unique_ptr<io::IData> data = OpenFileAsData(apk.get(), "res/xml/test.xml");
  ASSERT_THAT(data, Ne(nullptr));
  AssertLoadXml(apk.get(), data.get(), &tree);
@@ -208,6 +212,8 @@ TEST_F(LinkTest, OverlayStyles) {
  ASSERT_TRUE(Link(link_args, compiled_files_dir, &diag));

  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag);
  ASSERT_THAT(apk, Ne(nullptr));

  const Style* actual_style = test::GetValue<Style>(
      apk->GetResourceTable(), std::string(kDefaultPackageName) + ":style/MyStyle");
  ASSERT_NE(actual_style, nullptr);
@@ -250,6 +256,8 @@ TEST_F(LinkTest, OverrideStylesInsteadOfOverlaying) {
  ASSERT_TRUE(Link(link_args, compiled_files_dir, &diag));

  std::unique_ptr<LoadedApk> apk = LoadedApk::LoadApkFromPath(out_apk, &diag);
  ASSERT_THAT(apk, Ne(nullptr));

  const Style* actual_style = test::GetValue<Style>(
      apk->GetResourceTable(), std::string(kDefaultPackageName) + ":style/MyStyle");
  ASSERT_NE(actual_style, nullptr);
+103 −82

File changed.

Preview size limit exceeded, changes collapsed.

Loading