diff --git a/tools/aapt2/ResourceValues_test.cpp b/tools/aapt2/ResourceValues_test.cpp index c4a1108ac62ad..dbf51143f720f 100644 --- a/tools/aapt2/ResourceValues_test.cpp +++ b/tools/aapt2/ResourceValues_test.cpp @@ -284,8 +284,58 @@ TEST(ResourcesValuesTest, AttributeIsCompatible) { EXPECT_FALSE(attr_three.IsCompatibleWith(attr_one)); EXPECT_FALSE(attr_three.IsCompatibleWith(attr_two)); - EXPECT_FALSE(attr_three.IsCompatibleWith(attr_three)); + EXPECT_TRUE(attr_three.IsCompatibleWith(attr_three)); EXPECT_FALSE(attr_three.IsCompatibleWith(attr_four)); + + EXPECT_FALSE(attr_four.IsCompatibleWith(attr_one)); + EXPECT_FALSE(attr_four.IsCompatibleWith(attr_two)); + EXPECT_FALSE(attr_four.IsCompatibleWith(attr_three)); + EXPECT_TRUE(attr_four.IsCompatibleWith(attr_four)); +} + +TEST(ResourcesValuesTest, AttributeEnumIsCompatible) { + Attribute attr_one(TYPE_ENUM); + attr_one.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")), 0x01u}); + attr_one.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/bar")), 0x07u}); + + Attribute attr_two(TYPE_ENUM); + attr_two.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")), 0x01u}); + attr_two.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/bar")), 0x07u}); + EXPECT_TRUE(attr_one.IsCompatibleWith(attr_two)); +} + +TEST(ResourcesValuesTest, DifferentAttributeEnumDifferentNameIsNotCompatible) { + Attribute attr_one(TYPE_ENUM); + attr_one.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")), 0x01u}); + attr_one.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/bar")), 0x07u}); + + Attribute attr_two(TYPE_ENUM); + attr_two.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")), 0x01u}); + attr_one.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/baz")), 0x07u}); + EXPECT_FALSE(attr_one.IsCompatibleWith(attr_two)); +} + +TEST(ResourcesValuesTest, DifferentAttributeEnumDifferentValueIsNotCompatible) { + Attribute attr_one(TYPE_ENUM); + attr_one.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")), 0x01u}); + attr_one.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/bar")), 0x07u}); + + Attribute attr_two(TYPE_ENUM); + attr_two.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/foo")), 0x01u}); + attr_two.symbols.push_back( + Attribute::Symbol{Reference(test::ParseNameOrDie("android:id/bar")), 0x09u}); + EXPECT_FALSE(attr_one.IsCompatibleWith(attr_two)); } } // namespace aapt diff --git a/tools/aapt2/link/TableMerger_test.cpp b/tools/aapt2/link/TableMerger_test.cpp index be9c84b3f8a68..78d42a160e21f 100644 --- a/tools/aapt2/link/TableMerger_test.cpp +++ b/tools/aapt2/link/TableMerger_test.cpp @@ -408,54 +408,6 @@ TEST_F(TableMergerTest, FailToOverrideConflictingAttributeFormatsWithOverlay) { ASSERT_FALSE(merger.Merge({}, overlay.get(), true /*overlay*/)); } -TEST_F(TableMergerTest, FailToOverrideConflictingFlagsAndEnumsWithOverlay) { - std::unique_ptr base = - test::ResourceTableBuilder() - .SetPackageId("", 0x7f) - .AddValue("attr/foo", test::AttributeBuilder() - .SetTypeMask(android::ResTable_map::TYPE_FLAGS) - .Build()) - .Build(); - - std::unique_ptr overlay = - test::ResourceTableBuilder() - .SetPackageId("", 0x7f) - .AddValue("attr/foo", test::AttributeBuilder() - .SetTypeMask(android::ResTable_map::TYPE_FLAGS) - .SetWeak(false) - .Build()) - .Build(); - - ResourceTable final_table; - TableMergerOptions options; - options.auto_add_overlay = false; - TableMerger merger(context_.get(), &final_table, options); - - ASSERT_TRUE(merger.Merge({}, base.get(), false /*overlay*/)); - ASSERT_FALSE(merger.Merge({}, overlay.get(), true /*overlay*/)); - - base = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) - .AddValue("attr/foo", test::AttributeBuilder() - .SetTypeMask(android::ResTable_map::TYPE_ENUM) - .Build()) - .Build(); - - overlay = test::ResourceTableBuilder() - .SetPackageId("", 0x7f) - .AddValue("attr/foo", test::AttributeBuilder() - .SetTypeMask(android::ResTable_map::TYPE_ENUM) - .SetWeak(false) - .Build()) - .Build(); - - ResourceTable final_table2; - TableMerger merger2(context_.get(), &final_table2, options); - - ASSERT_TRUE(merger2.Merge({}, base.get(), false /*overlay*/)); - ASSERT_FALSE(merger2.Merge({}, overlay.get(), true /*overlay*/)); -} - TEST_F(TableMergerTest, FailToMergeNewResourceWithoutAutoAddOverlay) { std::unique_ptr table_a = test::ResourceTableBuilder().SetPackageId("", 0x7f).Build();