Fix for NonVirtualOverrideTest on old VMs

Change-Id: I94be0e4803db20c76de9e3e58c6f04c43c7504c2
diff --git a/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java b/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
index 53c9f83..2490d41 100644
--- a/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
+++ b/src/test/java/com/android/tools/r8/shaking/NonVirtualOverrideTest.java
@@ -14,6 +14,7 @@
 import com.android.tools.r8.ClassFileConsumer.ArchiveConsumer;
 import com.android.tools.r8.TestBase;
 import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.DexVm.Version;
 import com.android.tools.r8.ToolHelper.ProcessResult;
 import com.android.tools.r8.ir.optimize.Inliner.Reason;
 import com.android.tools.r8.jasmin.JasminBuilder;
@@ -87,22 +88,47 @@
             .build();
 
     // Run the program using java.
-    Path referenceJar = temp.getRoot().toPath().resolve("input.jar");
-    ArchiveConsumer inputConsumer = new ArchiveConsumer(referenceJar);
-    for (Class<?> clazz : ImmutableList.of(main, A, C)) {
+    String referenceResult;
+    if (backend == Backend.DEX
+        && ToolHelper.getDexVm().getVersion().isOlderThanOrEqual(Version.V7_0_0)
+        && ToolHelper.getDexVm().getVersion().isAtLeast(Version.V5_1_1)) {
+      referenceResult =
+          String.join(
+              System.lineSeparator(),
+              "In A.m1()",
+              "In A.m2()",
+              "In A.m3()",
+              "In A.m4()",
+              "In C.m1()",
+              "In A.m2()",
+              "In C.m3()",
+              "In A.m4()",
+              "In A.m1()", // With Java: Caught IllegalAccessError when calling B.m1()
+              "In A.m3()", // With Java: Caught IncompatibleClassChangeError when calling B.m3()
+              "In C.m1()", // With Java: Caught IllegalAccessError when calling B.m1()
+              "In C.m3()", // With Java: Caught IncompatibleClassChangeError when calling B.m3()
+              "In C.m1()",
+              "In C.m3()",
+              "");
+    } else {
+      Path referenceJar = temp.getRoot().toPath().resolve("input.jar");
+      ArchiveConsumer inputConsumer = new ArchiveConsumer(referenceJar);
+      for (Class<?> clazz : ImmutableList.of(main, A, C)) {
+        inputConsumer.accept(
+            ByteDataView.of(ToolHelper.getClassAsBytes(clazz)),
+            DescriptorUtils.javaTypeToDescriptor(clazz.getName()),
+            null);
+      }
       inputConsumer.accept(
-          ByteDataView.of(ToolHelper.getClassAsBytes(clazz)),
-          DescriptorUtils.javaTypeToDescriptor(clazz.getName()),
+          ByteDataView.of(jasminBuilder.buildClasses().get(0)),
+          DescriptorUtils.javaTypeToDescriptor(B.getName()),
           null);
-    }
-    inputConsumer.accept(
-        ByteDataView.of(jasminBuilder.buildClasses().get(0)),
-        DescriptorUtils.javaTypeToDescriptor(B.getName()),
-        null);
-    inputConsumer.finished(null);
+      inputConsumer.finished(null);
 
-    ProcessResult referenceResult = ToolHelper.runJava(referenceJar, main.getName());
-    assertEquals(referenceResult.exitCode, 0);
+      ProcessResult javaResult = ToolHelper.runJava(referenceJar, main.getName());
+      assertEquals(javaResult.exitCode, 0);
+      referenceResult = javaResult.stdout;
+    }
 
     // Run the program on Art after is has been compiled with R8.
     AndroidApp compiled =
@@ -115,7 +141,7 @@
               options.testing.validInliningReasons = ImmutableSet.of(Reason.FORCE);
             },
             backend);
-    assertEquals(referenceResult.stdout, runOnVM(compiled, main, backend));
+    assertEquals(referenceResult, runOnVM(compiled, main, backend));
 
     // Check that B is present and that it doesn't contain the unused private method m2.
     if (!enableClassInlining && !enableVerticalClassMerging) {