From 32a05af494b7ff7f9364df43c5141b41f2438136 Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Mon, 27 Jul 2020 08:21:13 +0200 Subject: [PATCH 01/10] wip --- .../configuration/PestRunConfiguration.java | 60 ++++++++++++++++ src/main/kotlin/com/pestphp/pest/PestUtil.kt | 5 ++ .../configuration/PestLocationProvider.kt | 72 +++++++++++++++++++ .../PestRerunFailedTestsAction.kt | 64 +++++++++++++++++ .../PestCoverageEnabledConfiguration.kt | 18 +++++ .../pest/coverage/PestCoverageEngine.kt | 45 ++++++++++++ .../coverage/PestCoverageProgramRunner.kt | 49 +++++++++++++ .../com/pestphp/pest/runner/LocationInfo.kt | 8 +++ .../pest/runner/PestConsoleProperties.kt | 35 +++++++++ src/main/resources/META-INF/pest-coverage.xml | 9 +++ src/main/resources/META-INF/plugin.xml | 1 + 11 files changed, 366 insertions(+) create mode 100644 src/main/kotlin/com/pestphp/pest/configuration/PestLocationProvider.kt create mode 100644 src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt create mode 100644 src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEnabledConfiguration.kt create mode 100644 src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt create mode 100644 src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt create mode 100644 src/main/kotlin/com/pestphp/pest/runner/LocationInfo.kt create mode 100644 src/main/kotlin/com/pestphp/pest/runner/PestConsoleProperties.kt create mode 100644 src/main/resources/META-INF/pest-coverage.xml diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java b/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java index 6436de8f..9246a5f9 100644 --- a/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java +++ b/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java @@ -1,18 +1,34 @@ package com.pestphp.pest.configuration; import com.intellij.codeInsight.completion.CompletionResultSet; +import com.intellij.execution.ExecutionException; +import com.intellij.execution.Executor; import com.intellij.execution.configurations.ConfigurationFactory; import com.intellij.execution.configurations.RunConfiguration; +import com.intellij.execution.configurations.RunProfileState; +import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.execution.configurations.RuntimeConfigurationWarning; +import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction; +import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties; +import com.intellij.execution.ui.ConsoleView; import com.intellij.openapi.options.SettingsEditor; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.util.PathUtil; import com.intellij.util.TextFieldCompletionProvider; +import com.jetbrains.php.config.commandLine.PhpCommandLinePathProcessor; +import com.jetbrains.php.config.commandLine.PhpCommandSettings; import com.jetbrains.php.testFramework.run.PhpTestRunConfiguration; import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationEditor; import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationSettings; import com.jetbrains.php.testFramework.run.PhpTestRunnerConfigurationEditor; +import com.jetbrains.php.testFramework.run.PhpTestRunnerSettings; import com.jetbrains.php.testFramework.run.PhpTestRunnerSettings.Scope; import com.pestphp.pest.PestFrameworkType; +import com.pestphp.pest.runner.PestConsoleProperties; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.EnumMap; @@ -43,6 +59,16 @@ protected PhpTestRunConfigurationSettings createSettings() { return editor; } + public RunProfileState checkAndGetState(@NotNull ExecutionEnvironment env, @NotNull PhpCommandSettings command) throws ExecutionException { + try { + this.checkConfiguration(); + } catch (RuntimeConfigurationWarning ignored) { + } catch (RuntimeConfigurationException var5) { + throw new ExecutionException(var5.getMessage() + " for " + this.getName() + " run-configuration"); + } + + return this.getState(env, command, null); + } @Override protected @NotNull TextFieldCompletionProvider createMethodFieldCompletionProvider(@NotNull PhpTestRunnerConfigurationEditor editor) { return new TextFieldCompletionProvider() { @@ -53,4 +79,38 @@ protected void addCompletionVariants(@NotNull String text, int offset, @NotNull }; } + @Override + protected @Nullable AbstractRerunFailedTestsAction createRerunAction(@NotNull ConsoleView consoleView, @NotNull SMTRunnerConsoleProperties properties) { + return new PestRerunFailedTestsAction(consoleView, properties); + } + + @Override + public @NotNull SMTRunnerConsoleProperties createTestConsoleProperties(@NotNull Executor executor) { + return new PestConsoleProperties(this, executor); + } + + @Nullable + public String suggestedName() { + PhpTestRunnerSettings runner = this.getSettings().getRunnerSettings(); + Scope scope = runner.getScope(); + switch(scope) { + case Directory: + return PathUtil.getFileName(StringUtil.notNullize(runner.getDirectoryPath())); + case File: + return PathUtil.getFileName(StringUtil.notNullize(runner.getFilePath())); + case Method: + StringBuilder builder = new StringBuilder(); + String file = PathUtil.getFileName(StringUtil.notNullize(runner.getFilePath())); + builder.append(file); + builder.append("::"); + builder.append(runner.getMethodName()); + return builder.toString(); + case ConfigurationFile: + return PathUtil.getFileName(StringUtil.notNullize(runner.getConfigurationFilePath())); + default: + assert false : "Unknown scope: " + scope; + + return null; + } + } } diff --git a/src/main/kotlin/com/pestphp/pest/PestUtil.kt b/src/main/kotlin/com/pestphp/pest/PestUtil.kt index 737c9cb6..a14ba333 100644 --- a/src/main/kotlin/com/pestphp/pest/PestUtil.kt +++ b/src/main/kotlin/com/pestphp/pest/PestUtil.kt @@ -47,6 +47,11 @@ fun PsiElement?.getPestTestName(): String? { } } +fun PsiFile.getPestTests(): Set { + return PsiTreeUtil.findChildrenOfType(this, FunctionReference::class.java) + .toSet() +} + fun PsiFile.isPestTestFile(): Boolean { return when (this) { is PhpFile -> { diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestLocationProvider.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestLocationProvider.kt new file mode 100644 index 00000000..5f81889d --- /dev/null +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestLocationProvider.kt @@ -0,0 +1,72 @@ +package com.pestphp.pest.configuration + +import com.intellij.execution.Location +import com.intellij.execution.testframework.sm.runner.SMTestLocator +import com.intellij.openapi.project.Project +import com.intellij.openapi.vfs.VirtualFile +import com.intellij.psi.PsiElement +import com.intellij.psi.PsiManager +import com.intellij.psi.search.GlobalSearchScope +import com.jetbrains.php.lang.psi.PhpFile +import com.jetbrains.php.phpunit.PhpPsiLocationWithDataSet +import com.jetbrains.php.util.pathmapper.PhpPathMapper +import com.pestphp.pest.getPestTestName +import com.pestphp.pest.getPestTests +import com.pestphp.pest.runner.LocationInfo + +class PestLocationProvider : SMTestLocator { + private val protocolId = "pest_qn" + + override fun getLocation( + protocol: String, + path: String, + project: Project, + scope: GlobalSearchScope + ): MutableList> { + if (protocol != protocolId) { + return mutableListOf() + } + + val locationInfo = getLocationInfo(path) + val element = locationInfo?.let { findElement(it, project) } ?: return mutableListOf() + + return mutableListOf( + PhpPsiLocationWithDataSet( + project, + element, + getDataSet(locationInfo) + ) + ) + } + + private fun getDataSet(locationInfo: LocationInfo): String? { + return locationInfo.testName + } + + private fun getLocationInfo(link: String): LocationInfo? { + val location = link.split("::") + + if (location.size != 2) { + return null + } + + val file = PhpPathMapper.create().getLocalFile(location[0]) + val testName = location[1] + + return file?.let { LocationInfo(it, testName) } + } + + private fun findElement(locationInfo: LocationInfo, project: Project): PsiElement? { + return this.getLocation( + project, + locationInfo.file, + locationInfo.testName + ) + } + + private fun getLocation(project: Project, virtualFile: VirtualFile, testName: String): PsiElement? { + val file = PsiManager.getInstance(project).findFile(virtualFile) as? PhpFile ?: return null + + return file.getPestTests().first { it.getPestTestName() == testName } + } +} diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt new file mode 100644 index 00000000..d4e86d69 --- /dev/null +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt @@ -0,0 +1,64 @@ +package com.pestphp.pest.configuration + +import com.intellij.execution.Executor +import com.intellij.execution.configurations.RunProfileState +import com.intellij.execution.process.ProcessListener +import com.intellij.execution.runners.ExecutionEnvironment +import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction +import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties +import com.intellij.openapi.project.Project +import com.intellij.openapi.ui.ComponentContainer +import com.jetbrains.php.config.commandLine.PhpCommandSettings +import com.jetbrains.php.config.interpreters.PhpInterpreter +import com.jetbrains.php.testFramework.PhpTestFrameworkSettingsManager +import com.pestphp.pest.PestFrameworkType + +class PestRerunFailedTestsAction( + componentContainer: ComponentContainer, + properties: SMTRunnerConsoleProperties? +) : AbstractRerunFailedTestsAction(componentContainer) { + override fun getRunProfile(environment: ExecutionEnvironment): MyRunProfile? { + val profile = myConsoleProperties.configuration + + if (profile !is PestRunConfiguration) { + return null + } + + val runConfiguration: PestRunConfiguration = profile + return object : MyRunProfile(runConfiguration) { + override fun getState(executor: Executor, environment: ExecutionEnvironment): RunProfileState? { + val runConfiguration: PestRunConfiguration = this.peer as PestRunConfiguration + val project: Project = runConfiguration.project + val interpreter: PhpInterpreter = runConfiguration.interpreter + if ( + PhpTestFrameworkSettingsManager.getInstance(project).getConfigByInterpreter( + PestFrameworkType.getInstance(), + interpreter + ) == null + ) { + return null + } + + val failed = this@PestRerunFailedTestsAction.getFailedTests(project) + .filter { it.isLeaf } + .filter { it.parent != null } + // .map { it.getLocation(project, GlobalSearchScope.allScope(project)) } + + val clone: PestRunConfiguration = runConfiguration.clone() as PestRunConfiguration + clone.settings.workingDirectory = null + val command: PhpCommandSettings = clone.createCommand( + interpreter, + mapOf(), + listOf(), + false + ) + + return runConfiguration.getState(environment, command, null as ProcessListener?) + } + } + } + + init { + init(properties) + } +} diff --git a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEnabledConfiguration.kt b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEnabledConfiguration.kt new file mode 100644 index 00000000..0bc72682 --- /dev/null +++ b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEnabledConfiguration.kt @@ -0,0 +1,18 @@ +package com.pestphp.pest.coverage + +import com.intellij.coverage.CoverageRunner +import com.intellij.execution.configurations.coverage.CoverageEnabledConfiguration +import com.jetbrains.php.phpunit.coverage.PhpUnitCoverageRunner +import com.pestphp.pest.configuration.PestRunConfiguration + +class PestCoverageEnabledConfiguration( + configuration: PestRunConfiguration +) : CoverageEnabledConfiguration(configuration) { + override fun coverageFileNameSeparator(): String { + return "@" + } + + init { + this.coverageRunner = CoverageRunner.getInstance(PhpUnitCoverageRunner::class.java) + } +} diff --git a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt new file mode 100644 index 00000000..62444936 --- /dev/null +++ b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt @@ -0,0 +1,45 @@ +package com.pestphp.pest.coverage + +import com.intellij.coverage.CoverageFileProvider +import com.intellij.coverage.CoverageRunner +import com.intellij.coverage.CoverageSuite +import com.intellij.execution.configurations.RunConfigurationBase +import com.intellij.execution.configurations.coverage.CoverageEnabledConfiguration +import com.jetbrains.php.phpunit.coverage.PhpUnitCoverageEngine +import com.pestphp.pest.configuration.PestRunConfiguration +import java.util.* + +class PestCoverageEngine : PhpUnitCoverageEngine() { + override fun isApplicableTo(conf: RunConfigurationBase<*>?): Boolean { + return conf is PestRunConfiguration + } + + override fun createCoverageEnabledConfiguration(conf: RunConfigurationBase<*>?): CoverageEnabledConfiguration { + return PestCoverageEnabledConfiguration(conf as PestRunConfiguration) + } + + override fun createCoverageSuite( + covRunner: CoverageRunner, + name: String, + coverageDataFileProvider: CoverageFileProvider, + config: CoverageEnabledConfiguration + ): CoverageSuite? { + if (config is PestCoverageEnabledConfiguration) { + val project = config.getConfiguration().project + return this.createCoverageSuite( + covRunner, + name, + coverageDataFileProvider, + null as Array?, + Date().time, + null as String?, + false, + false, + true, + project + ) + } + + return null + } +} diff --git a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt new file mode 100644 index 00000000..decdde9a --- /dev/null +++ b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt @@ -0,0 +1,49 @@ +package com.pestphp.pest.coverage + +import com.intellij.execution.configurations.RunProfile +import com.intellij.execution.configurations.RunProfileState +import com.intellij.execution.runners.ExecutionEnvironment +import com.jetbrains.php.config.commandLine.PhpCommandSettingsBuilder +import com.jetbrains.php.config.interpreters.PhpInterpreter +import com.jetbrains.php.phpunit.coverage.PhpCoverageRunner +import com.jetbrains.php.phpunit.coverage.PhpUntCoverageProgramRunner +import com.jetbrains.php.run.PhpRunConfigurationHolder +import com.pestphp.pest.configuration.PestRunConfiguration +import com.pestphp.pest.configuration.PestRunConfigurationSettings +import java.util.* + +class PestCoverageProgramRunner : PhpCoverageRunner() { + override fun canRun(executorId: String, profile: RunProfile): Boolean { + return executorId == "Coverage" && profile is PestRunConfiguration + } + + override fun createCoverageArguments(targetCoverage: String?): MutableList { + val coverageArguments: ArrayList = ArrayList() + coverageArguments.add("--coverage-clover") + targetCoverage?.let { coverageArguments.add(it) } + + return coverageArguments + } + + override fun getRunnerId(): String { + return "PestCoverageRunner" + } + + override fun createState( + env: ExecutionEnvironment, + interpreter: PhpInterpreter, + runConfigurationHolder: PhpRunConfigurationHolder<*>, + coverageArguments: MutableList, + localCoverage: String, + targetCoverage: String + ): RunProfileState { + val runConfiguration = runConfigurationHolder.runConfiguration as PestRunConfiguration + val settings = runConfigurationHolder.settings as PestRunConfigurationSettings + val project = env.project + + val command = PhpCommandSettingsBuilder(project, interpreter).loadAndStartDebug(true).build() + + setAdditionalMapping(localCoverage, targetCoverage, command) + return runConfiguration.checkAndGetState(env, command) + } +} diff --git a/src/main/kotlin/com/pestphp/pest/runner/LocationInfo.kt b/src/main/kotlin/com/pestphp/pest/runner/LocationInfo.kt new file mode 100644 index 00000000..b18901b7 --- /dev/null +++ b/src/main/kotlin/com/pestphp/pest/runner/LocationInfo.kt @@ -0,0 +1,8 @@ +package com.pestphp.pest.runner + +import com.intellij.openapi.vfs.VirtualFile + +class LocationInfo( + val file: VirtualFile, + val testName: String +) diff --git a/src/main/kotlin/com/pestphp/pest/runner/PestConsoleProperties.kt b/src/main/kotlin/com/pestphp/pest/runner/PestConsoleProperties.kt new file mode 100644 index 00000000..b0dc7477 --- /dev/null +++ b/src/main/kotlin/com/pestphp/pest/runner/PestConsoleProperties.kt @@ -0,0 +1,35 @@ +package com.pestphp.pest.runner + +import com.intellij.execution.Executor +import com.intellij.execution.configurations.RunConfiguration +import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction +import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties +import com.intellij.execution.testframework.sm.runner.SMTestLocator +import com.intellij.execution.ui.ConsoleView +import com.intellij.openapi.project.Project +import com.intellij.pom.Navigatable +import com.pestphp.pest.PestBundle +import com.pestphp.pest.configuration.PestLocationProvider +import com.pestphp.pest.configuration.PestRerunFailedTestsAction + +class PestConsoleProperties(config: RunConfiguration, executor: Executor) : + SMTRunnerConsoleProperties(config, PestBundle.message("FRAMEWORK_NAME"), executor) { + + private val testLocator = PestLocationProvider() + + override fun getTestLocator(): SMTestLocator? { + return testLocator + } + + override fun createRerunFailedTestsAction(consoleView: ConsoleView?): AbstractRerunFailedTestsAction? { + return consoleView?.let { PestRerunFailedTestsAction(it, this) } + } + + override fun serviceMessageHasNewLinePrefix(): Boolean { + return true + } + + override fun getErrorNavigatable(project: Project, stacktrace: String): Navigatable? { + return super.getErrorNavigatable(project, stacktrace) + } +} diff --git a/src/main/resources/META-INF/pest-coverage.xml b/src/main/resources/META-INF/pest-coverage.xml new file mode 100644 index 00000000..3980b6a4 --- /dev/null +++ b/src/main/resources/META-INF/pest-coverage.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/src/main/resources/META-INF/plugin.xml b/src/main/resources/META-INF/plugin.xml index 32543040..af24fc86 100644 --- a/src/main/resources/META-INF/plugin.xml +++ b/src/main/resources/META-INF/plugin.xml @@ -7,6 +7,7 @@ on how to target different products --> com.intellij.modules.platform com.jetbrains.php + com.intellij.modules.coverage Date: Fri, 31 Jul 2020 10:27:01 +0200 Subject: [PATCH 02/10] feat(runner): Add coverage and rerun support --- .../com/pestphp/pest/PestFunctionsUtil.kt | 6 +++++ .../configuration/PestLocationProvider.kt | 24 +++++++++++-------- .../PestRerunFailedTestsAction.kt | 20 +++++++++++++--- .../PestRunConfigurationHandler.kt | 9 +++++++ .../coverage/PestCoverageProgramRunner.kt | 10 ++++++-- .../com/pestphp/pest/runner/LocationInfo.kt | 2 +- .../pest/tests/PestIconProviderTest.kt | 4 ++-- 7 files changed, 57 insertions(+), 18 deletions(-) diff --git a/src/main/kotlin/com/pestphp/pest/PestFunctionsUtil.kt b/src/main/kotlin/com/pestphp/pest/PestFunctionsUtil.kt index 9b3c2c0a..532b8021 100644 --- a/src/main/kotlin/com/pestphp/pest/PestFunctionsUtil.kt +++ b/src/main/kotlin/com/pestphp/pest/PestFunctionsUtil.kt @@ -1,6 +1,8 @@ package com.pestphp.pest import com.intellij.psi.PsiElement +import com.intellij.psi.PsiFile +import com.intellij.psi.util.PsiTreeUtil import com.jetbrains.php.lang.psi.elements.FunctionReference import com.jetbrains.php.lang.psi.elements.MethodReference import com.jetbrains.php.lang.psi.elements.StringLiteralExpression @@ -54,3 +56,7 @@ fun PsiElement?.getPestTestName(): String? { else -> null } } + +fun PsiFile.getPestTests(): Set { + return PsiTreeUtil.findChildrenOfType(this, FunctionReference::class.java).toSet() +} diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestLocationProvider.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestLocationProvider.kt index 5f81889d..97bbffe4 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestLocationProvider.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestLocationProvider.kt @@ -9,7 +9,7 @@ import com.intellij.psi.PsiManager import com.intellij.psi.search.GlobalSearchScope import com.jetbrains.php.lang.psi.PhpFile import com.jetbrains.php.phpunit.PhpPsiLocationWithDataSet -import com.jetbrains.php.util.pathmapper.PhpPathMapper +import com.jetbrains.php.util.pathmapper.PhpLocalPathMapper import com.pestphp.pest.getPestTestName import com.pestphp.pest.getPestTests import com.pestphp.pest.runner.LocationInfo @@ -27,7 +27,7 @@ class PestLocationProvider : SMTestLocator { return mutableListOf() } - val locationInfo = getLocationInfo(path) + val locationInfo = getLocationInfo(path, project) val element = locationInfo?.let { findElement(it, project) } ?: return mutableListOf() return mutableListOf( @@ -43,16 +43,16 @@ class PestLocationProvider : SMTestLocator { return locationInfo.testName } - private fun getLocationInfo(link: String): LocationInfo? { + private fun getLocationInfo(link: String, project: Project): LocationInfo? { val location = link.split("::") - if (location.size != 2) { - return null + val file = PhpLocalPathMapper(project).getLocalFile(location[0]) + + if (location.size == 1) { + return file?.let { LocationInfo(it, null) } } - val file = PhpPathMapper.create().getLocalFile(location[0]) val testName = location[1] - return file?.let { LocationInfo(it, testName) } } @@ -64,9 +64,13 @@ class PestLocationProvider : SMTestLocator { ) } - private fun getLocation(project: Project, virtualFile: VirtualFile, testName: String): PsiElement? { - val file = PsiManager.getInstance(project).findFile(virtualFile) as? PhpFile ?: return null + private fun getLocation(project: Project, virtualFile: VirtualFile, testName: String?): PsiElement? { + val file = PsiManager.getInstance(project).findFile(virtualFile) ?: return null + + if (testName == null) { + return file + } - return file.getPestTests().first { it.getPestTestName() == testName } + return (file as PhpFile).getPestTests().first { it.getPestTestName() == testName } } } diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt index d4e86d69..2cc3013e 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt @@ -8,10 +8,12 @@ import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsActi import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties import com.intellij.openapi.project.Project import com.intellij.openapi.ui.ComponentContainer +import com.intellij.psi.search.GlobalSearchScope import com.jetbrains.php.config.commandLine.PhpCommandSettings import com.jetbrains.php.config.interpreters.PhpInterpreter import com.jetbrains.php.testFramework.PhpTestFrameworkSettingsManager import com.pestphp.pest.PestFrameworkType +import com.pestphp.pest.getPestTestName class PestRerunFailedTestsAction( componentContainer: ComponentContainer, @@ -42,10 +44,13 @@ class PestRerunFailedTestsAction( val failed = this@PestRerunFailedTestsAction.getFailedTests(project) .filter { it.isLeaf } .filter { it.parent != null } - // .map { it.getLocation(project, GlobalSearchScope.allScope(project)) } + .map { it.getLocation(project, GlobalSearchScope.allScope(project)) } + .mapNotNull { it.psiElement.getPestTestName() } val clone: PestRunConfiguration = runConfiguration.clone() as PestRunConfiguration - clone.settings.workingDirectory = null + + clone.settings.runnerSettings.directoryPath = null + clone.settings.runnerSettings.filePath = null val command: PhpCommandSettings = clone.createCommand( interpreter, mapOf(), @@ -53,7 +58,16 @@ class PestRerunFailedTestsAction( false ) - return runConfiguration.getState(environment, command, null as ProcessListener?) + command.addArgument(String.format( + "--filter=/%s$/", + failed.reduce { result, testName -> result + '|' + testName.replace(" ", "\\s")} + )) + + return runConfiguration.getState( + environment, + command, + null as ProcessListener? + ) } } } diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationHandler.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationHandler.kt index 2de9e2af..76f261e2 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationHandler.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationHandler.kt @@ -40,6 +40,9 @@ class PestRunConfigurationHandler : PhpTestRunConfigurationHandler { directory: String, workingDirectory: String ) { + if (directory.isEmpty()) { + return + } phpCommandSettings.addPathArgument(directory) } @@ -49,6 +52,9 @@ class PestRunConfigurationHandler : PhpTestRunConfigurationHandler { file: String, workingDirectory: String ) { + if (file.isEmpty()) { + return + } phpCommandSettings.addPathArgument(file) } @@ -59,6 +65,9 @@ class PestRunConfigurationHandler : PhpTestRunConfigurationHandler { methodName: String, workingDirectory: String ) { + if (file.isEmpty()) { + return + } phpCommandSettings.addPathArgument(file) phpCommandSettings.addArgument(String.format("--filter=/%s$/", methodName.replace(" ", "\\s"))) } diff --git a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt index decdde9a..5eeb79ca 100644 --- a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt +++ b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt @@ -6,7 +6,6 @@ import com.intellij.execution.runners.ExecutionEnvironment import com.jetbrains.php.config.commandLine.PhpCommandSettingsBuilder import com.jetbrains.php.config.interpreters.PhpInterpreter import com.jetbrains.php.phpunit.coverage.PhpCoverageRunner -import com.jetbrains.php.phpunit.coverage.PhpUntCoverageProgramRunner import com.jetbrains.php.run.PhpRunConfigurationHolder import com.pestphp.pest.configuration.PestRunConfiguration import com.pestphp.pest.configuration.PestRunConfigurationSettings @@ -41,7 +40,14 @@ class PestCoverageProgramRunner : PhpCoverageRunner() { val settings = runConfigurationHolder.settings as PestRunConfigurationSettings val project = env.project - val command = PhpCommandSettingsBuilder(project, interpreter).loadAndStartDebug(true).build() + val command = runConfiguration.createCommand( + interpreter, + mapOf(), + listOf(), + true + ) + + command.addArguments(coverageArguments) setAdditionalMapping(localCoverage, targetCoverage, command) return runConfiguration.checkAndGetState(env, command) diff --git a/src/main/kotlin/com/pestphp/pest/runner/LocationInfo.kt b/src/main/kotlin/com/pestphp/pest/runner/LocationInfo.kt index b18901b7..3cdfb6ca 100644 --- a/src/main/kotlin/com/pestphp/pest/runner/LocationInfo.kt +++ b/src/main/kotlin/com/pestphp/pest/runner/LocationInfo.kt @@ -4,5 +4,5 @@ import com.intellij.openapi.vfs.VirtualFile class LocationInfo( val file: VirtualFile, - val testName: String + val testName: String? ) diff --git a/src/test/kotlin/com/pestphp/pest/tests/PestIconProviderTest.kt b/src/test/kotlin/com/pestphp/pest/tests/PestIconProviderTest.kt index bd973be9..d21ce1a0 100644 --- a/src/test/kotlin/com/pestphp/pest/tests/PestIconProviderTest.kt +++ b/src/test/kotlin/com/pestphp/pest/tests/PestIconProviderTest.kt @@ -6,7 +6,7 @@ import com.pestphp.pest.PestIcons import junit.framework.TestCase import kotlin.test.assertNotEquals -class PestIconProviderTest: PestLightCodeFixture() { +class PestIconProviderTest : PestLightCodeFixture() { override fun setUp() { super.setUp() @@ -34,4 +34,4 @@ class PestIconProviderTest: PestLightCodeFixture() { PestIconProvider().getIcon(file, ICON_FLAG_VISIBILITY) ) } -} \ No newline at end of file +} From 50fe6ecabbc2ba777b2ecf7d7ca5063efa5733cb Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Fri, 31 Jul 2020 10:32:19 +0200 Subject: [PATCH 03/10] style(runner): Fix styling issues --- .../pest/configuration/PestRerunFailedTestsAction.kt | 7 +++---- .../kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt | 2 +- .../com/pestphp/pest/coverage/PestCoverageProgramRunner.kt | 5 ----- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt index 2cc3013e..0b3f8971 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt @@ -58,10 +58,9 @@ class PestRerunFailedTestsAction( false ) - command.addArgument(String.format( - "--filter=/%s$/", - failed.reduce { result, testName -> result + '|' + testName.replace(" ", "\\s")} - )) + command.addArgument( + "--filter=/${failed.reduce { result, testName -> result + '|' + testName.replace(" ", "\\s") }}$/" + ) return runConfiguration.getState( environment, diff --git a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt index 62444936..8535e6ba 100644 --- a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt +++ b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageEngine.kt @@ -7,7 +7,7 @@ import com.intellij.execution.configurations.RunConfigurationBase import com.intellij.execution.configurations.coverage.CoverageEnabledConfiguration import com.jetbrains.php.phpunit.coverage.PhpUnitCoverageEngine import com.pestphp.pest.configuration.PestRunConfiguration -import java.util.* +import java.util.Date class PestCoverageEngine : PhpUnitCoverageEngine() { override fun isApplicableTo(conf: RunConfigurationBase<*>?): Boolean { diff --git a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt index 5eeb79ca..926172aa 100644 --- a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt +++ b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt @@ -3,13 +3,10 @@ package com.pestphp.pest.coverage import com.intellij.execution.configurations.RunProfile import com.intellij.execution.configurations.RunProfileState import com.intellij.execution.runners.ExecutionEnvironment -import com.jetbrains.php.config.commandLine.PhpCommandSettingsBuilder import com.jetbrains.php.config.interpreters.PhpInterpreter import com.jetbrains.php.phpunit.coverage.PhpCoverageRunner import com.jetbrains.php.run.PhpRunConfigurationHolder import com.pestphp.pest.configuration.PestRunConfiguration -import com.pestphp.pest.configuration.PestRunConfigurationSettings -import java.util.* class PestCoverageProgramRunner : PhpCoverageRunner() { override fun canRun(executorId: String, profile: RunProfile): Boolean { @@ -37,8 +34,6 @@ class PestCoverageProgramRunner : PhpCoverageRunner() { targetCoverage: String ): RunProfileState { val runConfiguration = runConfigurationHolder.runConfiguration as PestRunConfiguration - val settings = runConfigurationHolder.settings as PestRunConfigurationSettings - val project = env.project val command = runConfiguration.createCommand( interpreter, From 0ab2371a28f2d4a093444119ad90ab6ecdcc3d57 Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Fri, 31 Jul 2020 10:44:45 +0200 Subject: [PATCH 04/10] chore(runner): New version --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index cee96c99..18eb2773 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ pluginGroup = com.pestphp pluginName = Pest -pluginVersion = 0.2.1-alpha.4 +pluginVersion = 0.2.1-alpha.5 pluginSinceBuild = 201 pluginUntilBuild = null From 5334adc7f8c033e38b57675b2d8ed522fc23cd2f Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Fri, 31 Jul 2020 11:00:41 +0200 Subject: [PATCH 05/10] style(runner): Remove shadowing --- .../pest/configuration/PestRerunFailedTestsAction.kt | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt index 0b3f8971..c72cfd3d 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt @@ -6,11 +6,9 @@ import com.intellij.execution.process.ProcessListener import com.intellij.execution.runners.ExecutionEnvironment import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties -import com.intellij.openapi.project.Project import com.intellij.openapi.ui.ComponentContainer import com.intellij.psi.search.GlobalSearchScope import com.jetbrains.php.config.commandLine.PhpCommandSettings -import com.jetbrains.php.config.interpreters.PhpInterpreter import com.jetbrains.php.testFramework.PhpTestFrameworkSettingsManager import com.pestphp.pest.PestFrameworkType import com.pestphp.pest.getPestTestName @@ -29,9 +27,9 @@ class PestRerunFailedTestsAction( val runConfiguration: PestRunConfiguration = profile return object : MyRunProfile(runConfiguration) { override fun getState(executor: Executor, environment: ExecutionEnvironment): RunProfileState? { - val runConfiguration: PestRunConfiguration = this.peer as PestRunConfiguration - val project: Project = runConfiguration.project - val interpreter: PhpInterpreter = runConfiguration.interpreter + val peerRunConfiguration = this.peer as PestRunConfiguration + val project = peerRunConfiguration.project + val interpreter = peerRunConfiguration.interpreter if ( PhpTestFrameworkSettingsManager.getInstance(project).getConfigByInterpreter( PestFrameworkType.getInstance(), @@ -47,7 +45,7 @@ class PestRerunFailedTestsAction( .map { it.getLocation(project, GlobalSearchScope.allScope(project)) } .mapNotNull { it.psiElement.getPestTestName() } - val clone: PestRunConfiguration = runConfiguration.clone() as PestRunConfiguration + val clone: PestRunConfiguration = peerRunConfiguration.clone() as PestRunConfiguration clone.settings.runnerSettings.directoryPath = null clone.settings.runnerSettings.filePath = null @@ -62,7 +60,7 @@ class PestRerunFailedTestsAction( "--filter=/${failed.reduce { result, testName -> result + '|' + testName.replace(" ", "\\s") }}$/" ) - return runConfiguration.getState( + return peerRunConfiguration.getState( environment, command, null as ProcessListener? From 6f77c975a1aa8e2e714bdbda11a4d3f146ea6303 Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Sat, 1 Aug 2020 10:37:52 +0200 Subject: [PATCH 06/10] Rename .java to .kt --- .../PestBundle.java => kotlin/com/pestphp/pest/PestBundle.kt} | 0 .../com/pestphp/pest/PestComposerConfig.kt} | 0 .../com/pestphp/pest/PestFrameworkType.kt} | 0 .../pest/PestIcons.java => kotlin/com/pestphp/pest/PestIcons.kt} | 0 .../com/pestphp/pest/configuration/PestRunConfiguration.kt} | 0 .../pestphp/pest/configuration/PestRunConfigurationSettings.kt} | 0 .../com/pestphp/pest/configuration/PestRunConfigurationType.kt} | 0 .../com/pestphp/pest/configuration/PestRunnerSettings.kt} | 0 .../com/pestphp/pest/configuration/PestVersionDetector.kt} | 0 9 files changed, 0 insertions(+), 0 deletions(-) rename src/main/{java/com/pestphp/pest/PestBundle.java => kotlin/com/pestphp/pest/PestBundle.kt} (100%) rename src/main/{java/com/pestphp/pest/PestComposerConfig.java => kotlin/com/pestphp/pest/PestComposerConfig.kt} (100%) rename src/main/{java/com/pestphp/pest/PestFrameworkType.java => kotlin/com/pestphp/pest/PestFrameworkType.kt} (100%) rename src/main/{java/com/pestphp/pest/PestIcons.java => kotlin/com/pestphp/pest/PestIcons.kt} (100%) rename src/main/{java/com/pestphp/pest/configuration/PestRunConfiguration.java => kotlin/com/pestphp/pest/configuration/PestRunConfiguration.kt} (100%) rename src/main/{java/com/pestphp/pest/configuration/PestRunConfigurationSettings.java => kotlin/com/pestphp/pest/configuration/PestRunConfigurationSettings.kt} (100%) rename src/main/{java/com/pestphp/pest/configuration/PestRunConfigurationType.java => kotlin/com/pestphp/pest/configuration/PestRunConfigurationType.kt} (100%) rename src/main/{java/com/pestphp/pest/configuration/PestRunnerSettings.java => kotlin/com/pestphp/pest/configuration/PestRunnerSettings.kt} (100%) rename src/main/{java/com/pestphp/pest/configuration/PestVersionDetector.java => kotlin/com/pestphp/pest/configuration/PestVersionDetector.kt} (100%) diff --git a/src/main/java/com/pestphp/pest/PestBundle.java b/src/main/kotlin/com/pestphp/pest/PestBundle.kt similarity index 100% rename from src/main/java/com/pestphp/pest/PestBundle.java rename to src/main/kotlin/com/pestphp/pest/PestBundle.kt diff --git a/src/main/java/com/pestphp/pest/PestComposerConfig.java b/src/main/kotlin/com/pestphp/pest/PestComposerConfig.kt similarity index 100% rename from src/main/java/com/pestphp/pest/PestComposerConfig.java rename to src/main/kotlin/com/pestphp/pest/PestComposerConfig.kt diff --git a/src/main/java/com/pestphp/pest/PestFrameworkType.java b/src/main/kotlin/com/pestphp/pest/PestFrameworkType.kt similarity index 100% rename from src/main/java/com/pestphp/pest/PestFrameworkType.java rename to src/main/kotlin/com/pestphp/pest/PestFrameworkType.kt diff --git a/src/main/java/com/pestphp/pest/PestIcons.java b/src/main/kotlin/com/pestphp/pest/PestIcons.kt similarity index 100% rename from src/main/java/com/pestphp/pest/PestIcons.java rename to src/main/kotlin/com/pestphp/pest/PestIcons.kt diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfiguration.kt similarity index 100% rename from src/main/java/com/pestphp/pest/configuration/PestRunConfiguration.java rename to src/main/kotlin/com/pestphp/pest/configuration/PestRunConfiguration.kt diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationSettings.java b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationSettings.kt similarity index 100% rename from src/main/java/com/pestphp/pest/configuration/PestRunConfigurationSettings.java rename to src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationSettings.kt diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunConfigurationType.java b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationType.kt similarity index 100% rename from src/main/java/com/pestphp/pest/configuration/PestRunConfigurationType.java rename to src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationType.kt diff --git a/src/main/java/com/pestphp/pest/configuration/PestRunnerSettings.java b/src/main/kotlin/com/pestphp/pest/configuration/PestRunnerSettings.kt similarity index 100% rename from src/main/java/com/pestphp/pest/configuration/PestRunnerSettings.java rename to src/main/kotlin/com/pestphp/pest/configuration/PestRunnerSettings.kt diff --git a/src/main/java/com/pestphp/pest/configuration/PestVersionDetector.java b/src/main/kotlin/com/pestphp/pest/configuration/PestVersionDetector.kt similarity index 100% rename from src/main/java/com/pestphp/pest/configuration/PestVersionDetector.java rename to src/main/kotlin/com/pestphp/pest/configuration/PestVersionDetector.kt From 83de67fb66ceef1f1f162442cb4f98b5cdbce4ad Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Sat, 1 Aug 2020 10:37:53 +0200 Subject: [PATCH 07/10] refactor(runner): Refactor to kotlin --- .../PhpTestRunConfiguration.java | 23 +++ .../kotlin/com/pestphp/pest/PestBundle.kt | 41 +--- .../com/pestphp/pest/PestComposerConfig.kt | 29 ++- .../com/pestphp/pest/PestFrameworkType.kt | 54 +++-- src/main/kotlin/com/pestphp/pest/PestIcons.kt | 16 +- src/main/kotlin/com/pestphp/pest/PestUtil.kt | 2 +- .../PestRerunFailedTestsAction.kt | 2 +- .../configuration/PestRunConfiguration.kt | 193 +++++++++--------- .../PestRunConfigurationProducer.kt | 2 +- .../PestRunConfigurationSettings.kt | 9 +- .../configuration/PestRunConfigurationType.kt | 45 ++-- .../pest/configuration/PestRunnerSettings.kt | 5 +- .../pest/configuration/PestVersionDetector.kt | 39 ++-- .../coverage/PestCoverageProgramRunner.kt | 2 +- 14 files changed, 219 insertions(+), 243 deletions(-) create mode 100644 src/main/java/com/pestphp/pest/configuration/PhpTestRunConfiguration.java diff --git a/src/main/java/com/pestphp/pest/configuration/PhpTestRunConfiguration.java b/src/main/java/com/pestphp/pest/configuration/PhpTestRunConfiguration.java new file mode 100644 index 00000000..7fd991cc --- /dev/null +++ b/src/main/java/com/pestphp/pest/configuration/PhpTestRunConfiguration.java @@ -0,0 +1,23 @@ +package com.pestphp.pest.configuration; + +import com.intellij.execution.configurations.ConfigurationFactory; +import com.intellij.openapi.project.Project; +import com.jetbrains.php.PhpTestFrameworkVersionDetector; +import com.jetbrains.php.testFramework.PhpTestFrameworkType; +import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationHandler; +import com.jetbrains.php.testFramework.run.PhpTestRunnerSettingsValidator; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.util.List; + +public abstract class PhpTestRunConfiguration extends com.jetbrains.php.testFramework.run.PhpTestRunConfiguration { + protected PhpTestRunConfiguration(Project project, ConfigurationFactory factory, String name, @NotNull PhpTestFrameworkType frameworkType, @NotNull PhpTestRunnerSettingsValidator validator, @NotNull PhpTestRunConfigurationHandler handler, @Nullable PhpTestFrameworkVersionDetector versionDetector) { + super(project, factory, name, frameworkType, validator, handler, versionDetector); + } + + @Override + public void setBeforeRunTasks(@NotNull List value) { + super.setBeforeRunTasks(value); + } +} diff --git a/src/main/kotlin/com/pestphp/pest/PestBundle.kt b/src/main/kotlin/com/pestphp/pest/PestBundle.kt index e6144994..03a0d114 100644 --- a/src/main/kotlin/com/pestphp/pest/PestBundle.kt +++ b/src/main/kotlin/com/pestphp/pest/PestBundle.kt @@ -1,33 +1,14 @@ -package com.pestphp.pest; +package com.pestphp.pest -import com.intellij.AbstractBundle; -import com.intellij.reference.SoftReference; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.PropertyKey; +import com.intellij.AbstractBundle +import org.jetbrains.annotations.NonNls +import org.jetbrains.annotations.PropertyKey -import java.lang.ref.Reference; -import java.util.ResourceBundle; +@NonNls +private const val BUNDLE = "pestBundle" -public class PestBundle { - private static Reference ourBundle; - @NonNls - public static final String BUNDLE = "pestBundle"; - - public static String message(@NotNull @PropertyKey(resourceBundle = BUNDLE) String key, @NotNull Object... params) { - return AbstractBundle.message(getBundle(), key, params); - } - - private PestBundle() { - } - - private static ResourceBundle getBundle() { - ResourceBundle bundle = SoftReference.dereference(ourBundle); - if (bundle == null) { - bundle = ResourceBundle.getBundle(BUNDLE); - ourBundle = new SoftReference<>(bundle); - } - - return bundle; - } -} \ No newline at end of file +object PestBundle : AbstractBundle(BUNDLE) { + @Suppress("SpreadOperator") + @JvmStatic + fun message(@PropertyKey(resourceBundle = BUNDLE) key: String, vararg params: Any) = getMessage(key, *params) +} diff --git a/src/main/kotlin/com/pestphp/pest/PestComposerConfig.kt b/src/main/kotlin/com/pestphp/pest/PestComposerConfig.kt index cd6852d3..00b0a103 100644 --- a/src/main/kotlin/com/pestphp/pest/PestComposerConfig.kt +++ b/src/main/kotlin/com/pestphp/pest/PestComposerConfig.kt @@ -1,25 +1,20 @@ -package com.pestphp.pest; +package com.pestphp.pest -import com.intellij.execution.configurations.ConfigurationType; -import com.jetbrains.php.testFramework.PhpTestFrameworkComposerConfig; -import com.pestphp.pest.configuration.PestRunConfigurationType; -import org.jetbrains.annotations.NotNull; +import com.intellij.execution.configurations.ConfigurationType +import com.jetbrains.php.testFramework.PhpTestFrameworkComposerConfig +import com.pestphp.pest.configuration.PestRunConfigurationType.Companion.instance -public class PestComposerConfig extends PhpTestFrameworkComposerConfig { - private static final String PACKAGE = "pestphp/pest"; - private static final String RELATIVE_PATH = "pestphp/pest/bin/pest"; - - public PestComposerConfig() { - super(PestFrameworkType.getInstance(), PACKAGE, RELATIVE_PATH); +class PestComposerConfig : PhpTestFrameworkComposerConfig(PestFrameworkType.instance, PACKAGE, RELATIVE_PATH) { + override fun getDefaultConfigName(): String { + return "phpunit.xml" } - @Override - protected @NotNull String getDefaultConfigName() { - return "phpunit.xml"; + override fun getConfigurationType(): ConfigurationType { + return instance } - @Override - protected @NotNull ConfigurationType getConfigurationType() { - return PestRunConfigurationType.getInstance(); + companion object { + private const val PACKAGE = "pestphp/pest" + private const val RELATIVE_PATH = "pestphp/pest/bin/pest" } } diff --git a/src/main/kotlin/com/pestphp/pest/PestFrameworkType.kt b/src/main/kotlin/com/pestphp/pest/PestFrameworkType.kt index bc9c0a2a..0e8cb4dc 100644 --- a/src/main/kotlin/com/pestphp/pest/PestFrameworkType.kt +++ b/src/main/kotlin/com/pestphp/pest/PestFrameworkType.kt @@ -1,41 +1,33 @@ -package com.pestphp.pest; - -import com.jetbrains.php.testFramework.PhpTestFrameworkFormDecorator; -import com.jetbrains.php.testFramework.PhpTestFrameworkFormDecorator.PhpDownloadableTestFormDecorator; -import com.jetbrains.php.testFramework.PhpTestFrameworkType; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NonNls; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import javax.swing.*; - -public class PestFrameworkType extends PhpTestFrameworkType { - @NonNls - public static final String ID = "Pest"; - - @NotNull - public static PhpTestFrameworkType getInstance() { - return PhpTestFrameworkType.getTestFrameworkType(ID); +package com.pestphp.pest + +import com.jetbrains.php.testFramework.PhpTestFrameworkFormDecorator +import com.jetbrains.php.testFramework.PhpTestFrameworkFormDecorator.PhpDownloadableTestFormDecorator +import com.jetbrains.php.testFramework.PhpTestFrameworkType +import org.jetbrains.annotations.Nls +import org.jetbrains.annotations.NonNls +import javax.swing.Icon + +class PestFrameworkType : PhpTestFrameworkType() { + override fun getDisplayName(): @Nls String { + return PestBundle.message("FRAMEWORK_NAME") } - @Override - public @NotNull @Nls String getDisplayName() { - return PestBundle.message("FRAMEWORK_NAME"); + override fun getID(): String { + return ID } - @Override - public @NotNull String getID() { - return ID; + override fun getIcon(): Icon { + return PestIcons.LOGO } - @Override - public @NotNull Icon getIcon() { - return PestIcons.LOGO; + override fun getDecorator(): PhpTestFrameworkFormDecorator? { + return PhpDownloadableTestFormDecorator("https://github.com/pestphp/pest/releases") } - @Override - public @Nullable PhpTestFrameworkFormDecorator getDecorator() { - return new PhpDownloadableTestFormDecorator("https://github.com/pestphp/pest/releases"); + companion object { + @NonNls + val ID = "Pest" + val instance: PhpTestFrameworkType + get() = getTestFrameworkType(ID) } } diff --git a/src/main/kotlin/com/pestphp/pest/PestIcons.kt b/src/main/kotlin/com/pestphp/pest/PestIcons.kt index 3b272436..6acf59e8 100644 --- a/src/main/kotlin/com/pestphp/pest/PestIcons.kt +++ b/src/main/kotlin/com/pestphp/pest/PestIcons.kt @@ -1,12 +1,10 @@ -package com.pestphp.pest; +package com.pestphp.pest -import com.intellij.openapi.util.IconLoader; +import com.intellij.openapi.util.IconLoader -import javax.swing.*; - -public class PestIcons { - public static final Icon LOGO = IconLoader.getIcon("/logo.svg"); - public static final Icon RUN_SINGLE_TEST = IconLoader.getIcon("/pest-run.svg"); - public static final Icon CONFIG = IconLoader.getIcon("/pest-config.svg"); - public static final Icon FILE = IconLoader.getIcon("/pest-file.svg"); +object PestIcons { + val LOGO = IconLoader.getIcon("/logo.svg") + val RUN_SINGLE_TEST = IconLoader.getIcon("/pest-run.svg") + val CONFIG = IconLoader.getIcon("/pest-config.svg") + val FILE = IconLoader.getIcon("/pest-file.svg") } diff --git a/src/main/kotlin/com/pestphp/pest/PestUtil.kt b/src/main/kotlin/com/pestphp/pest/PestUtil.kt index a82cfa85..2505ff4b 100644 --- a/src/main/kotlin/com/pestphp/pest/PestUtil.kt +++ b/src/main/kotlin/com/pestphp/pest/PestUtil.kt @@ -23,6 +23,6 @@ fun PsiFile.isPestConfigurationFile(): Boolean { fun Project.isPestEnabled(): Boolean { return PhpTestFrameworkSettingsManager .getInstance(this) - .getConfigurations(PestFrameworkType.getInstance()) + .getConfigurations(PestFrameworkType.instance) .any { StringUtil.isNotEmpty(it.executablePath) } } diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt index c72cfd3d..2235c9dd 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt @@ -32,7 +32,7 @@ class PestRerunFailedTestsAction( val interpreter = peerRunConfiguration.interpreter if ( PhpTestFrameworkSettingsManager.getInstance(project).getConfigByInterpreter( - PestFrameworkType.getInstance(), + PestFrameworkType.instance, interpreter ) == null ) { diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfiguration.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfiguration.kt index 9246a5f9..5b3fa873 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfiguration.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfiguration.kt @@ -1,116 +1,115 @@ -package com.pestphp.pest.configuration; +package com.pestphp.pest.configuration -import com.intellij.codeInsight.completion.CompletionResultSet; -import com.intellij.execution.ExecutionException; -import com.intellij.execution.Executor; -import com.intellij.execution.configurations.ConfigurationFactory; -import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.configurations.RunProfileState; -import com.intellij.execution.configurations.RuntimeConfigurationException; -import com.intellij.execution.configurations.RuntimeConfigurationWarning; -import com.intellij.execution.runners.ExecutionEnvironment; -import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction; -import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties; -import com.intellij.execution.ui.ConsoleView; -import com.intellij.openapi.options.SettingsEditor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.util.PathUtil; -import com.intellij.util.TextFieldCompletionProvider; -import com.jetbrains.php.config.commandLine.PhpCommandLinePathProcessor; -import com.jetbrains.php.config.commandLine.PhpCommandSettings; -import com.jetbrains.php.testFramework.run.PhpTestRunConfiguration; -import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationEditor; -import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationSettings; -import com.jetbrains.php.testFramework.run.PhpTestRunnerConfigurationEditor; -import com.jetbrains.php.testFramework.run.PhpTestRunnerSettings; -import com.jetbrains.php.testFramework.run.PhpTestRunnerSettings.Scope; -import com.pestphp.pest.PestFrameworkType; -import com.pestphp.pest.runner.PestConsoleProperties; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; +import com.intellij.codeInsight.completion.CompletionResultSet +import com.intellij.codeInsight.lookup.LookupElementBuilder +import com.intellij.execution.ExecutionException +import com.intellij.execution.Executor +import com.intellij.execution.configurations.ConfigurationFactory +import com.intellij.execution.configurations.RunConfiguration +import com.intellij.execution.configurations.RunProfileState +import com.intellij.execution.configurations.RuntimeConfigurationException +import com.intellij.execution.configurations.RuntimeConfigurationWarning +import com.intellij.execution.runners.ExecutionEnvironment +import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction +import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties +import com.intellij.execution.ui.ConsoleView +import com.intellij.openapi.options.SettingsEditor +import com.intellij.openapi.project.Project +import com.intellij.openapi.util.text.StringUtil +import com.intellij.psi.util.PsiTreeUtil +import com.intellij.util.PathUtil +import com.intellij.util.TextFieldCompletionProvider +import com.jetbrains.php.config.commandLine.PhpCommandSettings +import com.jetbrains.php.lang.psi.elements.impl.FunctionReferenceImpl +import com.jetbrains.php.run.PhpRunUtil +import com.jetbrains.php.testFramework.run.PhpTestRunConfigurationSettings +import com.jetbrains.php.testFramework.run.PhpTestRunnerConfigurationEditor +import com.jetbrains.php.testFramework.run.PhpTestRunnerSettings +import com.pestphp.pest.PestBundle +import com.pestphp.pest.PestFrameworkType +import com.pestphp.pest.configuration.PestRunConfigurationProducer.Companion.VALIDATOR +import com.pestphp.pest.getPestTestName +import com.pestphp.pest.isPestTestFunction +import com.pestphp.pest.PestIcons +import com.pestphp.pest.runner.PestConsoleProperties +import java.util.EnumMap -import java.util.EnumMap; - -public class PestRunConfiguration extends PhpTestRunConfiguration { - protected PestRunConfiguration(Project project, ConfigurationFactory factory, String name) { - super( - project, - factory, - name, - PestFrameworkType.getInstance(), - PestRunConfigurationProducer.Companion.getVALIDATOR(), - PestRunConfigurationHandler.instance, - PestVersionDetector.getInstance() - ); - } - - @NotNull - @Override - protected PhpTestRunConfigurationSettings createSettings() { - return new PestRunConfigurationSettings(); +class PestRunConfiguration(project: Project, factory: ConfigurationFactory) : PhpTestRunConfiguration( + project, + factory, + PestBundle.message("FRAMEWORK_NAME"), + PestFrameworkType.instance, + VALIDATOR, + PestRunConfigurationHandler.instance, + PestVersionDetector.instance +) { + override fun createSettings(): PhpTestRunConfigurationSettings { + return PestRunConfigurationSettings() } - @Override - public @NotNull SettingsEditor getConfigurationEditor() { - EnumMap names = new EnumMap<>(Scope.class); - PhpTestRunConfigurationEditor editor = this.getConfigurationEditor(names); - editor.setRunnerOptionsDocumentation("https://pestphp.com/docs/installation"); - return editor; + override fun getConfigurationEditor(): SettingsEditor { + val names = EnumMap(PhpTestRunnerSettings.Scope::class.java) + val editor = this.getConfigurationEditor(names) + editor.setRunnerOptionsDocumentation("https://pestphp.com/docs/installation") + return editor } - public RunProfileState checkAndGetState(@NotNull ExecutionEnvironment env, @NotNull PhpCommandSettings command) throws ExecutionException { + @Throws(ExecutionException::class) + fun checkAndGetState(env: ExecutionEnvironment, command: PhpCommandSettings): RunProfileState? { try { - this.checkConfiguration(); - } catch (RuntimeConfigurationWarning ignored) { - } catch (RuntimeConfigurationException var5) { - throw new ExecutionException(var5.getMessage() + " for " + this.getName() + " run-configuration"); + checkConfiguration() + } catch (ignored: RuntimeConfigurationWarning) { + } catch (var5: RuntimeConfigurationException) { + throw ExecutionException(var5.message + " for " + this.name + " run-configuration") } - - return this.getState(env, command, null); + return this.getState(env, command, null) } - @Override - protected @NotNull TextFieldCompletionProvider createMethodFieldCompletionProvider(@NotNull PhpTestRunnerConfigurationEditor editor) { - return new TextFieldCompletionProvider() { - @Override - protected void addCompletionVariants(@NotNull String text, int offset, @NotNull String prefix, @NotNull CompletionResultSet result) { - // TODO: add completions to results object. + + override fun createMethodFieldCompletionProvider( + editor: PhpTestRunnerConfigurationEditor + ): TextFieldCompletionProvider { + return object : TextFieldCompletionProvider() { + override fun addCompletionVariants(text: String, offset: Int, prefix: String, result: CompletionResultSet) { + val file = PhpRunUtil.findPsiFile(project, settings.runnerSettings.filePath) + PsiTreeUtil.findChildrenOfType(file, FunctionReferenceImpl::class.java) + .stream().filter(FunctionReferenceImpl::isPestTestFunction) + .map { LookupElementBuilder.create(it.getPestTestName()!!).withIcon(PestIcons.FILE) } + .forEach { result.addElement(it) } } - }; + } } - @Override - protected @Nullable AbstractRerunFailedTestsAction createRerunAction(@NotNull ConsoleView consoleView, @NotNull SMTRunnerConsoleProperties properties) { - return new PestRerunFailedTestsAction(consoleView, properties); + override fun createRerunAction( + consoleView: ConsoleView, + properties: SMTRunnerConsoleProperties + ): AbstractRerunFailedTestsAction? { + return PestRerunFailedTestsAction(consoleView, properties) } - @Override - public @NotNull SMTRunnerConsoleProperties createTestConsoleProperties(@NotNull Executor executor) { - return new PestConsoleProperties(this, executor); + override fun createTestConsoleProperties(executor: Executor): SMTRunnerConsoleProperties { + return PestConsoleProperties(this, executor) } - @Nullable - public String suggestedName() { - PhpTestRunnerSettings runner = this.getSettings().getRunnerSettings(); - Scope scope = runner.getScope(); - switch(scope) { - case Directory: - return PathUtil.getFileName(StringUtil.notNullize(runner.getDirectoryPath())); - case File: - return PathUtil.getFileName(StringUtil.notNullize(runner.getFilePath())); - case Method: - StringBuilder builder = new StringBuilder(); - String file = PathUtil.getFileName(StringUtil.notNullize(runner.getFilePath())); - builder.append(file); - builder.append("::"); - builder.append(runner.getMethodName()); - return builder.toString(); - case ConfigurationFile: - return PathUtil.getFileName(StringUtil.notNullize(runner.getConfigurationFilePath())); - default: - assert false : "Unknown scope: " + scope; - - return null; + override fun suggestedName(): String? { + val runner = this.settings.runnerSettings + return when (val scope = runner.scope) { + PhpTestRunnerSettings.Scope.Directory -> PathUtil.getFileName(StringUtil.notNullize(runner.directoryPath)) + PhpTestRunnerSettings.Scope.File -> PathUtil.getFileName(StringUtil.notNullize(runner.filePath)) + PhpTestRunnerSettings.Scope.Method -> { + val builder = StringBuilder() + val file = PathUtil.getFileName(StringUtil.notNullize(runner.filePath)) + builder.append(file) + builder.append("::") + builder.append(runner.methodName) + builder.toString() + } + PhpTestRunnerSettings.Scope.ConfigurationFile -> PathUtil.getFileName( + StringUtil.notNullize(runner.configurationFilePath) + ) + else -> { + assert(false) { "Unknown scope: $scope" } + null + } } } } diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationProducer.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationProducer.kt index 2049f5a8..671c5d36 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationProducer.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRunConfigurationProducer.kt @@ -26,7 +26,7 @@ class PestRunConfigurationProducer : PhpTestConfigurationProducer PestIcons.CONFIG)); +class PestRunConfigurationType private constructor() : + SimpleConfigurationType( + "PestRunConfigurationType", + PestBundle.message("FRAMEWORK_NAME"), + PestBundle.message("FRAMEWORK_NAME"), + NotNullLazyValue.createValue { PestIcons.CONFIG } + ), + DumbAware { + override fun createTemplateConfiguration(project: Project): RunConfiguration { + return PestRunConfiguration(project, this) } - public static PestRunConfigurationType getInstance() { - return ConfigurationTypeUtil.findConfigurationType(PestRunConfigurationType.class); - } - - @Override - public @NotNull RunConfiguration createTemplateConfiguration(@NotNull Project project) { - return new PestRunConfiguration(project, this, PestBundle.message("FRAMEWORK_NAME")); + companion object { + @JvmStatic + val instance: PestRunConfigurationType + get() = findConfigurationType(PestRunConfigurationType::class.java) } } diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRunnerSettings.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRunnerSettings.kt index 29adc729..15f3d64d 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRunnerSettings.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRunnerSettings.kt @@ -1,4 +1,3 @@ -package com.pestphp.pest.configuration; +package com.pestphp.pest.configuration -public class PestRunnerSettings { -} +class PestRunnerSettings diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestVersionDetector.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestVersionDetector.kt index ff43af91..77f95228 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestVersionDetector.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestVersionDetector.kt @@ -1,33 +1,22 @@ -package com.pestphp.pest.configuration; +package com.pestphp.pest.configuration -import com.intellij.openapi.diagnostic.Logger; -import com.jetbrains.php.PhpTestFrameworkVersionDetector; -import com.pestphp.pest.PestBundle; -import org.jetbrains.annotations.Nls; -import org.jetbrains.annotations.NotNull; +import com.intellij.openapi.diagnostic.Logger +import com.jetbrains.php.PhpTestFrameworkVersionDetector +import com.pestphp.pest.PestBundle +import org.jetbrains.annotations.Nls -public class PestVersionDetector extends PhpTestFrameworkVersionDetector { - private static final Logger LOG = Logger.getInstance(PestVersionDetector.class); - private static PestVersionDetector myInstance; - - - public static PestVersionDetector getInstance() { - if (myInstance == null) { - myInstance = new PestVersionDetector(); - } - - return myInstance; +class PestVersionDetector : PhpTestFrameworkVersionDetector() { + override fun getPresentableName(): @Nls String { + return PestBundle.message("FRAMEWORK_NAME") } - @Override - protected @NotNull @Nls String getPresentableName() { - return PestBundle.message("FRAMEWORK_NAME"); + override fun parse(s: String): String { + LOG.info(String.format("Parsing version: %s", s)) + return s } - @NotNull - @Override - protected String parse(@NotNull String s) { - LOG.info(String.format("Parsing version: %s", s)); - return "0.2"; + companion object { + private val LOG = Logger.getInstance(PestVersionDetector::class.java) + val instance = PestVersionDetector() } } diff --git a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt index 926172aa..0ba095b5 100644 --- a/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt +++ b/src/main/kotlin/com/pestphp/pest/coverage/PestCoverageProgramRunner.kt @@ -32,7 +32,7 @@ class PestCoverageProgramRunner : PhpCoverageRunner() { coverageArguments: MutableList, localCoverage: String, targetCoverage: String - ): RunProfileState { + ): RunProfileState? { val runConfiguration = runConfigurationHolder.runConfiguration as PestRunConfiguration val command = runConfiguration.createCommand( From 915ba392bc76534313cea8820bb0a19455a2278f Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Sat, 1 Aug 2020 10:42:47 +0200 Subject: [PATCH 08/10] chore(runner): Updated changelog --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3f0a1039..8b3b6464 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,11 @@ - 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)) - Run tests scoped based on the cursor ([#24](https://github.com/pestphp/pest-intellij/pull/24), [#26](https://github.com/pestphp/pest-intellij/pull/26)) +- Added support for rerun tests when using new pest version ([#39](https://github.com/pestphp/pest-intellij/pull/39)) +- Added coverage support with clover output ([#39](https://github.com/pestphp/pest-intellij/pull/39)) + +### Changed +- Migrated all Java classes to Kotlin ### Fixed - Plugin require restart as PhpTestFrameworkType does not support dynamic plugins From 11af095c37b97bd21cd0623395286a4e43fcebf7 Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Sat, 1 Aug 2020 11:09:31 +0200 Subject: [PATCH 09/10] fix(runner): fix crash on rerun with old pest printer --- .../PestRerunFailedTestsAction.kt | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt index 2235c9dd..07bc9bee 100644 --- a/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt +++ b/src/main/kotlin/com/pestphp/pest/configuration/PestRerunFailedTestsAction.kt @@ -2,7 +2,6 @@ package com.pestphp.pest.configuration import com.intellij.execution.Executor import com.intellij.execution.configurations.RunProfileState -import com.intellij.execution.process.ProcessListener import com.intellij.execution.runners.ExecutionEnvironment import com.intellij.execution.testframework.actions.AbstractRerunFailedTestsAction import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties @@ -43,10 +42,25 @@ class PestRerunFailedTestsAction( .filter { it.isLeaf } .filter { it.parent != null } .map { it.getLocation(project, GlobalSearchScope.allScope(project)) } - .mapNotNull { it.psiElement.getPestTestName() } + .mapNotNull { it?.psiElement?.getPestTestName() } val clone: PestRunConfiguration = peerRunConfiguration.clone() as PestRunConfiguration + // If there are no failed tests found, it's prob. + // because it's an pest version before the new printer + if (failed.isEmpty()) { + return peerRunConfiguration.getState( + environment, + clone.createCommand( + interpreter, + mapOf(), + listOf(), + false + ), + null + ) + } + clone.settings.runnerSettings.directoryPath = null clone.settings.runnerSettings.filePath = null val command: PhpCommandSettings = clone.createCommand( @@ -63,7 +77,7 @@ class PestRerunFailedTestsAction( return peerRunConfiguration.getState( environment, command, - null as ProcessListener? + null ) } } From 5f3b2aeac259d782a77c0dafd9c3880c1f956d91 Mon Sep 17 00:00:00 2001 From: Oliver Nybroe Date: Wed, 5 Aug 2020 08:35:13 +0200 Subject: [PATCH 10/10] style(detekt): Fix detekt errors --- build.gradle.kts | 18 +++++++++--------- gradle.properties | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index c5968b34..e1523048 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -86,23 +86,23 @@ tasks { patchPluginXml { version(pluginVersion) sinceBuild(pluginSinceBuild) - if (pluginUntilBuild.equals("null")) { + if (pluginUntilBuild == "null") { untilBuild(null) } else { untilBuild(pluginUntilBuild) } // Extract the section from README.md and provide for the plugin's manifest - pluginDescription(closure { - File("./README.md").readText().lines().run { - subList(indexOf("") + 1, indexOf("")) - }.joinToString("\n").run { markdownToHTML(this) } - }) + pluginDescription( + closure { + File("./README.md").readText().lines().run { + subList(indexOf("") + 1, indexOf("")) + }.joinToString("\n").run { markdownToHTML(this) } + } + ) // Get the latest available change notes from the changelog file - changeNotes(closure { - changelog.getLatest().toHTML() - }) + changeNotes(closure { changelog.getLatest().toHTML() }) } publishPlugin { diff --git a/gradle.properties b/gradle.properties index 18eb2773..0433d104 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ pluginGroup = com.pestphp pluginName = Pest -pluginVersion = 0.2.1-alpha.5 +pluginVersion = 0.3.0 pluginSinceBuild = 201 pluginUntilBuild = null