Move test utility for instrumenting classes using JaCoCo
Change-Id: I4b2913a0ed82d487e2912fb29d0540aa513e2f9b
diff --git a/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicTest.java b/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicTest.java
index 266745e..9c33f50 100644
--- a/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/constantdynamic/JacocoConstantDynamicTest.java
@@ -3,9 +3,6 @@
// BSD-style license that can be found in the LICENSE file.
package com.android.tools.r8.desugar.constantdynamic;
-import static com.android.tools.r8.utils.DescriptorUtils.JAVA_PACKAGE_SEPARATOR;
-import static com.android.tools.r8.utils.FileUtils.CLASS_EXTENSION;
-import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assume.assumeTrue;
@@ -15,12 +12,10 @@
import com.android.tools.r8.TestRuntime.CfVm;
import com.android.tools.r8.ToolHelper;
import com.android.tools.r8.ToolHelper.DexVm;
-import com.android.tools.r8.ToolHelper.ProcessResult;
import com.android.tools.r8.cf.CfVersion;
+import com.android.tools.r8.jacoco.JacocoClasses;
import com.android.tools.r8.utils.BooleanUtils;
import com.android.tools.r8.utils.StringUtils;
-import com.android.tools.r8.utils.ZipUtils;
-import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -141,60 +136,6 @@
temp);
}
- // Two sets of class files with and without JaCoCo off line instrumentation.
- private static class JacocoClasses {
- private final Path dir;
-
- private final Path originalJar;
- private final Path instrumentedJar;
-
- // Create JacocoClasses with just one class provided as bytes.
- private JacocoClasses(byte[] clazz, TemporaryFolder temp) throws IOException {
- dir = temp.newFolder().toPath();
-
- // Write the class to a .class file with package sub-directories.
- String typeName = extractClassName(clazz);
- int lastDotIndex = typeName.lastIndexOf('.');
- String pkg = typeName.substring(0, lastDotIndex);
- String baseFileName = typeName.substring(lastDotIndex + 1) + CLASS_EXTENSION;
- Path original = dir.resolve("original");
- Files.createDirectories(original);
- Path packageDir = original.resolve(pkg.replace(JAVA_PACKAGE_SEPARATOR, File.separatorChar));
- Files.createDirectories(packageDir);
- Path classFile = packageDir.resolve(baseFileName);
- Files.write(classFile, clazz);
-
- // Run offline instrumentation.
- Path instrumented = dir.resolve("instrumented");
- Files.createDirectories(instrumented);
- runJacocoInstrumentation(original, instrumented);
- originalJar = dir.resolve("original" + JAR_EXTENSION);
- ZipUtils.zip(originalJar, original);
- instrumentedJar = dir.resolve("instrumented" + JAR_EXTENSION);
- ZipUtils.zip(instrumentedJar, instrumented);
- }
-
- public Path getOriginal() {
- return originalJar;
- }
-
- public Path getInstrumented() {
- return instrumentedJar;
- }
-
- public List<String> generateReport(Path jacocoExec) throws IOException {
- Path report = dir.resolve("report.scv");
- ProcessResult result = ToolHelper.runJaCoCoReport(originalJar, jacocoExec, report);
- assertEquals(result.toString(), 0, result.exitCode);
- return Files.readAllLines(report);
- }
-
- private void runJacocoInstrumentation(Path input, Path outdir) throws IOException {
- ProcessResult result = ToolHelper.runJaCoCoInstrument(input, outdir);
- assertEquals(result.toString(), 0, result.exitCode);
- }
- }
-
static class TestRunner {
public static void main(String[] args) {
diff --git a/src/test/java/com/android/tools/r8/jacoco/JacocoClasses.java b/src/test/java/com/android/tools/r8/jacoco/JacocoClasses.java
new file mode 100644
index 0000000..0149669
--- /dev/null
+++ b/src/test/java/com/android/tools/r8/jacoco/JacocoClasses.java
@@ -0,0 +1,75 @@
+// Copyright (c) 2021, 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.jacoco;
+
+import static com.android.tools.r8.utils.DescriptorUtils.JAVA_PACKAGE_SEPARATOR;
+import static com.android.tools.r8.utils.FileUtils.CLASS_EXTENSION;
+import static com.android.tools.r8.utils.FileUtils.JAR_EXTENSION;
+import static org.junit.Assert.assertEquals;
+
+import com.android.tools.r8.TestBase;
+import com.android.tools.r8.ToolHelper;
+import com.android.tools.r8.ToolHelper.ProcessResult;
+import com.android.tools.r8.utils.ZipUtils;
+import java.io.File;
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+import org.junit.rules.TemporaryFolder;
+
+// Two sets of class files with and without JaCoCo offline instrumentation.
+public class JacocoClasses {
+
+ private final Path dir;
+
+ private final Path originalJar;
+ private final Path instrumentedJar;
+
+ // Create JacocoClasses with just one class provided as bytes.
+ public JacocoClasses(byte[] clazz, TemporaryFolder temp) throws IOException {
+ dir = temp.newFolder().toPath();
+
+ // Write the class to a .class file with package sub-directories.
+ String typeName = TestBase.extractClassName(clazz);
+ int lastDotIndex = typeName.lastIndexOf('.');
+ String pkg = typeName.substring(0, lastDotIndex);
+ String baseFileName = typeName.substring(lastDotIndex + 1) + CLASS_EXTENSION;
+ Path original = dir.resolve("original");
+ Files.createDirectories(original);
+ Path packageDir = original.resolve(pkg.replace(JAVA_PACKAGE_SEPARATOR, File.separatorChar));
+ Files.createDirectories(packageDir);
+ Path classFile = packageDir.resolve(baseFileName);
+ Files.write(classFile, clazz);
+
+ // Run offline instrumentation.
+ Path instrumented = dir.resolve("instrumented");
+ Files.createDirectories(instrumented);
+ runJacocoInstrumentation(original, instrumented);
+ originalJar = dir.resolve("original" + JAR_EXTENSION);
+ ZipUtils.zip(originalJar, original);
+ instrumentedJar = dir.resolve("instrumented" + JAR_EXTENSION);
+ ZipUtils.zip(instrumentedJar, instrumented);
+ }
+
+ public Path getOriginal() {
+ return originalJar;
+ }
+
+ public Path getInstrumented() {
+ return instrumentedJar;
+ }
+
+ public List<String> generateReport(Path jacocoExec) throws IOException {
+ Path report = dir.resolve("report.scv");
+ ProcessResult result = ToolHelper.runJaCoCoReport(originalJar, jacocoExec, report);
+ assertEquals(result.toString(), 0, result.exitCode);
+ return Files.readAllLines(report);
+ }
+
+ private void runJacocoInstrumentation(Path input, Path outdir) throws IOException {
+ ProcessResult result = ToolHelper.runJaCoCoInstrument(input, outdir);
+ assertEquals(result.toString(), 0, result.exitCode);
+ }
+}