diff --git a/src/main/java/com/valantic/intellij/plugin/mutation/action/MutationAction.java b/src/main/java/com/valantic/intellij/plugin/mutation/action/MutationAction.java index f160052..f5ce592 100644 --- a/src/main/java/com/valantic/intellij/plugin/mutation/action/MutationAction.java +++ b/src/main/java/com/valantic/intellij/plugin/mutation/action/MutationAction.java @@ -140,6 +140,12 @@ private void setEventTargetClass() { this.targetClass = this.targetTest; } else if (psiService.doesClassExists(this.targetTest.split(MutationConstants.TEST_CLASS_SUFFIX.getValue())[0])) { this.targetClass = this.targetTest.split(MutationConstants.TEST_CLASS_SUFFIX.getValue())[0]; + } else { + String[] testPathAndClass = this.targetTest.split(MutationConstants.TEST_CLASS_PREFIX.getValue()); + + if (psiService.doesClassExists(StringUtils.join(testPathAndClass))) { + this.targetClass = StringUtils.join(testPathAndClass); + } } } } diff --git a/src/main/java/com/valantic/intellij/plugin/mutation/enums/MutationConstants.java b/src/main/java/com/valantic/intellij/plugin/mutation/enums/MutationConstants.java index 5f39aea..bc71b30 100644 --- a/src/main/java/com/valantic/intellij/plugin/mutation/enums/MutationConstants.java +++ b/src/main/java/com/valantic/intellij/plugin/mutation/enums/MutationConstants.java @@ -29,6 +29,7 @@ public enum MutationConstants { WILDCARD_SUFFIX_REGEX("\\.\\*"), PACKAGE_WILDCARD_SUFFIX(".*"), TEST_CLASS_SUFFIX("Test"), + TEST_CLASS_PREFIX("Test"), WILDCARD_SUFFIX("*"); private String value; diff --git a/src/main/java/com/valantic/intellij/plugin/mutation/services/impl/PsiService.java b/src/main/java/com/valantic/intellij/plugin/mutation/services/impl/PsiService.java index 652689a..6ebdcba 100644 --- a/src/main/java/com/valantic/intellij/plugin/mutation/services/impl/PsiService.java +++ b/src/main/java/com/valantic/intellij/plugin/mutation/services/impl/PsiService.java @@ -114,6 +114,7 @@ public String determineTargetTest(final PsiClass psiClass) { public String determineTargetClass(final String targetTest, final PsiClass psiClass) { return Optional.ofNullable(targetTest) .map(testClassName -> StringUtils.removeEnd(testClassName, MutationConstants.TEST_CLASS_SUFFIX.getValue())) + .map(testClassName -> StringUtils.removeStart(testClassName, MutationConstants.TEST_CLASS_SUFFIX.getValue())) .filter(this::doesClassExists) .orElseGet(() -> Optional.of(psiClass) .map(PsiClass::getContainingFile) diff --git a/src/test/java/com/valantic/intellij/plugin/mutation/action/MutationActionTest.java b/src/test/java/com/valantic/intellij/plugin/mutation/action/MutationActionTest.java index 4f8fcd2..92574f1 100644 --- a/src/test/java/com/valantic/intellij/plugin/mutation/action/MutationActionTest.java +++ b/src/test/java/com/valantic/intellij/plugin/mutation/action/MutationActionTest.java @@ -46,6 +46,7 @@ import org.mockito.ArgumentCaptor; import org.mockito.Mock; import org.mockito.MockedStatic; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -245,7 +246,20 @@ void testActionPerformed_selectedFile() { verify(mutationConfigurationOptions).setTargetClasses("packageName.className"); assertEquals("packageName.classNameTest", underTest.getTargetTest()); assertEquals("packageName.className", underTest.getTargetClass()); - verify(executionManager).restartRunProfile(executionEnvironment); + + when(psiJavaFile.getPackageName()).thenReturn("packageName.subPackageName"); + when(psiJavaFile.getName()).thenReturn("TestClassName.java"); + when(psiService.doesClassExists("packageName.subPackageName.")).thenReturn(false); + when(psiService.doesClassExists("packageName.subPackageName.ClassName")).thenReturn(true); + when(configurationService.getOrCreateMutationConfiguration(project, "packageName.subPackageName.TestClassName")).thenReturn(mutationConfiguration); + + underTest.actionPerformed(anActionEvent); + + verify(mutationConfigurationOptions).setTargetTests("packageName.subPackageName.TestClassName"); + verify(mutationConfigurationOptions).setTargetClasses("packageName.subPackageName.ClassName"); + assertEquals("packageName.subPackageName.TestClassName", underTest.getTargetTest()); + assertEquals("packageName.subPackageName.ClassName", underTest.getTargetClass()); + verify(executionManager, Mockito.times(2)).restartRunProfile(executionEnvironment); } @AfterEach diff --git a/src/test/java/com/valantic/intellij/plugin/mutation/linemarker/MutationRunLineMarkerContributorTest.java b/src/test/java/com/valantic/intellij/plugin/mutation/linemarker/MutationRunLineMarkerContributorTest.java index fc1c9c0..a0eb663 100644 --- a/src/test/java/com/valantic/intellij/plugin/mutation/linemarker/MutationRunLineMarkerContributorTest.java +++ b/src/test/java/com/valantic/intellij/plugin/mutation/linemarker/MutationRunLineMarkerContributorTest.java @@ -31,6 +31,7 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.MockedStatic; +import org.mockito.Mockito; import org.mockito.junit.jupiter.MockitoExtension; import static org.junit.jupiter.api.Assertions.assertArrayEquals; @@ -89,6 +90,23 @@ void testGetInfo() { verify(psiService).determineTargetClass("targetTest", psiClass); verify(messageService).executionMessage("run.text"); mutationActionMockedStatic.verify(() -> MutationAction.getSingletonActions("targetClass", "targetTest")); + + when(psiService.determineTargetTest(psiClass)).thenReturn("TestTarget"); + when(psiService.determineTargetClass("TestTarget", psiClass)).thenReturn("TargetClass"); + when(messageService.executionMessage("run.text")).thenReturn("Run Text"); + mutationActionMockedStatic.when(() -> MutationAction.getSingletonActions("TargetClass", "TestTarget")).thenReturn(mutationActions); + + final RunLineMarkerContributor.Info result2 = underTest.getInfo(psiIdentifier); + + assertNotNull(result2); + assertNotNull(result2.tooltipProvider); + assertEquals(Icons.MUTATIONx12, result2.icon); + assertArrayEquals(mutationActions, result2.actions); + assertEquals("Run Text", result2.tooltipProvider.apply(null)); + verify(psiService, Mockito.times(2)).determineTargetTest(psiClass); + verify(psiService).determineTargetClass("TestTarget", psiClass); + verify(messageService, Mockito.times(2)).executionMessage("run.text"); + mutationActionMockedStatic.verify(() -> MutationAction.getSingletonActions("TargetClass", "TestTarget")); } @AfterEach diff --git a/src/test/java/com/valantic/intellij/plugin/mutation/services/impl/PsiServiceTest.java b/src/test/java/com/valantic/intellij/plugin/mutation/services/impl/PsiServiceTest.java index 7140dc3..b6014c3 100644 --- a/src/test/java/com/valantic/intellij/plugin/mutation/services/impl/PsiServiceTest.java +++ b/src/test/java/com/valantic/intellij/plugin/mutation/services/impl/PsiServiceTest.java @@ -266,6 +266,12 @@ void testDetermineTargetClass_classExists() { doReturn(true).when(underTest).doesClassExists("targetClass"); assertEquals("targetClass", underTest.determineTargetClass(targetTest, psiClass)); + + final String targetTestWithPrefix = "TestTargetClass"; + + doReturn(true).when(underTest).doesClassExists("TargetClass"); + + assertEquals("TargetClass", underTest.determineTargetClass(targetTestWithPrefix, psiClass)); } @Test