Add test for AssertionRewriter on api level 16

This was not in the test matrix before and will result in an assertion
error due to us not splitting the block and using
TypeLattice.Simple (which is imprecise).

Bug: 142064862
Change-Id: I76c055858e3dcbccaba435641af526083447fc1f
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertionerror/AssertionErrorRewriteApi16Test.java b/src/test/java/com/android/tools/r8/rewrite/assertionerror/AssertionErrorRewriteApi16Test.java
new file mode 100644
index 0000000..4fbb7c3
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/rewrite/assertionerror/AssertionErrorRewriteApi16Test.java
@@ -0,0 +1,49 @@
+// Copyright (c) 2019, the R8 project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+package com.android.tools.r8.rewrite.assertionerror;
+
+import com.android.tools.r8.CompilationFailedException;
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.TestParametersCollection;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
+import com.android.tools.r8.rewrite.assertionerror.AssertionErrorRewriteTest.Main;
+import com.android.tools.r8.utils.AndroidApiLevel;
+import java.io.IOException;
+import java.util.concurrent.ExecutionException;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.junit.runners.Parameterized;
+import org.junit.runners.Parameterized.Parameters;
+
+// This is a reproduction of b/139451198 that only shows when compiling with min api-level 16, 17 or
+// 18. There is no compatible checked in DexRuntime so asking for AndroidLevel.J in testparameters
+// will service 15 or 19. We therefore fix the min api-level in the test to J.
+@RunWith(Parameterized.class)
+public class AssertionErrorRewriteApi16Test extends TestBase {
+
+  private final TestParameters parameters;
+
+  @Parameters(name = "{0}")
+  public static TestParametersCollection data() {
+    return getTestParameters().withDexRuntimesStartingFromIncluding(Version.V4_4_4).build();
+  }
+
+  public AssertionErrorRewriteApi16Test(TestParameters parameters) {
+    this.parameters = parameters;
+  }
+
+  @Test
+  public void r8TestSplitBlock_b139451198()
+      throws ExecutionException, CompilationFailedException, IOException {
+    testForR8(parameters.getBackend())
+        .addProgramClasses(Main.class)
+        .addKeepMainRule(Main.class)
+        .enableInliningAnnotations()
+        .setMinApi(AndroidApiLevel.J)
+        .run(parameters.getRuntime(), Main.class, String.valueOf(false))
+        .assertSuccessWithOutputLines("OK", "OK");
+  }
+}
diff --git a/src/test/java/com/android/tools/r8/rewrite/assertionerror/AssertionErrorRewriteTest.java b/src/test/java/com/android/tools/r8/rewrite/assertionerror/AssertionErrorRewriteTest.java
index b8ee931..2318414 100644
--- a/src/test/java/com/android/tools/r8/rewrite/assertionerror/AssertionErrorRewriteTest.java
+++ b/src/test/java/com/android/tools/r8/rewrite/assertionerror/AssertionErrorRewriteTest.java
@@ -3,22 +3,24 @@
 // BSD-style license that can be found in the LICENSE file.
 package com.android.tools.r8.rewrite.assertionerror;
 
+import static com.android.tools.r8.ToolHelper.getDefaultAndroidJar;
+import static org.junit.Assume.assumeTrue;
+
 import com.android.tools.r8.NeverInline;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.TestParameters;
+import com.android.tools.r8.utils.AndroidApiLevel;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
-import static com.android.tools.r8.ToolHelper.getDefaultAndroidJar;
-import static org.junit.Assume.assumeTrue;
-
 @RunWith(Parameterized.class)
 public class AssertionErrorRewriteTest extends TestBase {
+
   @Parameters(name = "{0}")
   public static Iterable<?> data() {
-    return getTestParameters().withAllRuntimes().build();
+    return getTestParameters().withAllRuntimes().withAllApiLevels().build();
   }
 
   private final TestParameters parameters;
@@ -28,17 +30,17 @@
     this.parameters = parameters;
 
     // The exception cause is only preserved on API 16 and newer.
-    expectCause = parameters.isCfRuntime()
-        || parameters.getRuntime().asDex().getMinApiLevel().getLevel() >= 16;
+    expectCause =
+        parameters.isCfRuntime()
+            || parameters.getApiLevel().getLevel() >= AndroidApiLevel.J.getLevel();
   }
 
   @Test public void d8() throws Exception {
     assumeTrue(parameters.isDexRuntime());
-
     testForD8()
         .addLibraryFiles(getDefaultAndroidJar())
         .addProgramClasses(Main.class)
-        .setMinApi(parameters.getRuntime())
+        .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class, String.valueOf(expectCause))
         .assertSuccessWithOutputLines("OK", "OK");
   }
@@ -49,7 +51,7 @@
         .addProgramClasses(Main.class)
         .addKeepMainRule(Main.class)
         .enableInliningAnnotations()
-        .setMinApi(parameters.getRuntime())
+        .setMinApi(parameters.getApiLevel())
         .run(parameters.getRuntime(), Main.class, String.valueOf(expectCause))
         .assertSuccessWithOutputLines("OK", "OK");
   }