Add map and apply to the testing builders.

Change-Id: Ic748a7a00c1c4d6e1860995dea6a54375a539ef3
diff --git a/src/test/java/com/android/tools/r8/TestBaseResult.java b/src/test/java/com/android/tools/r8/TestBaseResult.java
index e7623a3..390e017 100644
--- a/src/test/java/com/android/tools/r8/TestBaseResult.java
+++ b/src/test/java/com/android/tools/r8/TestBaseResult.java
@@ -4,6 +4,9 @@
 
 package com.android.tools.r8;
 
+import java.util.function.Consumer;
+import java.util.function.Function;
+
 public abstract class TestBaseResult<CR extends TestBaseResult<CR, RR>, RR extends TestRunResult> {
   final TestState state;
 
@@ -12,4 +15,13 @@
   }
 
   public abstract CR self();
+
+  public <S> S map(Function<CR, S> fn) {
+    return fn.apply(self());
+  }
+
+  public CR apply(Consumer<CR> fn) {
+    fn.accept(self());
+    return self();
+  }
 }
diff --git a/src/test/java/com/android/tools/r8/TestBuilder.java b/src/test/java/com/android/tools/r8/TestBuilder.java
index c67c05c..9ba822d 100644
--- a/src/test/java/com/android/tools/r8/TestBuilder.java
+++ b/src/test/java/com/android/tools/r8/TestBuilder.java
@@ -9,6 +9,8 @@
 import java.nio.file.Path;
 import java.util.Arrays;
 import java.util.Collection;
+import java.util.function.Consumer;
+import java.util.function.Function;
 
 public abstract class TestBuilder<RR extends TestRunResult, T extends TestBuilder<RR, T>> {
 
@@ -24,6 +26,15 @@
 
   abstract T self();
 
+  public <S> S map(Function<T, S> fn) {
+    return fn.apply(self());
+  }
+
+  public T apply(Consumer<T> fn) {
+    fn.accept(self());
+    return self();
+  }
+
   public abstract RR run(String mainClass)
       throws IOException, CompilationFailedException;
 
diff --git a/src/test/java/com/android/tools/r8/TestRunResult.java b/src/test/java/com/android/tools/r8/TestRunResult.java
index 89d0fff..e2f4239 100644
--- a/src/test/java/com/android/tools/r8/TestRunResult.java
+++ b/src/test/java/com/android/tools/r8/TestRunResult.java
@@ -9,12 +9,12 @@
 import static org.junit.Assert.assertThat;
 
 import com.android.tools.r8.ToolHelper.ProcessResult;
-import com.android.tools.r8.graph.invokesuper.Consumer;
 import com.android.tools.r8.utils.AndroidApp;
 import com.android.tools.r8.utils.codeinspector.CodeInspector;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.util.concurrent.ExecutionException;
+import java.util.function.Consumer;
 import java.util.function.Function;
 import org.hamcrest.Matcher;
 
@@ -29,6 +29,15 @@
 
   abstract RR self();
 
+  public <S> S map(Function<RR, S> fn) {
+    return fn.apply(self());
+  }
+
+  public RR apply(Consumer<RR> fn) {
+    fn.accept(self());
+    return self();
+  }
+
   public AndroidApp app() {
     return app;
   }
@@ -74,10 +83,6 @@
     return self();
   }
 
-  public <R> R map(Function<RR, R> mapper) {
-    return mapper.apply(self());
-  }
-
   public CodeInspector inspector() throws IOException, ExecutionException {
     // Inspection post run implies success. If inspection of an invalid program is needed it should
     // be done on the compilation result or on the input.