/* * Copyright 2013-2016 Sergey Ignatov, Alexander Zolotov, Florin Patan * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.goide.runconfig.testing; import com.goide.runconfig.GoRunConfigurationTestCase; import com.goide.runconfig.testing.frameworks.gobench.GobenchFramework; import com.goide.runconfig.testing.frameworks.gobench.GobenchRunConfigurationProducer; import com.goide.runconfig.testing.frameworks.gotest.GotestFramework; import com.goide.runconfig.testing.frameworks.gotest.GotestRunConfigurationProducer; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.actions.RunConfigurationProducer; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; public class GoTestRunConfigurationProducerTest extends GoRunConfigurationTestCase { public void testDirectory() { PsiFile file = myFixture.configureByText("a.go", "package main"); doTestProducedConfigurations(file.getParent()); } public void testPackage_test() { PsiFile file = myFixture.addFileToProject("import/path/package_test.go", "package ma<caret>in; import `gopkg.in/check.v1`"); myFixture.configureFromExistingVirtualFile(file.getVirtualFile()); doTestProducedConfigurations(myFixture.getFile().findElementAt(myFixture.getCaretOffset())); } public void testFileWithoutTest_test() { doTestProducedConfigurations(); } public void testNonTestFile() { doTestProducedConfigurations(); } public void testFileWithTestsOnly_test() { doTestProducedConfigurations(); } public void testFileWithBenchmarksOnly_test() { doTestProducedConfigurations(); } public void testFileWithGocheckTestsOnly_test() { doTestProducedConfigurations(); } public void testFileWithTestsAndBenchmarks_test() { doTestProducedConfigurations(); } public void testSimpleFunction_test() { doTestProducedConfigurations(); } public void testSimpleFunctionInFileWithTests_test() { doTestProducedConfigurations(); } public void testBenchmarkFunction_test() { doTestProducedConfigurations(); } public void testExampleFunction_test() { doTestProducedConfigurations(); } public void testTestFunction_test() { doTestProducedConfigurations(); } public void testGocheckMethod_test() { doTestProducedConfigurations(); } public void testTestFunctionNonTestFile() { doTestProducedConfigurations(); } public void testSameConfigurationOnFunction() { PsiFile file = myFixture.addFileToProject("import/path/a_test.go", "package main; func TestName() {<caret>}"); myFixture.configureFromExistingVirtualFile(file.getVirtualFile()); ConfigurationContext configurationContext = createConfigurationContext(); RunConfigurationProducer<GoTestRunConfiguration> producer = new GotestRunConfigurationProducer(); GoTestRunConfiguration runConfiguration = createPackageConfiguration(GotestFramework.INSTANCE, "^TestName$", "import/path"); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createPackageConfiguration(GotestFramework.INSTANCE, "otherPattern", "import/path"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createPackageConfiguration(GobenchFramework.INSTANCE, "^TestName$", "import/path"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createPackageConfiguration(GotestFramework.INSTANCE, "^TestName$", "import/path/other"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); producer = new GobenchRunConfigurationProducer(); runConfiguration = createFileConfiguration(GobenchFramework.INSTANCE, file.getVirtualFile().getPath()); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } public void testSameConfigurationOnNonTestFunction() { PsiFile file = myFixture.addFileToProject("import/path/a_test.go", "package main; func SomeNonTestName() {<caret>}"); myFixture.configureFromExistingVirtualFile(file.getVirtualFile()); ConfigurationContext configurationContext = createConfigurationContext(); GotestRunConfigurationProducer producer = new GotestRunConfigurationProducer(); GoTestRunConfiguration runConfiguration = createFileConfiguration(GotestFramework.INSTANCE, file.getVirtualFile().getPath()); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createFileConfiguration(GotestFramework.INSTANCE, file.getVirtualFile().getPath() + "_vl"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createFileConfiguration(GobenchFramework.INSTANCE, file.getVirtualFile().getPath()); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } public void testSameConfigurationOnPackageClause() { PsiFile file = myFixture.addFileToProject("import/path/a_test.go", "packag<caret>e main; func SomeNonTestName() {}"); myFixture.configureFromExistingVirtualFile(file.getVirtualFile()); ConfigurationContext configurationContext = createConfigurationContext(); GotestRunConfigurationProducer producer = new GotestRunConfigurationProducer(); GoTestRunConfiguration runConfiguration = createPackageConfiguration(GotestFramework.INSTANCE, "", "import/path"); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createPackageConfiguration(GotestFramework.INSTANCE, "otherPattern", "import/path"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createPackageConfiguration(GobenchFramework.INSTANCE, "", "import/path"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createPackageConfiguration(GotestFramework.INSTANCE, "", "import/path/other"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } public void testSameConfigurationOnFile() { PsiFile file = myFixture.configureByText("a_test.go", "package main; <caret>\n\nfunc SomeNonTestName() {}"); ConfigurationContext configurationContext = createConfigurationContext(); GotestRunConfigurationProducer producer = new GotestRunConfigurationProducer(); GoTestRunConfiguration runConfiguration = createFileConfiguration(GotestFramework.INSTANCE, file.getVirtualFile().getPath()); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createFileConfiguration(GotestFramework.INSTANCE, file.getVirtualFile().getPath() + "_vl"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createFileConfiguration(GobenchFramework.INSTANCE, file.getVirtualFile().getPath()); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } public void testSameConfigurationOnDirectory() { PsiFile file = myFixture.configureByText("a.go", "package main"); PsiDirectory directory = file.getParent(); assertNotNull(directory); ConfigurationContext configurationContext = new ConfigurationContext(directory); GotestRunConfigurationProducer producer = new GotestRunConfigurationProducer(); GoTestRunConfiguration runConfiguration = createDirectoryConfiguration(GotestFramework.INSTANCE, directory.getVirtualFile().getPath(), directory.getVirtualFile().getPath()); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createDirectoryConfiguration(GotestFramework.INSTANCE, directory.getVirtualFile().getPath() + "_vl", directory.getVirtualFile().getPath()); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createDirectoryConfiguration(GobenchFramework.INSTANCE, directory.getVirtualFile().getPath(), directory.getVirtualFile().getPath()); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createDirectoryConfiguration(GotestFramework.INSTANCE, directory.getVirtualFile().getPath(), directory.getVirtualFile().getPath() + "_vl"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } @NotNull private ConfigurationContext createConfigurationContext() { PsiElement at = myFixture.getFile().findElementAt(myFixture.getCaretOffset()); assertNotNull(at); return new ConfigurationContext(at); } @NotNull private GoTestRunConfiguration createPackageConfiguration(GoTestFramework framework, String pattern, String importPath) { GoTestRunConfigurationType configurationType = GoTestRunConfigurationType.getInstance(); GoTestRunConfiguration runConfiguration = new GoTestRunConfiguration(myFixture.getProject(), "name", configurationType); runConfiguration.setPattern(pattern); runConfiguration.setPackage(importPath); runConfiguration.setKind(GoTestRunConfiguration.Kind.PACKAGE); runConfiguration.setTestFramework(framework); return runConfiguration; } @NotNull private GoTestRunConfiguration createFileConfiguration(GoTestFramework framework, String path) { GoTestRunConfigurationType configurationType = GoTestRunConfigurationType.getInstance(); GoTestRunConfiguration runConfiguration = new GoTestRunConfiguration(myFixture.getProject(), "name", configurationType); runConfiguration.setFilePath(path); runConfiguration.setKind(GoTestRunConfiguration.Kind.FILE); runConfiguration.setTestFramework(framework); return runConfiguration; } @NotNull private GoTestRunConfiguration createDirectoryConfiguration(GoTestFramework framework, String path, String workingDirectoryPath) { GoTestRunConfigurationType configurationType = GoTestRunConfigurationType.getInstance(); GoTestRunConfiguration runConfiguration = new GoTestRunConfiguration(myFixture.getProject(), "name", configurationType); runConfiguration.setDirectoryPath(path); runConfiguration.setWorkingDirectory(workingDirectoryPath); runConfiguration.setKind(GoTestRunConfiguration.Kind.DIRECTORY); runConfiguration.setTestFramework(framework); return runConfiguration; } @Override protected String getBasePath() { return "testing/producer"; } }