From 9e10ac70155c993e7053323ad36beaea7bf7d54f Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Fri, 16 Oct 2015 14:37:48 -0700 Subject: AAPT2: Process and private symbol package Need to introduce the idea of multiple levels of visibility to support . Public, Private, Undefined. Public means it is accessible from outside and requires an ID assigned. Private means that we explicitly want this to be a symbol (show up in R.java), but not visible to other packages. No ID required. Undefined is any normal resource. When --private-symbols is specified in the link phase, these resources will not show up in R.java. Change-Id: Icba89221e08e685dee7683786aa7112baf28c856 --- tools/aapt2/JavaClassGenerator_test.cpp | 81 +++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) (limited to 'tools/aapt2/JavaClassGenerator_test.cpp') diff --git a/tools/aapt2/JavaClassGenerator_test.cpp b/tools/aapt2/JavaClassGenerator_test.cpp index 48fcf8cb748f..becf99b521ed 100644 --- a/tools/aapt2/JavaClassGenerator_test.cpp +++ b/tools/aapt2/JavaClassGenerator_test.cpp @@ -65,6 +65,87 @@ TEST(JavaClassGeneratorTest, TransformInvalidJavaIdentifierCharacter) { output.find("public static final int hey_dude_cool_attr = 0;")); } +TEST(JavaClassGeneratorTest, CorrectPackageNameIsUsed) { + std::unique_ptr table = test::ResourceTableBuilder() + .setPackageId(u"android", 0x01) + .addSimple(u"@android:id/one", ResourceId(0x01020000)) + .addSimple(u"@android:id/com.foo$two", ResourceId(0x01020001)) + .build(); + + JavaClassGenerator generator(table.get(), {}); + std::stringstream out; + ASSERT_TRUE(generator.generate(u"android", u"com.android.internal", &out)); + + std::string output = out.str(); + EXPECT_NE(std::string::npos, output.find("package com.android.internal;")); + EXPECT_NE(std::string::npos, output.find("public static final int one = 0x01020000;")); + EXPECT_EQ(std::string::npos, output.find("two")); + EXPECT_EQ(std::string::npos, output.find("com_foo$two")); +} + +TEST(JavaClassGeneratorTest, AttrPrivateIsWrittenAsAttr) { + std::unique_ptr table = test::ResourceTableBuilder() + .setPackageId(u"android", 0x01) + .addSimple(u"@android:^attr-private/one", ResourceId(0x01010000)) + .build(); + + JavaClassGenerator generator(table.get(), {}); + std::stringstream out; + ASSERT_TRUE(generator.generate(u"android", &out)); + + std::string output = out.str(); + EXPECT_NE(std::string::npos, output.find("public static final class attr")); + EXPECT_EQ(std::string::npos, output.find("public static final class ^attr-private")); +} + +TEST(JavaClassGeneratorTest, OnlyWritePublicResources) { + StdErrDiagnostics diag; + std::unique_ptr table = test::ResourceTableBuilder() + .setPackageId(u"android", 0x01) + .addSimple(u"@android:id/one", ResourceId(0x01020000)) + .addSimple(u"@android:id/two", ResourceId(0x01020001)) + .addSimple(u"@android:id/three", ResourceId(0x01020002)) + .build(); + ASSERT_TRUE(table->setSymbolState(test::parseNameOrDie(u"@android:id/one"), {}, {}, + SymbolState::kPublic, &diag)); + ASSERT_TRUE(table->setSymbolState(test::parseNameOrDie(u"@android:id/two"), {}, {}, + SymbolState::kPrivate, &diag)); + + JavaClassGeneratorOptions options; + options.types = JavaClassGeneratorOptions::SymbolTypes::kPublic; + { + JavaClassGenerator generator(table.get(), options); + std::stringstream out; + ASSERT_TRUE(generator.generate(u"android", &out)); + std::string output = out.str(); + EXPECT_NE(std::string::npos, output.find("public static final int one = 0x01020000;")); + EXPECT_EQ(std::string::npos, output.find("two")); + EXPECT_EQ(std::string::npos, output.find("three")); + } + + options.types = JavaClassGeneratorOptions::SymbolTypes::kPublicPrivate; + { + JavaClassGenerator generator(table.get(), options); + std::stringstream out; + ASSERT_TRUE(generator.generate(u"android", &out)); + std::string output = out.str(); + EXPECT_NE(std::string::npos, output.find("public static final int one = 0x01020000;")); + EXPECT_NE(std::string::npos, output.find("public static final int two = 0x01020001;")); + EXPECT_EQ(std::string::npos, output.find("three")); + } + + options.types = JavaClassGeneratorOptions::SymbolTypes::kAll; + { + JavaClassGenerator generator(table.get(), options); + std::stringstream out; + ASSERT_TRUE(generator.generate(u"android", &out)); + std::string output = out.str(); + EXPECT_NE(std::string::npos, output.find("public static final int one = 0x01020000;")); + EXPECT_NE(std::string::npos, output.find("public static final int two = 0x01020001;")); + EXPECT_NE(std::string::npos, output.find("public static final int three = 0x01020002;")); + } +} + /* * TODO(adamlesinski): Re-enable this once we get merging working again. * TEST(JavaClassGeneratorTest, EmitPackageMangledSymbols) { -- cgit v1.2.3