diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/CollectionToArrayTest.java b/src/test/examplesJava11/collectiontoarray/CollectionToArrayTest.java
similarity index 68%
rename from src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/CollectionToArrayTest.java
rename to src/test/examplesJava11/collectiontoarray/CollectionToArrayTest.java
index 6f1b750..5777aa3 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/CollectionToArrayTest.java
+++ b/src/test/examplesJava11/collectiontoarray/CollectionToArrayTest.java
@@ -2,22 +2,22 @@
 // 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.desugar.desugaredlibrary.jdk11;
+package collectiontoarray;
 
 import static com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification.SPECIFICATIONS_WITH_CF2CF;
 import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11;
 import static com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification.JDK11_PATH;
 
 import com.android.tools.r8.TestParameters;
-import com.android.tools.r8.ToolHelper;
 import com.android.tools.r8.desugar.desugaredlibrary.DesugaredLibraryTestBase;
 import com.android.tools.r8.desugar.desugaredlibrary.test.CompilationSpecification;
 import com.android.tools.r8.desugar.desugaredlibrary.test.LibraryDesugaringSpecification;
 import com.android.tools.r8.utils.StringUtils;
 import com.google.common.collect.ImmutableList;
-import java.nio.file.Path;
-import java.nio.file.Paths;
+import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
+import java.util.function.IntFunction;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -30,11 +30,8 @@
   private final LibraryDesugaringSpecification libraryDesugaringSpecification;
   private final CompilationSpecification compilationSpecification;
 
-  private static final Path INPUT_JAR =
-      Paths.get(ToolHelper.EXAMPLES_JAVA11_JAR_DIR + "collectiontoarray.jar");
   private static final String EXPECTED_OUTPUT =
       StringUtils.lines("[one, two]", "Override", "[one, two]");
-  private static final String MAIN_CLASS = "collectiontoarray.Main";
 
   @Parameters(name = "{0}, spec: {1}, {2}")
   public static List<Object[]> data() {
@@ -56,9 +53,35 @@
   @Test
   public void test() throws Throwable {
     testForDesugaredLibrary(parameters, libraryDesugaringSpecification, compilationSpecification)
-        .addProgramFiles(INPUT_JAR)
-        .addKeepMainRule(MAIN_CLASS)
-        .run(parameters.getRuntime(), MAIN_CLASS)
+        .addInnerClassesAndStrippedOuter(getClass())
+        .addKeepMainRule(Main.class)
+        .run(parameters.getRuntime(), Main.class)
         .assertSuccessWithOutput(EXPECTED_OUTPUT);
   }
+
+  public static class Main {
+    public static void main(String[] args) {
+      List<String> list = new ArrayList<>();
+      list.add("one");
+      list.add("two");
+      // This default method was added in Android T.
+      String[] toArray = list.toArray(String[]::new);
+      System.out.println(Arrays.toString(toArray));
+
+      List<String> myList = new MyList<>();
+      myList.add("one");
+      myList.add("two");
+      // This default method was added in Android T.
+      String[] toArray2 = myList.toArray(String[]::new);
+      System.out.println(Arrays.toString(toArray2));
+    }
+  }
+
+  @SuppressWarnings("all")
+  public static class MyList<T> extends ArrayList<T> {
+    public <T> T[] toArray(IntFunction<T[]> generator) {
+      System.out.println("Override");
+      return super.toArray(generator);
+    }
+  }
 }
diff --git a/src/test/examplesJava11/collectiontoarray/Main.java b/src/test/examplesJava11/collectiontoarray/Main.java
deleted file mode 100644
index 3a4cc01..0000000
--- a/src/test/examplesJava11/collectiontoarray/Main.java
+++ /dev/null
@@ -1,36 +0,0 @@
-// Copyright (c) 2022, 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 collectiontoarray;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import java.util.function.IntFunction;
-
-public class Main {
-  public static void main(String[] args) {
-    List<String> list = new ArrayList<>();
-    list.add("one");
-    list.add("two");
-    // This default method was added in Android T.
-    String[] toArray = list.toArray(String[]::new);
-    System.out.println(Arrays.toString(toArray));
-
-    List<String> myList = new MyList<>();
-    myList.add("one");
-    myList.add("two");
-    // This default method was added in Android T.
-    String[] toArray2 = myList.toArray(String[]::new);
-    System.out.println(Arrays.toString(toArray2));
-  }
-
-  @SuppressWarnings("all")
-  public static class MyList<T> extends ArrayList<T> {
-    public <T> T[] toArray(IntFunction<T[]> generator) {
-      System.out.println("Override");
-      return super.toArray(generator);
-    }
-  }
-}
