Extend test of library provided proguard rules

Bug: 228319861
Change-Id: I2b5ad3235a7f8ed42caa2dbd1e46ee982c45caff
diff --git a/src/test/java/com/android/tools/r8/shaking/LibraryProvidedProguardRulesTest.java b/src/test/java/com/android/tools/r8/shaking/LibraryProvidedProguardRulesTest.java
index 1f6a70a..a0029a0 100644
--- a/src/test/java/com/android/tools/r8/shaking/LibraryProvidedProguardRulesTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/LibraryProvidedProguardRulesTest.java
@@ -28,7 +28,6 @@
 import com.android.tools.r8.TestParameters;
 import com.android.tools.r8.origin.ArchiveEntryOrigin;
 import com.android.tools.r8.origin.Origin;
-import com.android.tools.r8.utils.BooleanUtils;
 import com.android.tools.r8.utils.DescriptorUtils;
 import com.android.tools.r8.utils.StringUtils;
 import com.android.tools.r8.utils.ZipUtils.ZipBuilder;
@@ -66,35 +65,58 @@
 
   static class B {}
 
+  enum LibraryType {
+    JAR_WITH_RULES,
+    AAR_WITH_RULES,
+    AAR_WITH_RULES_ONLY_IN_JAR,
+    AAR_WITH_RULES_BOTH_IN_JAR_AND_IN_AAR;
+
+    boolean isAar() {
+      return this != JAR_WITH_RULES;
+    }
+
+    boolean hasRulesInJar() {
+      return this != AAR_WITH_RULES;
+    }
+
+    boolean hasRulesInAar() {
+      return this == AAR_WITH_RULES || this == AAR_WITH_RULES_BOTH_IN_JAR_AND_IN_AAR;
+    }
+  }
+
   @Parameter(0)
   public TestParameters parameters;
 
   @Parameter(1)
-  public boolean isAar;
+  public LibraryType libraryType;
 
   @Parameters(name = "{0} AAR: {1}")
   public static List<Object[]> data() {
     return buildParameters(
-        getTestParameters().withAllRuntimesAndApiLevels().build(), BooleanUtils.values());
+        getTestParameters().withAllRuntimesAndApiLevels().build(), LibraryType.values());
   }
 
   private Path buildLibrary(List<String> rules) throws Exception {
-    ZipBuilder builder =
-        ZipBuilder.builder(temp.newFile(isAar ? "classes.jar" : "test.jar").toPath());
-    addTestClassesToZip(builder.getOutputStream(), ImmutableList.of(A.class, B.class));
-    if (isAar) {
-      Path jar = builder.build();
-      String allRules = StringUtils.lines(rules);
-      return ZipBuilder.builder(temp.newFile("test.aar").toPath())
-          .addFilesRelative(jar.getParent(), jar)
-          .addText("proguard.txt", allRules)
-          .build();
-    } else {
+    ZipBuilder jarBuilder =
+        ZipBuilder.builder(temp.newFile(libraryType.isAar() ? "classes.jar" : "test.jar").toPath());
+    addTestClassesToZip(jarBuilder.getOutputStream(), ImmutableList.of(A.class, B.class));
+    if (libraryType.hasRulesInJar()) {
       for (int i = 0; i < rules.size(); i++) {
         String name = "META-INF/proguard/jar" + (i == 0 ? "" : i) + ".rules";
-        builder.addText(name, rules.get(i));
+        jarBuilder.addText(name, rules.get(i));
       }
-      return builder.build();
+    }
+    if (libraryType.isAar()) {
+      Path jar = jarBuilder.build();
+      String allRules = StringUtils.lines(rules);
+      ZipBuilder aarBuilder = ZipBuilder.builder(temp.newFile("test.aar").toPath());
+      aarBuilder.addFilesRelative(jar.getParent(), jar);
+      if (libraryType.hasRulesInAar()) {
+        aarBuilder.addText("proguard.txt", allRules);
+      }
+      return aarBuilder.build();
+    } else {
+      return jarBuilder.build();
     }
   }
 
@@ -114,7 +136,7 @@
   public void keepOnlyA() throws Exception {
     CodeInspector inspector = runTest("-keep class " + A.class.getTypeName() + " {}");
     // TODO(b/228319861): Read Proguard rules from AAR's.
-    assertThat(inspector.clazz(A.class), notIf(isPresent(), isAar));
+    assertThat(inspector.clazz(A.class), notIf(isPresent(), libraryType.isAar()));
     assertThat(inspector.clazz(B.class), not(isPresent()));
   }
 
@@ -123,29 +145,29 @@
     CodeInspector inspector = runTest("-keep class **B {}");
     assertThat(inspector.clazz(A.class), not(isPresent()));
     // TODO(b/228319861): Read Proguard rules from AAR's.
-    assertThat(inspector.clazz(B.class), notIf(isPresent(), isAar));
+    assertThat(inspector.clazz(B.class), notIf(isPresent(), libraryType.isAar()));
   }
 
   @Test
   public void keepBoth() throws Exception {
     CodeInspector inspector = runTest("-keep class ** {}");
     // TODO(b/228319861): Read Proguard rules from AAR's.
-    assertThat(inspector.clazz(A.class), notIf(isPresent(), isAar));
-    assertThat(inspector.clazz(B.class), notIf(isPresent(), isAar));
+    assertThat(inspector.clazz(A.class), notIf(isPresent(), libraryType.isAar()));
+    assertThat(inspector.clazz(B.class), notIf(isPresent(), libraryType.isAar()));
   }
 
   @Test
   public void multipleFiles() throws Exception {
     CodeInspector inspector = runTest(ImmutableList.of("-keep class **A {}", "-keep class **B {}"));
     // TODO(b/228319861): Read Proguard rules from AAR's.
-    assertThat(inspector.clazz(A.class), notIf(isPresent(), isAar));
-    assertThat(inspector.clazz(B.class), notIf(isPresent(), isAar));
+    assertThat(inspector.clazz(A.class), notIf(isPresent(), libraryType.isAar()));
+    assertThat(inspector.clazz(B.class), notIf(isPresent(), libraryType.isAar()));
   }
 
   @Test
   public void syntaxError() throws Exception {
     // TODO(b/228319861): Read Proguard rules from AAR's.
-    assumeTrue(!isAar);
+    assumeTrue(!libraryType.isAar());
     assertThrows(
         CompilationFailedException.class,
         () ->
@@ -164,7 +186,7 @@
   @Test
   public void includeError() throws Exception {
     // TODO(b/228319861): Read Proguard rules from AAR's.
-    assumeTrue(!isAar);
+    assumeTrue(!libraryType.isAar());
     assertThrows(
         CompilationFailedException.class,
         () ->
@@ -207,7 +229,7 @@
   @Test
   public void throwingDataResourceProvider() throws Exception {
     // TODO(b/228319861): Read Proguard rules from AAR's.
-    assumeTrue(!isAar);
+    assumeTrue(!libraryType.isAar());
     assertThrows(
         CompilationFailedException.class,
         () ->