diff --git a/CHANGELOG.md b/CHANGELOG.md index 0de12b8a..d8e12159 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ ## [Unreleased] ### Added - Basic autocompletion for `$this` for PhpUnit TestCase base class ([#11](https://github.com/pestphp/pest-intellij/pull/11)) -- Line markers now works, but runs the whole file and not the single test. ([#17](https://github.com/pestphp/pest-intellij/pull/17)) +- Line markers now works, for the whole file and the single test. ([#17](https://github.com/pestphp/pest-intellij/pull/17), [#24](https://github.com/pestphp/pest-intellij/pull/24)) - Add running support with debugger ([#19](https://github.com/pestphp/pest-intellij/pull/19)) - `$this->field` type support for fields declared in `beforeEach` and `beforeAll` functions ([#22](https://github.com/pestphp/pest-intellij/pull/22)) diff --git a/src/main/java/com/pestphp/pest/PestComposerConfig.java b/src/main/java/com/pestphp/pest/PestComposerConfig.java index 56a4fa84..cd6852d3 100644 --- a/src/main/java/com/pestphp/pest/PestComposerConfig.java +++ b/src/main/java/com/pestphp/pest/PestComposerConfig.java @@ -2,7 +2,6 @@ import com.intellij.execution.configurations.ConfigurationType; import com.jetbrains.php.testFramework.PhpTestFrameworkComposerConfig; -import com.jetbrains.php.testFramework.PhpTestFrameworkType; import com.pestphp.pest.configuration.PestRunConfigurationType; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/com/pestphp/pest/PestFrameworkType.java b/src/main/java/com/pestphp/pest/PestFrameworkType.java index 354c2cef..bc9c0a2a 100644 --- a/src/main/java/com/pestphp/pest/PestFrameworkType.java +++ b/src/main/java/com/pestphp/pest/PestFrameworkType.java @@ -1,7 +1,5 @@ package com.pestphp.pest; -import com.jetbrains.php.testFramework.PhpTestDescriptor; -import com.jetbrains.php.testFramework.PhpTestFrameworkConfigurationFactory; import com.jetbrains.php.testFramework.PhpTestFrameworkFormDecorator; import com.jetbrains.php.testFramework.PhpTestFrameworkFormDecorator.PhpDownloadableTestFormDecorator; import com.jetbrains.php.testFramework.PhpTestFrameworkType; @@ -11,7 +9,6 @@ import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.util.List; public class PestFrameworkType extends PhpTestFrameworkType { @NonNls diff --git a/src/main/java/com/pestphp/pest/PestIcons.java b/src/main/java/com/pestphp/pest/PestIcons.java index 11260f52..3b272436 100644 --- a/src/main/java/com/pestphp/pest/PestIcons.java +++ b/src/main/java/com/pestphp/pest/PestIcons.java @@ -1,9 +1,6 @@ package com.pestphp.pest; -import com.intellij.icons.AllIcons; import com.intellij.openapi.util.IconLoader; -import com.intellij.ui.LayeredIcon; -import com.jetbrains.php.PhpIcons; import javax.swing.*; diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java b/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java index 7b15243d..c4bae89c 100644 --- a/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java +++ b/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java @@ -5,7 +5,6 @@ import com.intellij.execution.configurations.RunConfiguration; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; -import com.intellij.psi.xml.XmlFile; import com.intellij.util.TextFieldCompletionProvider; import com.jetbrains.php.lang.PhpFileType; import com.jetbrains.php.phpunit.PhpUnitUtil; @@ -26,12 +25,8 @@ public class PestRunConfiguration extends PhpTestRunConfiguration { return true; } - if (PestUtil.isPestTestFile(file)) { - // TODO: Add a check for name being a valid test in the file. - return true; - } - - return false; + // TODO: Add a check for name being a valid test in the file. + return PestUtil.isPestTestFile(file); }, false, false @@ -44,7 +39,7 @@ protected PestRunConfiguration(Project project, ConfigurationFactory factory, St name, PestFrameworkType.getInstance(), VALIDATOR, - PestRunConfigurationHandler.getInstance(), + PestRunConfigurationHandler.instance, PestVersionDetector.getInstance() ); } diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationHandler.java b/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationHandler.java deleted file mode 100644 index 21b26605..00000000 --- a/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationHandler.java +++ /dev/null @@ -1,60 +0,0 @@ -package com.pestphp.pest.configuration; - -import com.intellij.execution.ExecutionException; -import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; -import com.jetbrains.php.PhpBundle; -import com.jetbrains.php.config.commandLine.PhpCommandSettings; -import com.jetbrains.php.run.PhpExecutionUtil; -import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationHandler; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -public class PestRunConfigurationHandler implements PhpTestRunConfigurationHandler { - private static final Logger LOG = Logger.getInstance(PestRunConfigurationHandler.class); - private static final PestRunConfigurationHandler instance = new PestRunConfigurationHandler(); - - public static PestRunConfigurationHandler getInstance() { - return instance; - } - - @Override - public @NotNull String getConfigFileOption() { - return "--configuration"; - } - - @Override - public void prepareCommand(@NotNull Project project, @NotNull PhpCommandSettings commandSettings, @NotNull String exe, @Nullable String version) throws ExecutionException { - // String scriptFile = PhpExecutionUtil.loadHelperScriptAndGetText(project, "behat.php", commandSettings, PestRunConfigurationHandler.class); - - commandSettings.setScript(exe, false); - commandSettings.addArgument("--teamcity"); - - commandSettings.addEnv("IDE_PEST_EXE", exe); - - if (StringUtil.isNotEmpty(version)) { - commandSettings.addEnv("IDE_PEST_VERSION", version); - } - } - - @Override - public void runType(@NotNull Project project, @NotNull PhpCommandSettings phpCommandSettings, @NotNull String type, @NotNull String workingDirectory) throws ExecutionException { - throw new ExecutionException("Can not run pest with type."); - } - - @Override - public void runDirectory(@NotNull Project project, @NotNull PhpCommandSettings phpCommandSettings, @NotNull String directory, @NotNull String workingDirectory) throws ExecutionException { - phpCommandSettings.addPathArgument(directory); - } - - @Override - public void runFile(@NotNull Project project, @NotNull PhpCommandSettings phpCommandSettings, @NotNull String file, @NotNull String workingDirectory) throws ExecutionException { - phpCommandSettings.addPathArgument(file); - } - - @Override - public void runMethod(@NotNull Project project, @NotNull PhpCommandSettings phpCommandSettings, @NotNull String filePath, @NotNull String methodName, @NotNull String workingDirectory) throws ExecutionException { - throw new ExecutionException("Can not run pest with method."); - } -} diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationSettings.java b/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationSettings.java index 3bb59aa3..0746bf63 100644 --- a/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationSettings.java +++ b/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationSettings.java @@ -1,13 +1,8 @@ package com.pestphp.pest.configuration; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.util.xmlb.annotations.Property; -import com.jetbrains.php.run.PhpCommandLineSettings; -import com.jetbrains.php.run.PhpRunConfigurationSettings; import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationSettings; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; public class PestRunConfigurationSettings extends PhpTestRunConfigurationSettings { - @NotNull private PestRunnerSettings pestRunnerSettings = new PestRunnerSettings(); + @NotNull private final PestRunnerSettings pestRunnerSettings = new PestRunnerSettings(); } diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationType.java b/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationType.java index 035beb41..e263a05f 100644 --- a/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationType.java +++ b/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationType.java @@ -4,15 +4,9 @@ import com.intellij.openapi.project.DumbAware; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.NotNullLazyValue; -import com.jetbrains.php.run.PhpRunConfigurationFactoryBase; import com.pestphp.pest.PestBundle; -import com.pestphp.pest.PestFrameworkType;import com.pestphp.pest.PestIcons; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.Nls.Capitalization; +import com.pestphp.pest.PestIcons; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; public class PestRunConfigurationType extends SimpleConfigurationType implements DumbAware { protected PestRunConfigurationType() { diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationHandler.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationHandler.kt new file mode 100644 index 00000000..fc8dbc7b --- /dev/null +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationHandler.kt @@ -0,0 +1,46 @@ +package com.pestphp.pest.configuration + +import com.intellij.execution.ExecutionException +import com.intellij.openapi.project.Project +import com.jetbrains.php.config.commandLine.PhpCommandSettings +import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationHandler + +class PestRunConfigurationHandler : PhpTestRunConfigurationHandler { + companion object { + @JvmField val instance = PestRunConfigurationHandler() + } + + override fun getConfigFileOption(): String { + return "--configuration" + } + + override fun prepareCommand(project: Project, commandSettings: PhpCommandSettings, exe: String, version: String?) { + // String scriptFile = PhpExecutionUtil.loadHelperScriptAndGetText(project, "behat.php", commandSettings, PestRunConfigurationHandler.class); + commandSettings.setScript(exe, false) + commandSettings.addArgument("--teamcity") + commandSettings.addEnv("IDE_PEST_EXE", exe) + + + if (!version.isNullOrEmpty()) { + commandSettings.addEnv("IDE_PEST_VERSION", version) + } + } + + @Throws(ExecutionException::class) + override fun runType(project: Project, phpCommandSettings: PhpCommandSettings, type: String, workingDirectory: String) { + throw ExecutionException("Can not run pest with type.") + } + + override fun runDirectory(project: Project, phpCommandSettings: PhpCommandSettings, directory: String, workingDirectory: String) { + phpCommandSettings.addPathArgument(directory) + } + + override fun runFile(project: Project, phpCommandSettings: PhpCommandSettings, file: String, workingDirectory: String) { + phpCommandSettings.addPathArgument(file) + } + + override fun runMethod(project: Project, phpCommandSettings: PhpCommandSettings, file: String, methodName: String, workingDirectory: String) { + phpCommandSettings.addPathArgument(file) + phpCommandSettings.addArgument(String.format("--filter=/%s$/", methodName.replace(" ", "\\s"))) + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationProducer.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationProducer.kt index 7ecbfe2a..916b7c8d 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationProducer.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationProducer.kt @@ -33,11 +33,11 @@ class PestRunConfigurationProducer : PhpTestConfigurationProducer { element: PsiElement? -> (element is FunctionReference - && PestUtil.isPestTestFunction((element as FunctionReference?)!!)) + && PestUtil.isPestTestFunction(element)) } private val METHOD_NAMER = Function { element: PsiElement? -> if (element is FunctionReference) { - PestUtil.getTestName(element) + return@Function PestUtil.getTestName(element) } null } diff --git a/src/main/resources/pestBundle.properties b/src/main/resources/pestBundle.properties index 6dea3018..39e3a270 100644 --- a/src/main/resources/pestBundle.properties +++ b/src/main/resources/pestBundle.properties @@ -1,12 +1 @@ FRAMEWORK_NAME=Pest -CREATE_SINGLE_TEST=Create {0}... -RUN_SINGLE_TEST=Run {0} - - - -runConfiguration.mainConfiguration.missing.title=Run configuration 'Pest' missing -runConfiguration.mainConfiguration.missing.description=To use line markers, you need create run configuration named 'pest' with interpreter. - -runConfiguration.mainConfiguration.invalid.title=Run configuration 'pester' is invalid -runConfiguration.mainConfiguration.invalid.description=To use line markers, you need valid run configuration named 'pester'. -file=File: diff --git a/src/test/kotlin/com/pestphp/pest/tests/PestUtilTest.kt b/src/test/kotlin/com/pestphp/pest/tests/PestUtilTest.kt new file mode 100644 index 00000000..5a16ce24 --- /dev/null +++ b/src/test/kotlin/com/pestphp/pest/tests/PestUtilTest.kt @@ -0,0 +1,32 @@ +package com.pestphp.pest.tests + +import com.intellij.psi.util.PsiTreeUtil +import com.jetbrains.php.lang.psi.elements.FunctionReference +import com.pestphp.pest.PestUtil +import java.util.stream.Collectors + +class PestUtilTest: PestLightCodeFixture() { + override fun setUp() { + super.setUp() + + myFixture.copyFileToProject("SimpleTest.php") + } + + override fun getTestDataPath(): String? { + return basePath + "fixtures" + } + + fun testCanGetTestName() { + val file = myFixture.configureByFile("SimpleTest.php") + + val functions = PsiTreeUtil.findChildrenOfType(file, FunctionReference::class.java) + .stream().filter(PestUtil::isPestTestFunction).collect(Collectors.toList()) + + assertEquals(1, functions.count()) + + assertEquals( + "basic", + PestUtil.getTestName(functions.first()) + ) + } +} \ No newline at end of file