Skip to content

Commit 1b64c64

Browse files
committed
Produce test for subpackages with tests
1 parent cd5d205 commit 1b64c64

File tree

4 files changed

+26
-15
lines changed

4 files changed

+26
-15
lines changed

src/com/goide/runconfig/testing/GoTestFramework.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public static GoTestFramework fromName(@Nullable String name) {
4040

4141
public abstract boolean isAvailable(@Nullable Module module);
4242

43-
public abstract boolean isAvailableOnFile(@NotNull PsiFile file);
43+
public abstract boolean isAvailableOnFile(@Nullable PsiFile file);
4444

4545
@NotNull
4646
protected abstract GoTestRunningState newRunningState(@NotNull ExecutionEnvironment env,

src/com/goide/runconfig/testing/GoTestRunConfigurationProducerBase.java

Lines changed: 23 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,19 @@
2424
import com.intellij.execution.actions.RunConfigurationProducer;
2525
import com.intellij.openapi.module.Module;
2626
import com.intellij.openapi.module.ModuleUtilCore;
27+
import com.intellij.openapi.project.Project;
2728
import com.intellij.openapi.util.Comparing;
2829
import com.intellij.openapi.util.Ref;
2930
import com.intellij.openapi.util.io.FileUtil;
3031
import com.intellij.openapi.util.text.StringUtil;
32+
import com.intellij.openapi.vfs.VfsUtilCore;
33+
import com.intellij.openapi.vfs.VirtualFile;
3134
import com.intellij.psi.PsiDirectory;
3235
import com.intellij.psi.PsiElement;
3336
import com.intellij.psi.PsiFile;
37+
import com.intellij.psi.PsiManager;
3438
import com.intellij.psi.util.PsiTreeUtil;
39+
import com.intellij.util.Processor;
3540
import org.jetbrains.annotations.NotNull;
3641
import org.jetbrains.annotations.Nullable;
3742

@@ -45,32 +50,38 @@ protected GoTestRunConfigurationProducerBase(@NotNull GoTestFramework framework)
4550
}
4651

4752
@Override
48-
protected boolean setupConfigurationFromContext(@NotNull GoTestRunConfiguration configuration,
53+
protected boolean setupConfigurationFromContext(@NotNull final GoTestRunConfiguration configuration,
4954
ConfigurationContext context,
5055
Ref sourceElement) {
51-
PsiElement contextElement = GoRunUtil.getContextElement(context);
56+
final PsiElement contextElement = GoRunUtil.getContextElement(context);
5257
if (contextElement == null) {
5358
return false;
5459
}
5560

5661
Module module = ModuleUtilCore.findModuleForPsiElement(contextElement);
57-
if (module == null || !GoSdkService.getInstance(module.getProject()).isGoModule(module)) return false;
62+
final Project project = contextElement.getProject();
63+
if (module == null || !GoSdkService.getInstance(project).isGoModule(module)) return false;
5864
if (!myFramework.isAvailable(module)) return false;
5965

6066
configuration.setModule(module);
6167
configuration.setTestFramework(myFramework);
6268
if (contextElement instanceof PsiDirectory) {
63-
for (PsiFile file : ((PsiDirectory)contextElement).getFiles()) {
64-
if (myFramework.isAvailableOnFile(file)) {
65-
configuration.setName(getPackageConfigurationName(((PsiDirectory)contextElement).getName()));
66-
configuration.setKind(GoTestRunConfiguration.Kind.DIRECTORY);
67-
String directoryPath = ((PsiDirectory)contextElement).getVirtualFile().getPath();
68-
configuration.setDirectoryPath(directoryPath);
69-
configuration.setWorkingDirectory(directoryPath);
69+
VirtualFile virtualFile = ((PsiDirectory)contextElement).getVirtualFile();
70+
return !VfsUtilCore.processFilesRecursively(virtualFile, new Processor<VirtualFile>() {
71+
@Override
72+
public boolean process(VirtualFile file) {
73+
PsiFile psiFile = PsiManager.getInstance(project).findFile(file);
74+
if (myFramework.isAvailableOnFile(psiFile)) {
75+
configuration.setName(getPackageConfigurationName(((PsiDirectory)contextElement).getName()));
76+
configuration.setKind(GoTestRunConfiguration.Kind.DIRECTORY);
77+
String directoryPath = ((PsiDirectory)contextElement).getVirtualFile().getPath();
78+
configuration.setDirectoryPath(directoryPath);
79+
configuration.setWorkingDirectory(directoryPath);
80+
return false;
81+
}
7082
return true;
7183
}
72-
}
73-
return false;
84+
});
7485
}
7586
else {
7687
PsiFile file = contextElement.getContainingFile();

src/com/goide/runconfig/testing/frameworks/gocheck/GocheckFramework.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ private static boolean isGoCheckImportPath(String importPath) {
7878
}
7979

8080
@Override
81-
public boolean isAvailableOnFile(@NotNull PsiFile file) {
81+
public boolean isAvailableOnFile(@Nullable PsiFile file) {
8282
if (!GoTestFinder.isTestFile(file)) {
8383
return false;
8484
}

src/com/goide/runconfig/testing/frameworks/gotest/GotestFramework.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public boolean isAvailable(@Nullable Module module) {
4747
}
4848

4949
@Override
50-
public boolean isAvailableOnFile(@NotNull PsiFile file) {
50+
public boolean isAvailableOnFile(@Nullable PsiFile file) {
5151
return GoTestFinder.isTestFile(file);
5252
}
5353

0 commit comments

Comments
 (0)