diff --git a/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/.classpath b/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/.classpath
index 22230cf0d..da6b86478 100644
--- a/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/.classpath
+++ b/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/.classpath
@@ -1,5 +1,6 @@
+
@@ -8,5 +9,5 @@
-
+
diff --git a/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/src/main/java/example/AdditionalMainSource.java b/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/src/main/java/example/AdditionalMainSource.java
new file mode 100644
index 000000000..99da8fd79
--- /dev/null
+++ b/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/src/main/java/example/AdditionalMainSource.java
@@ -0,0 +1,4 @@
+package example;
+
+public class AdditionalMainSource {
+}
diff --git a/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/src/main/java/example/AdditionalMainSourceTest.java b/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/src/main/java/example/AdditionalMainSourceTest.java
new file mode 100644
index 000000000..05d2adcc4
--- /dev/null
+++ b/java-extension/com.microsoft.java.test.plugin.test/projects/preview-junit/src/main/java/example/AdditionalMainSourceTest.java
@@ -0,0 +1,10 @@
+package example;
+
+import org.junit.jupiter.api.Test;
+
+public class AdditionalMainSourceTest {
+
+ @Test
+ public void mainSourceTest() {
+ }
+}
diff --git a/java-extension/com.microsoft.java.test.plugin.test/src/com/microsoft/java/test/plugin/util/TestSearchUtilsTest.java b/java-extension/com.microsoft.java.test.plugin.test/src/com/microsoft/java/test/plugin/util/TestSearchUtilsTest.java
index a98f48ab4..79256e046 100644
--- a/java-extension/com.microsoft.java.test.plugin.test/src/com/microsoft/java/test/plugin/util/TestSearchUtilsTest.java
+++ b/java-extension/com.microsoft.java.test.plugin.test/src/com/microsoft/java/test/plugin/util/TestSearchUtilsTest.java
@@ -16,8 +16,11 @@
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
+import java.lang.reflect.Field;
import java.net.URI;
import java.util.Arrays;
+import java.util.Collections;
+import java.util.Collection;
import java.util.List;
import org.eclipse.core.resources.IProject;
@@ -82,7 +85,6 @@ public void testDiscoverJUnit5TestsWithOlderPreviewSource() throws Exception {
.filter(item -> "example".equals(item.getLabel()))
.findFirst().orElse(null);
assertNotNull(examplePackage);
- assertEquals(11, examplePackage.getChildren().size());
assertTrue(examplePackage.getChildren().stream().anyMatch(item -> "MiniTest".equals(item.getLabel())));
assertTrue(examplePackage.getChildren().stream().anyMatch(item -> "SiblingTest".equals(item.getLabel())));
assertTrue(examplePackage.getChildren().stream().anyMatch(item -> "NestedOnlyTest".equals(item.getLabel())));
@@ -106,6 +108,49 @@ public void testDiscoverJUnit5TestsWithOlderPreviewSource() throws Exception {
assertEquals(JavaCore.ENABLED, javaProject.getOption(JavaCore.COMPILER_PB_ENABLE_PREVIEW_FEATURES, true));
}
+ @Test
+ public void testAdditionalSourcePathsDiscoveryAndNavigation() throws Exception {
+ final IProject project = importProjects("preview-junit").get(0);
+ final IJavaProject javaProject = JavaCore.create(project);
+ final String sourcePath = javaProject.getPackageFragmentRoot(project.getFolder("src/main/java"))
+ .getResource().getLocation().toOSString();
+
+ final List defaultPackages = TestSearchUtils.findTestPackagesAndTypes(
+ Arrays.asList(javaProject.getHandleIdentifier()), new NullProgressMonitor());
+ assertTrue("Default test discovery should retain ordinary test-source tests",
+ containsTestItem(defaultPackages, "MiniTest"));
+ assertTrue("Default Java-project discovery should retain existing main-source test behavior",
+ containsTestItem(defaultPackages, "AdditionalMainSourceTest"));
+
+ final List packagesWithAdditionalSource = TestSearchUtils.findTestPackagesAndTypes(
+ Arrays.