package com.goide.runconfig; import com.goide.runconfig.application.GoApplicationConfiguration; import com.goide.runconfig.application.GoApplicationRunConfigurationProducer; import com.goide.runconfig.application.GoApplicationRunConfigurationType; import com.goide.runconfig.file.GoRunFileConfiguration; import com.goide.runconfig.file.GoRunFileConfigurationProducer; import com.goide.runconfig.file.GoRunFileConfigurationType; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.psi.PsiDirectory; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; public class GoRunConfigurationProducerTest extends GoRunConfigurationTestCase { public void testTestFile_test() { doTestProducedConfigurations(); } public void testFileWithMain() { doTestProducedConfigurations(); } public void testFileWithMainButNotMainPackage() { doTestProducedConfigurations(); } public void testFileWithoutMain() { doTestProducedConfigurations(); } public void testPackageClause() { doTestProducedConfigurations(); } public void testDirectory() { PsiFile file = myFixture.addFileToProject("import/path/a.go", "package main; func main(){}"); doTestProducedConfigurations(file.getParent()); } public void testSameRunFileConfigurationOnFile() { PsiFile file = myFixture.configureByText("a.go", "package main; <caret>\nfunc main() {}"); PsiElement at = file.findElementAt(myFixture.getCaretOffset()); assertNotNull(at); ConfigurationContext configurationContext = new ConfigurationContext(at); GoRunFileConfigurationProducer producer = new GoRunFileConfigurationProducer(); GoRunFileConfiguration runConfiguration = createFileConfiguration(file.getVirtualFile().getPath()); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createFileConfiguration(file.getVirtualFile().getPath() + "_vl"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } public void testSameRunApplicationConfigurationOnFile() { PsiFile file = myFixture.configureByText("a.go", "package main; <caret>\nfunc main() {}"); PsiElement at = file.findElementAt(myFixture.getCaretOffset()); assertNotNull(at); ConfigurationContext configurationContext = new ConfigurationContext(at); GoRunFileConfigurationProducer producer = new GoRunFileConfigurationProducer(); GoRunFileConfiguration runConfiguration = createFileConfiguration(file.getVirtualFile().getPath()); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createFileConfiguration(file.getVirtualFile().getPath() + "_vl"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } public void testSameRunApplicationConfigurationOnPackage() { PsiFile file = myFixture.configureByText("a.go", "package main; <caret>\nfunc main() {}"); PsiElement at = file.findElementAt(myFixture.getCaretOffset()); assertNotNull(at); ConfigurationContext configurationContext = new ConfigurationContext(at); GoApplicationRunConfigurationProducer producer = new GoApplicationRunConfigurationProducer(); GoApplicationConfiguration runConfiguration = createRunAppFileConfiguration(file.getVirtualFile().getPath()); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createRunAppFileConfiguration(file.getVirtualFile().getPath() + "_vl"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } public void testSameRunApplicationConfigurationOnDirectory() { PsiFile file = myFixture.addFileToProject("import/path/a.go", "package main; func main(){}"); PsiDirectory directory = file.getParent(); assertNotNull(directory); ConfigurationContext configurationContext = new ConfigurationContext(directory); GoApplicationRunConfigurationProducer producer = new GoApplicationRunConfigurationProducer(); GoApplicationConfiguration runConfiguration = createRunAppPackageConfiguration("import/path"); assertTrue(producer.isConfigurationFromContext(runConfiguration, configurationContext)); runConfiguration = createRunAppPackageConfiguration("import/path/other"); assertFalse(producer.isConfigurationFromContext(runConfiguration, configurationContext)); } private GoRunFileConfiguration createFileConfiguration(String filePath) { GoRunFileConfigurationType type = GoRunFileConfigurationType.getInstance(); GoRunFileConfiguration result = new GoRunFileConfiguration(myFixture.getProject(), "run file", type); result.setFilePath(filePath); return result; } private GoApplicationConfiguration createRunAppFileConfiguration(String filePath) { GoRunFileConfigurationType type = GoRunFileConfigurationType.getInstance(); GoApplicationConfiguration result = new GoApplicationConfiguration(myFixture.getProject(), "run file", type); result.setKind(GoApplicationConfiguration.Kind.FILE); result.setFilePath(filePath); return result; } private GoApplicationConfiguration createRunAppPackageConfiguration(String importPath) { GoApplicationRunConfigurationType type = GoApplicationRunConfigurationType.getInstance(); GoApplicationConfiguration result = new GoApplicationConfiguration(myFixture.getProject(), "run package", type); result.setKind(GoApplicationConfiguration.Kind.PACKAGE); result.setPackage(importPath); return result; } @Override protected String getBasePath() { return "running/producer"; } }