From 5020982df535e2aa0f451ff76117bdea9f295f7e Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Wed, 8 Jun 2016 23:13:20 +0300 Subject: [PATCH] replace separate run configurations with corresponding test kind; run over change list to be restored (cherry picked from commit 2f95663) --- .../TestDiscoveryConfigurable.java | 253 ------------------ .../TestDiscoveryConfiguration.java | 234 ---------------- .../TestDiscoveryConfigurationProducer.java | 46 ++-- plugins/junit/src/META-INF/plugin.xml | 1 - .../execution/junit/JUnitConfiguration.java | 6 + .../execution/junit/JUnitDebuggerRunner.java | 4 +- .../intellij/execution/junit/TestObject.java | 4 + .../JUnitTestDiscoveryConfiguration.java | 147 ---------- ...nitTestDiscoveryConfigurationProducer.java | 23 +- .../JUnitTestDiscoveryConfigurationType.java | 71 ----- .../JUnitTestDiscoveryRunnableState.java | 123 +++++++++ .../junit/testDiscovery/TestBySource.java | 38 +++ .../configuration/JUnitConfigurable.java | 13 +- .../JUnitConfigurationModel.java | 4 +- plugins/testng/src/META-INF/plugin.xml | 1 - .../configuration/TestNGConfiguration.java | 10 + .../TestNGConfigurationEditor.form | 66 ++--- .../TestNGConfigurationEditor.java | 83 ++---- .../configuration/TestNGDebuggerRunner.java | 4 +- .../TestNGTestDiscoveryConfiguration.java | 103 ------- ...tNGTestDiscoveryConfigurationProducer.java | 24 +- .../TestNGTestDiscoveryConfigurationType.java | 71 ----- .../TestNGTestDiscoveryRunnableState.java | 76 ++++++ .../testng/model/TestData.java | 10 + .../model/TestNGConfigurationModel.java | 2 +- .../testng/model/TestNGSource.java | 52 ++++ .../testng/model/TestNGTestObject.java | 4 + .../testng/model/TestType.java | 55 ++-- 28 files changed, 472 insertions(+), 1056 deletions(-) delete mode 100644 java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurable.java delete mode 100644 java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfiguration.java delete mode 100644 plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfiguration.java delete mode 100644 plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfigurationType.java create mode 100644 plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryRunnableState.java create mode 100644 plugins/junit/src/com/intellij/execution/junit/testDiscovery/TestBySource.java delete mode 100644 plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfiguration.java delete mode 100644 plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfigurationType.java create mode 100644 plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryRunnableState.java create mode 100644 plugins/testng/src/com/theoryinpractice/testng/model/TestNGSource.java diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurable.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurable.java deleted file mode 100644 index 62f0601e288f..000000000000 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurable.java +++ /dev/null @@ -1,253 +0,0 @@ -/* - * Copyright 2000-2016 JetBrains s.r.o. - * - * 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.intellij.execution.testDiscovery; - -import com.intellij.application.options.ModulesComboBox; -import com.intellij.execution.ExecutionBundle; -import com.intellij.execution.MethodBrowser; -import com.intellij.execution.ui.*; -import com.intellij.ide.util.ClassFilter; -import com.intellij.openapi.fileTypes.PlainTextLanguage; -import com.intellij.openapi.options.SettingsEditor; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.ui.ComboBox; -import com.intellij.openapi.ui.LabeledComponent; -import com.intellij.openapi.util.Condition; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.vcs.changes.ChangeListManager; -import com.intellij.openapi.vcs.changes.LocalChangeList; -import com.intellij.psi.JavaCodeFragment; -import com.intellij.psi.JavaPsiFacade; -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiMethod; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.ui.EditorTextFieldWithBrowseButton; -import com.intellij.ui.PanelWithAnchor; -import com.intellij.util.ui.JBUI; -import com.intellij.util.ui.UIUtil; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; -import java.util.List; - -import static java.awt.GridBagConstraints.*; - - -public class TestDiscoveryConfigurable extends SettingsEditor implements PanelWithAnchor { - private final ConfigurationModuleSelector myModuleSelector; - // Fields - private JPanel myWholePanel = new JPanel(new BorderLayout()); - private LabeledComponent myModule = new LabeledComponent(); - private CommonJavaParametersPanel myCommonJavaParameters = new CommonJavaParametersPanel(); - private JrePathEditor myJrePathEditor; - private LabeledComponent myClass = new LabeledComponent(); - private LabeledComponent myMethod = new LabeledComponent(); - - private ComboBox myChangeLists = new ComboBox(); - private JRadioButton myPositionRb = new JRadioButton("Tests for method:"); - private JRadioButton myChangesRb = new JRadioButton("Tests for change list:"); - private JComponent anchor; - - public TestDiscoveryConfigurable(final Project project) { - myModule.setText(ExecutionBundle.message("application.configuration.use.classpath.and.jdk.of.module.label")); - myModule.setLabelLocation(BorderLayout.WEST); - myModule.setComponent(new ModulesComboBox()); - myModuleSelector = new ConfigurationModuleSelector(project, getModulesComponent()); - myCommonJavaParameters.setModuleContext(myModuleSelector.getModule()); - myCommonJavaParameters.setHasModuleMacro(); - myModule.getComponent().addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent e) { - myCommonJavaParameters.setModuleContext(myModuleSelector.getModule()); - } - }); - final JPanel panelWithSettings = new JPanel(new GridBagLayout()); - final GridBagConstraints gc = new GridBagConstraints(0, RELATIVE, 1, 1, 1, 0, NORTHWEST, HORIZONTAL, JBUI.emptyInsets(), 0, 0); - panelWithSettings.add(myPositionRb, gc); - myClass.setText("Class:"); - final ClassBrowser classBrowser = new ClassBrowser(project, "Choose Class") { - @Override - protected ClassFilter.ClassFilterWithScope getFilter() throws NoFilterException { - return new ClassFilter.ClassFilterWithScope() { - @Override - public GlobalSearchScope getScope() { - return GlobalSearchScope.allScope(project); - } - - @Override - public boolean isAccepted(PsiClass aClass) { - return true; - } - }; - } - - @Override - protected PsiClass findClass(String className) { - return JavaPsiFacade.getInstance(project).findClass(className, GlobalSearchScope.allScope(project)); - } - }; - final EditorTextFieldWithBrowseButton classComponent = new EditorTextFieldWithBrowseButton(project, true); - myClass.setComponent(classComponent); - classBrowser.setField(classComponent); - panelWithSettings.add(myClass, gc); - myMethod.setText("Method:"); - final EditorTextFieldWithBrowseButton textFieldWithBrowseButton = new EditorTextFieldWithBrowseButton(project, true, - JavaCodeFragment.VisibilityChecker.EVERYTHING_VISIBLE, - PlainTextLanguage.INSTANCE.getAssociatedFileType()); - myMethod.setComponent(textFieldWithBrowseButton); - final MethodBrowser methodBrowser = new MethodBrowser(project) { - protected Condition getFilter(final PsiClass testClass) { - return method -> method.getContainingClass() == testClass; - } - - @Override - protected String getClassName() { - return myClass.getComponent().getText().trim(); - } - - @Override - protected ConfigurationModuleSelector getModuleSelector() { - return myModuleSelector; - } - }; - methodBrowser.setField(textFieldWithBrowseButton); - methodBrowser.installCompletion(textFieldWithBrowseButton.getChildComponent()); - - panelWithSettings.add(myMethod, gc); - panelWithSettings.add(myChangesRb, gc); - panelWithSettings.add(myChangeLists, gc); - - ButtonGroup gr = new ButtonGroup(); - gr.add(myPositionRb); - gr.add(myChangesRb); - - final ActionListener l = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - updateComponents(); - } - }; - myPositionRb.addActionListener(l); - myChangesRb.addActionListener(l); - - - final List changeLists = ChangeListManager.getInstance(project).getChangeLists(); - final DefaultComboBoxModel model = new DefaultComboBoxModel(); - model.addElement("All"); - for (LocalChangeList changeList : changeLists) { - model.addElement(changeList.getName()); - } - myChangeLists.setModel(model); - ChangeListManager changeListManager = ChangeListManager.getInstance(project); - if (changeListManager.getAffectedFiles().isEmpty()) { - myChangesRb.setEnabled(false); - } - - myWholePanel.add(panelWithSettings, BorderLayout.NORTH); - myWholePanel.add(myCommonJavaParameters, BorderLayout.CENTER); - final JPanel classpathPanel = new JPanel(new BorderLayout()); - myWholePanel.add(classpathPanel, BorderLayout.SOUTH); - - classpathPanel.add(myModule, BorderLayout.NORTH); - myJrePathEditor = new JrePathEditor(DefaultJreSelector.fromModuleDependencies(getModulesComponent(), false)); - classpathPanel.add(myJrePathEditor, BorderLayout.CENTER); - UIUtil.setEnabled(myCommonJavaParameters.getProgramParametersComponent(), false, true); - - setAnchor(myModule.getLabel()); - myJrePathEditor.setAnchor(myModule.getLabel()); - myCommonJavaParameters.setAnchor(myModule.getLabel()); - } - - private void updateComponents() { - myClass.setEnabled(myPositionRb.isSelected()); - myMethod.setEnabled(myPositionRb.isSelected()); - myChangeLists.setEnabled(myChangesRb.isSelected()); - } - - public void applyEditorTo(final TestDiscoveryConfiguration configuration) { - applyHelpersTo(configuration); - configuration.setAlternativeJrePath(myJrePathEditor.getJrePathOrName()); - configuration.setAlternativeJrePathEnabled(myJrePathEditor.isAlternativeJreSelected()); - configuration.setPosition(myPositionRb.isSelected() ? Pair.create(myClass.getComponent().getText().trim(), - myMethod.getComponent().getText().trim()) : null); - if (myChangesRb.isSelected()) { - final Object selectedItem = myChangeLists.getSelectedItem(); - configuration.setChangeList("All".equals(selectedItem) ? null : (String)selectedItem); - } - else { - configuration.setChangeList(null); - } - myCommonJavaParameters.applyTo(configuration); - } - - public void resetEditorFrom(final TestDiscoveryConfiguration configuration) { - myCommonJavaParameters.reset(configuration); - getModuleSelector().reset(configuration); - myJrePathEditor - .setPathOrName(configuration.getAlternativeJrePath(), configuration.isAlternativeJrePathEnabled()); - final Pair position = configuration.getPosition(); - if (position != null) { - myPositionRb.setSelected(true); - myClass.getComponent().setText(position.first); - myMethod.getComponent().setText(position.second); - } - else if (myChangesRb.isEnabled()) { - myChangesRb.setSelected(true); - } - else { - myPositionRb.setSelected(true); - } - final String changeList = configuration.getChangeList(); - if (changeList != null) { - myChangeLists.setSelectedItem(changeList); - } - else if (myChangesRb.isEnabled()) { - myChangeLists.setSelectedIndex(0); - } - updateComponents(); - } - - public ModulesComboBox getModulesComponent() { - return myModule.getComponent(); - } - - public ConfigurationModuleSelector getModuleSelector() { - return myModuleSelector; - } - - @Override - public JComponent getAnchor() { - return anchor; - } - - @Override - public void setAnchor(JComponent anchor) { - this.anchor = anchor; - } - - - @NotNull - public JComponent createEditor() { - return myWholePanel; - } - - private void applyHelpersTo(final TestDiscoveryConfiguration currentState) { - myCommonJavaParameters.applyTo(currentState); - getModuleSelector().applyTo(currentState); - } -} diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfiguration.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfiguration.java deleted file mode 100644 index ab3e8f7aa3e6..000000000000 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfiguration.java +++ /dev/null @@ -1,234 +0,0 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * 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.intellij.execution.testDiscovery; - -import com.intellij.diagnostic.logging.LogConfigurationPanel; -import com.intellij.execution.ExecutionBundle; -import com.intellij.execution.Executor; -import com.intellij.execution.JavaRunConfigurationExtensionManager; -import com.intellij.execution.JavaTestConfigurationBase; -import com.intellij.execution.configurations.ConfigurationFactory; -import com.intellij.execution.configurations.JavaRunConfigurationModule; -import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.configurations.RuntimeConfigurationException; -import com.intellij.execution.testframework.sm.runner.SMTRunnerConsoleProperties; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleManager; -import com.intellij.openapi.options.SettingsEditor; -import com.intellij.openapi.options.SettingsEditorGroup; -import com.intellij.openapi.util.InvalidDataException; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.WriteExternalException; -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.openapi.vcs.changes.ChangeListManager; -import org.jdom.Element; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Arrays; -import java.util.Collection; -import java.util.Map; - -public abstract class TestDiscoveryConfiguration extends JavaTestConfigurationBase { - private String myChangeList; - private Pair myPosition; - - protected JavaTestConfigurationBase myDelegate; - - public TestDiscoveryConfiguration(String name, - @NotNull JavaRunConfigurationModule configurationModule, - @NotNull ConfigurationFactory factory, - JavaTestConfigurationBase delegate) { - super(name, configurationModule, factory); - myDelegate = delegate; - } - - @Override - public void setVMParameters(String value) { - myDelegate.setVMParameters(value); - } - - @Override - public String getVMParameters() { - return myDelegate.getVMParameters(); - } - - @Override - public boolean isAlternativeJrePathEnabled() { - return myDelegate.isAlternativeJrePathEnabled(); - } - - @Override - public void setAlternativeJrePathEnabled(boolean enabled) { - myDelegate.setAlternativeJrePathEnabled(enabled); - } - - @Override - @Nullable - public String getAlternativeJrePath() { - return myDelegate.getAlternativeJrePath(); - } - - @Override - public void setAlternativeJrePath(String path) { - myDelegate.setAlternativeJrePath(path); - } - - @Override - public void checkConfiguration() throws RuntimeConfigurationException { - if (myPosition == null && - myChangeList != null && ChangeListManager.getInstance(getProject()).findChangeList(myChangeList) == null) { - throw new RuntimeConfigurationException("Change list " + myChangeList + " doesn't exist"); - } - if (myPosition != null) { - if (StringUtil.isEmptyOrSpaces(myPosition.first)) { - throw new RuntimeConfigurationException("No class specified"); - } - if (StringUtil.isEmptyOrSpaces(myPosition.second)) { - throw new RuntimeConfigurationException("No method specified"); - } - } - JavaRunConfigurationExtensionManager.checkConfigurationIsValid(this); - } - - @Override - public Collection getValidModules() { - return Arrays.asList(ModuleManager.getInstance(getProject()).getModules()); - } - - @NotNull - @Override - public SettingsEditor getConfigurationEditor() { - SettingsEditorGroup group = new SettingsEditorGroup(); - group.addEditor(ExecutionBundle.message("run.configuration.configuration.tab.title"), - new TestDiscoveryConfigurable(getProject())); - JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group); - group.addEditor(ExecutionBundle.message("logs.tab.title"), new LogConfigurationPanel()); - return group; - } - - @Override - public void readExternal(Element element) throws InvalidDataException { - myDelegate.readExternal(element); - super.readExternal(element); - readModule(element); - - final String classQName = element.getAttributeValue("class"); - final String methodName = element.getAttributeValue("method"); - myPosition = classQName != null && methodName != null ? Pair.create(classQName, methodName) : null; - myChangeList = element.getAttributeValue("changeList"); - if ("All".equals(myChangeList)) { - myChangeList = null; - } - } - - @Override - public void setModule(Module module) { - super.setModule(module); - myDelegate.setModule(module); - } - - @Override - public void writeExternal(Element element) throws WriteExternalException { - myDelegate.writeExternal(element); - super.writeExternal(element); - - writeModule(element); - - if (myPosition != null) { - element.setAttribute("class", myPosition.first); - element.setAttribute("method", myPosition.second); - } - element.setAttribute("changeList", myChangeList == null ? "All" : myChangeList); - } - - - @Nullable - @Override - public String getRunClass() { - return null; - } - - @Nullable - @Override - public String getPackage() { - return ""; - } - - @Override - public void setProgramParameters(@Nullable String value) { - myDelegate.setProgramParameters(value); - } - - @Override - @Nullable - public String getProgramParameters() { - return myDelegate.getProgramParameters(); - } - - @Override - public void setWorkingDirectory(@Nullable String value) { - myDelegate.setWorkingDirectory(value); - } - - @Override - @Nullable - public String getWorkingDirectory() { - return myDelegate.getWorkingDirectory(); - } - - @Override - public void setEnvs(@NotNull Map envs) { - myDelegate.setEnvs(envs); - } - - @Override - @NotNull - public Map getEnvs() { - return myDelegate.getEnvs(); - } - - @Override - public void setPassParentEnvs(boolean passParentEnvs) { - myDelegate.setPassParentEnvs(passParentEnvs); - } - - @Override - public boolean isPassParentEnvs() { - return myDelegate.isPassParentEnvs(); - } - - @Override - public SMTRunnerConsoleProperties createTestConsoleProperties(Executor executor) { - return myDelegate.createTestConsoleProperties(executor); - } - - public void setPosition(Pair position) { - myPosition = position; - } - - public void setChangeList(String changeList) { - myChangeList = changeList; - } - - public Pair getPosition() { - return myPosition; - } - - public String getChangeList() { - return myChangeList; - } -} diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurationProducer.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurationProducer.java index 82a5db328661..2503982c89c7 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurationProducer.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoveryConfigurationProducer.java @@ -16,9 +16,7 @@ package com.intellij.execution.testDiscovery; import com.intellij.codeInsight.TestFrameworks; -import com.intellij.execution.JavaExecutionUtil; -import com.intellij.execution.Location; -import com.intellij.execution.RunnerAndConfigurationSettings; +import com.intellij.execution.*; import com.intellij.execution.actions.ConfigurationContext; import com.intellij.execution.configurations.ConfigurationType; import com.intellij.execution.configurations.ModuleBasedConfiguration; @@ -45,13 +43,17 @@ import java.util.Collection; import java.util.List; import java.util.Set; -public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigurationProducerBase { +public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigurationProducerBase { protected TestDiscoveryConfigurationProducer(ConfigurationType type) { super(type); } + + protected abstract void setPosition(JavaTestConfigurationBase configuration, PsiLocation position); + protected abstract Pair getPosition(JavaTestConfigurationBase configuration); + @Override - protected boolean setupConfigurationFromContext(final TestDiscoveryConfiguration configuration, + protected boolean setupConfigurationFromContext(final JavaTestConfigurationBase configuration, ConfigurationContext configurationContext, Ref ref) { if (!Registry.is("testDiscovery.enabled")) { @@ -61,8 +63,9 @@ public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigur assert contextLocation != null; final Location location = JavaExecutionUtil.stepIntoSingleClass(contextLocation); if (location == null) return false; - final Pair position = getPosition(location); - if (position != null) { + final PsiMethod sourceMethod = getSourceMethod(location); + final Pair position = getPosition(sourceMethod); + if (sourceMethod != null && position != null) { try { final Project project = configuration.getProject(); final TestDiscoveryIndex testDiscoveryIndex = TestDiscoveryIndex.getInstance(project); @@ -71,7 +74,7 @@ public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigur ContainerUtil.filter(testsByMethodName, s -> s.startsWith(configuration.getFrameworkPrefix())).isEmpty()) { return false; } - configuration.setPosition(position); + setPosition(configuration, new PsiLocation(sourceMethod)); configuration.setName("Tests for " + StringUtil.getShortName(position.first) + "." + position.second); final RunnerAndConfigurationSettings template = @@ -111,11 +114,11 @@ public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigur } @Override - protected Module findModule(TestDiscoveryConfiguration configuration, Module contextModule) { + protected Module findModule(JavaTestConfigurationBase configuration, Module contextModule) { return null; } - private static Pair getPosition(Location location) { + private static PsiMethod getSourceMethod(Location location) { final PsiElement psiElement = location.getPsiElement(); final PsiMethod psiMethod = PsiTreeUtil.getParentOfType(psiElement, PsiMethod.class); if (psiMethod != null) { @@ -125,18 +128,27 @@ public abstract class TestDiscoveryConfigurationProducer extends JavaRunConfigur if (testFramework != null) { return null; } - final String qualifiedName = containingClass.getQualifiedName(); - if (qualifiedName != null) { - return Pair.create(qualifiedName, psiMethod.getName()); - } + return psiMethod; } } return null; } + private static Pair getPosition(PsiMethod method) { + if (method == null) { + return null; + } + final PsiClass containingClass = method.getContainingClass(); + final String qualifiedName = containingClass.getQualifiedName(); + if (qualifiedName != null) { + return Pair.create(qualifiedName, method.getName()); + } + return null; + } + @Override - public boolean isConfigurationFromContext(TestDiscoveryConfiguration configuration, ConfigurationContext configurationContext) { - final Pair position = getPosition(configurationContext.getLocation()); - return position != null && position.equals(configuration.getPosition()); + public boolean isConfigurationFromContext(JavaTestConfigurationBase configuration, ConfigurationContext configurationContext) { + final Pair position = getPosition(getSourceMethod(configurationContext.getLocation())); + return position != null && position.equals(getPosition(configuration)); } } diff --git a/plugins/junit/src/META-INF/plugin.xml b/plugins/junit/src/META-INF/plugin.xml index 861c5df6be3a..949eb0849641 100644 --- a/plugins/junit/src/META-INF/plugin.xml +++ b/plugins/junit/src/META-INF/plugin.xml @@ -61,7 +61,6 @@ - diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java index 801966a3cb05..ca66e1e60093 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java @@ -58,6 +58,7 @@ public class JUnitConfiguration extends JavaTestConfigurationBase { @NonNls public static final String TEST_DIRECTORY = "directory"; @NonNls public static final String TEST_CATEGORY = "category"; @NonNls public static final String TEST_METHOD = "method"; + @NonNls public static final String BY_SOURCE_POSITION = "source location"; //fork modes @NonNls public static final String FORK_NONE = "none"; @@ -288,6 +289,11 @@ public class JUnitConfiguration extends JavaTestConfigurationBase { setGeneratedName(); } + public void beFromSourcePosition(PsiLocation sourceLocation) { + myData.setTestMethod(sourceLocation); + myData.TEST_OBJECT = BY_SOURCE_POSITION; + } + public void setMainClass(final PsiClass testClass) { final boolean shouldUpdateName = isGeneratedName(); setModule(myData.setMainClass(testClass)); diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitDebuggerRunner.java b/plugins/junit/src/com/intellij/execution/junit/JUnitDebuggerRunner.java index d0a5b221583f..2c6e2f613eb6 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitDebuggerRunner.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitDebuggerRunner.java @@ -17,7 +17,6 @@ package com.intellij.execution.junit; import com.intellij.execution.JavaTestFrameworkDebuggerRunner; import com.intellij.execution.configurations.RunProfile; -import com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfiguration; import org.jetbrains.annotations.NotNull; /** @@ -26,8 +25,7 @@ import org.jetbrains.annotations.NotNull; public class JUnitDebuggerRunner extends JavaTestFrameworkDebuggerRunner { @Override protected boolean validForProfile(@NotNull RunProfile profile) { - return profile instanceof JUnitConfiguration || - profile instanceof JUnitTestDiscoveryConfiguration; + return profile instanceof JUnitConfiguration; } @NotNull diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index 1b4d05abf3a5..980b4cc29086 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -21,6 +21,7 @@ import com.intellij.execution.configurations.JavaParameters; import com.intellij.execution.configurations.ParametersList; import com.intellij.execution.configurations.RunnerSettings; import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.execution.junit.testDiscovery.TestBySource; import com.intellij.execution.junit2.TestProxy; import com.intellij.execution.junit2.segments.DeferredActionsQueue; import com.intellij.execution.junit2.segments.DeferredActionsQueueImpl; @@ -100,6 +101,9 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState myPatterns; - - @Override - protected void search() throws ExecutionException { - myPatterns = TestDiscoverySearchHelper.search(getProject(), getPosition(), getChangeList(), getFrameworkPrefix()); - } - - @Override - protected void onFound() { - if (myPatterns != null) { - try { - addClassesListToJavaParameters(myPatterns, FunctionUtil.id(), "", false, getJavaParameters()); - } - catch (ExecutionException ignored) {} - } - } - }; - } - - @Override - protected JavaParameters createJavaParameters() throws ExecutionException { - final JavaParameters javaParameters = super.createJavaParameters(); - createTempFiles(javaParameters); - - createServerSocket(javaParameters); - return javaParameters; - } - - @Override - public String suggestActionName() { - return ""; - } - - @Override - public RefactoringElementListener getListener(PsiElement element, JUnitConfiguration configuration) { - return null; - } - - @Override - public boolean isConfiguredByElement(JUnitConfiguration configuration, - PsiClass testClass, - PsiMethod testMethod, - PsiPackage testPackage, - PsiDirectory testDir) { - return false; - } - } -} diff --git a/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfigurationProducer.java b/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfigurationProducer.java index 04c0d760cce5..432244828146 100644 --- a/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfigurationProducer.java +++ b/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfigurationProducer.java @@ -15,11 +15,30 @@ */ package com.intellij.execution.junit.testDiscovery; -import com.intellij.execution.configurations.ConfigurationTypeUtil; +import com.intellij.execution.JavaTestConfigurationBase; +import com.intellij.execution.PsiLocation; +import com.intellij.execution.junit.JUnitConfiguration; +import com.intellij.execution.junit.JUnitConfigurationType; import com.intellij.execution.testDiscovery.TestDiscoveryConfigurationProducer; +import com.intellij.openapi.util.Pair; +import com.intellij.psi.PsiMethod; public class JUnitTestDiscoveryConfigurationProducer extends TestDiscoveryConfigurationProducer { protected JUnitTestDiscoveryConfigurationProducer() { - super(ConfigurationTypeUtil.findConfigurationType(JUnitTestDiscoveryConfigurationType.class)); + super(JUnitConfigurationType.getInstance()); + } + + @Override + protected void setPosition(JavaTestConfigurationBase configuration, PsiLocation position) { + ((JUnitConfiguration)configuration).beFromSourcePosition(position); + } + + @Override + protected Pair getPosition(JavaTestConfigurationBase configuration) { + final JUnitConfiguration.Data data = ((JUnitConfiguration)configuration).getPersistentData(); + if (data.TEST_OBJECT.equals(JUnitConfiguration.BY_SOURCE_POSITION)) { + return Pair.create(data.getMainClassName(), data.getMethodName()); + } + return null; } } diff --git a/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfigurationType.java b/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfigurationType.java deleted file mode 100644 index 1ce8423b0f82..000000000000 --- a/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryConfigurationType.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * 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.intellij.execution.junit.testDiscovery; - -import com.intellij.execution.configuration.ConfigurationFactoryEx; -import com.intellij.execution.configurations.ConfigurationFactory; -import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.configurations.ModuleBasedConfiguration; -import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.execution.testDiscovery.TestDiscoveryConfiguration; -import com.intellij.icons.AllIcons; -import com.intellij.openapi.project.Project; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; - -public class JUnitTestDiscoveryConfigurationType implements ConfigurationType { - private final ConfigurationFactory myFactory; - - public JUnitTestDiscoveryConfigurationType() { - myFactory = new ConfigurationFactoryEx(this) { - public RunConfiguration createTemplateConfiguration(Project project) { - return new JUnitTestDiscoveryConfiguration("", project, this); - } - - @Override - public void onNewConfigurationCreated(@NotNull RunConfiguration configuration) { - ((ModuleBasedConfiguration)configuration).onNewConfigurationCreated(); - } - }; - } - - @Override - public String getDisplayName() { - return "JUnit Test Discovery"; - } - - @Override - public String getConfigurationTypeDescription() { - return "Runs junit tests which passed changed code"; - } - - @Override - public Icon getIcon() { - return AllIcons.RunConfigurations.Junit; - } - - @NotNull - @Override - public String getId() { - return "JUnitTestDiscovery"; - } - - @Override - public ConfigurationFactory[] getConfigurationFactories() { - return new ConfigurationFactory[] {myFactory}; - } -} diff --git a/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryRunnableState.java b/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryRunnableState.java new file mode 100644 index 000000000000..1c01eb99f2a2 --- /dev/null +++ b/plugins/junit/src/com/intellij/execution/junit/testDiscovery/JUnitTestDiscoveryRunnableState.java @@ -0,0 +1,123 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * 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.intellij.execution.junit.testDiscovery; + +import com.intellij.execution.ExecutionException; +import com.intellij.execution.configurations.JavaParameters; +import com.intellij.execution.junit.JUnitConfiguration; +import com.intellij.execution.junit.TestObject; +import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.testDiscovery.TestDiscoverySearchHelper; +import com.intellij.execution.testframework.SearchForTestsTask; +import com.intellij.execution.testframework.SourceScope; +import com.intellij.execution.testframework.TestSearchScope; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.*; +import com.intellij.psi.search.GlobalSearchScope; +import com.intellij.refactoring.listeners.RefactoringElementListener; +import com.intellij.util.FunctionUtil; + +import java.util.Set; + +abstract class JUnitTestDiscoveryRunnableState extends TestObject { + public JUnitTestDiscoveryRunnableState(JUnitConfiguration configuration, ExecutionEnvironment environment) { + super(configuration, environment); + } + + protected abstract String getChangeList(); + protected abstract Pair getPosition(); + + + @Override + protected TestSearchScope getScope() { + return getConfiguration().getConfigurationModule().getModule() != null ? TestSearchScope.MODULE_WITH_DEPENDENCIES : TestSearchScope.WHOLE_PROJECT; + } + + @Override + protected boolean forkPerModule() { + return getConfiguration().getConfigurationModule().getModule() == null; + } + + @Override + protected PsiElement retrievePsiElement(Object pattern) { + if (pattern instanceof String) { + final String className = StringUtil.getPackageName((String)pattern, ','); + if (!pattern.equals(className)) { + final Project project = getConfiguration().getProject(); + final JavaPsiFacade facade = JavaPsiFacade.getInstance(project); + final SourceScope sourceScope = getSourceScope(); + final GlobalSearchScope globalSearchScope = sourceScope != null ? sourceScope.getGlobalSearchScope() + : GlobalSearchScope.projectScope(project); + return facade.findClass(className, globalSearchScope); + } + } + return null; + } + + @Override + public SearchForTestsTask createSearchingForTestsTask() { + return new SearchForTestsTask(getConfiguration().getProject(), myServerSocket) { + + private Set myPatterns; + + @Override + protected void search() throws ExecutionException { + myPatterns = TestDiscoverySearchHelper.search(getProject(), getPosition(), getChangeList(), getConfiguration().getFrameworkPrefix()); + } + + @Override + protected void onFound() { + if (myPatterns != null) { + try { + addClassesListToJavaParameters(myPatterns, FunctionUtil.id(), "", false, getJavaParameters()); + } + catch (ExecutionException ignored) { + } + } + } + }; + } + + @Override + protected JavaParameters createJavaParameters() throws ExecutionException { + final JavaParameters javaParameters = super.createJavaParameters(); + createTempFiles(javaParameters); + + createServerSocket(javaParameters); + return javaParameters; + } + + @Override + public String suggestActionName() { + return ""; + } + + @Override + public RefactoringElementListener getListener(PsiElement element, JUnitConfiguration configuration) { + return null; + } + + @Override + public boolean isConfiguredByElement(JUnitConfiguration configuration, + PsiClass testClass, + PsiMethod testMethod, + PsiPackage testPackage, + PsiDirectory testDir) { + return false; + } +} diff --git a/plugins/junit/src/com/intellij/execution/junit/testDiscovery/TestBySource.java b/plugins/junit/src/com/intellij/execution/junit/testDiscovery/TestBySource.java new file mode 100644 index 000000000000..fc254f08632d --- /dev/null +++ b/plugins/junit/src/com/intellij/execution/junit/testDiscovery/TestBySource.java @@ -0,0 +1,38 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * 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.intellij.execution.junit.testDiscovery; + +import com.intellij.execution.junit.JUnitConfiguration; +import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.openapi.util.Pair; + +public class TestBySource extends JUnitTestDiscoveryRunnableState { + public TestBySource(JUnitConfiguration configuration, + ExecutionEnvironment environment) { + super(configuration, environment); + } + + @Override + protected String getChangeList() { + return null; + } + + @Override + protected Pair getPosition() { + final JUnitConfiguration.Data data = getConfiguration().getPersistentData(); + return Pair.create(data.getMainClassName(), data.getMethodName()); + } +} diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java index ee86a0e129d7..8bca4b127c11 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java @@ -42,6 +42,7 @@ import com.intellij.openapi.ui.*; import com.intellij.openapi.ui.ex.MessagesEx; import com.intellij.openapi.util.Condition; import com.intellij.openapi.util.io.FileUtil; +import com.intellij.openapi.util.registry.Registry; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; @@ -71,8 +72,8 @@ public class JUnitConfigurable extends SettingsEdi new TIntArrayList(new int[]{1, 2}), new TIntArrayList(new int[]{3}), new TIntArrayList(new int[]{4}), - new TIntArrayList(new int[]{5}) - ); + new TIntArrayList(new int[]{5}), + new TIntArrayList(new int[]{1, 2})); private static final String[] FORK_MODE_ALL = {JUnitConfiguration.FORK_NONE, JUnitConfiguration.FORK_METHOD, JUnitConfiguration.FORK_KLASS}; private static final String[] FORK_MODE = {JUnitConfiguration.FORK_NONE, JUnitConfiguration.FORK_METHOD}; @@ -158,6 +159,9 @@ public class JUnitConfigurable extends SettingsEdi aModel.addElement(JUnitConfigurationModel.CLASS); aModel.addElement(JUnitConfigurationModel.METHOD); aModel.addElement(JUnitConfigurationModel.CATEGORY); + if (Registry.is("testDiscovery.enabled")) { + aModel.addElement(JUnitConfigurationModel.BY_SOURCE_POSITION); + } myTypeChooser.setModel(aModel); myTypeChooser.setRenderer(new ListCellRendererWrapper() { @Override @@ -181,6 +185,9 @@ public class JUnitConfigurable extends SettingsEdi case JUnitConfigurationModel.CATEGORY: setText("Category"); break; + case JUnitConfigurationModel.BY_SOURCE_POSITION: + setText("Source location"); + break; } } }); @@ -359,7 +366,7 @@ public class JUnitConfigurable extends SettingsEdi myForkCb.setModel(getForkModelBasedOnRepeat()); myForkCb.setSelectedItem(selectedItem != JUnitConfiguration.FORK_KLASS ? selectedItem : JUnitConfiguration.FORK_METHOD); } - else if (selectedType == JUnitConfigurationModel.METHOD){ + else if (selectedType == JUnitConfigurationModel.METHOD || selectedType == JUnitConfigurationModel.BY_SOURCE_POSITION){ myPackagePanel.setVisible(false); myScopesPanel.setVisible(false); myPattern.setVisible(false); diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurationModel.java b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurationModel.java index 15325555956d..bc440fbd836f 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurationModel.java +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurationModel.java @@ -43,6 +43,7 @@ public class JUnitConfigurationModel { public static final int PATTERN = 3; public static final int DIR = 4; public static final int CATEGORY = 5; + public static final int BY_SOURCE_POSITION = 6; private static final List ourTestObjects; @@ -52,7 +53,8 @@ public class JUnitConfigurationModel { JUnitConfiguration.TEST_METHOD, JUnitConfiguration.TEST_PATTERN, JUnitConfiguration.TEST_DIRECTORY, - JUnitConfiguration.TEST_CATEGORY); + JUnitConfiguration.TEST_CATEGORY, + JUnitConfiguration.BY_SOURCE_POSITION); } diff --git a/plugins/testng/src/META-INF/plugin.xml b/plugins/testng/src/META-INF/plugin.xml index 26d66662e5dc..adcba4c0025d 100644 --- a/plugins/testng/src/META-INF/plugin.xml +++ b/plugins/testng/src/META-INF/plugin.xml @@ -72,7 +72,6 @@ - diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java index a9ee30adcd1b..278114640cf0 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfiguration.java @@ -47,6 +47,7 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.refactoring.listeners.RefactoringElementAdapter; import com.intellij.refactoring.listeners.RefactoringElementListener; import com.intellij.refactoring.listeners.UndoRefactoringElementListener; +import com.theoryinpractice.testng.configuration.testDiscovery.TestNGTestDiscoveryRunnableState; import com.theoryinpractice.testng.model.TestData; import com.theoryinpractice.testng.model.TestNGConsoleProperties; import com.theoryinpractice.testng.model.TestNGTestObject; @@ -128,6 +129,10 @@ public class TestNGConfiguration extends JavaTestConfigurationBase { } public RunProfileState getState(@NotNull final Executor executor, @NotNull final ExecutionEnvironment env) throws ExecutionException { + final TestData data = getPersistantData(); + if (data.TEST_OBJECT.equals(TestType.SOURCE.getType()) || data.getChangeList() != null) { + return new TestNGTestDiscoveryRunnableState(env, this); + } return new TestNGRunnableState(env, this); } @@ -439,4 +444,9 @@ public class TestNGConfiguration extends JavaTestConfigurationBase { .collect(Collectors.toSet()); return groups.isEmpty() ? null : groups; } + + public void beFromSourcePosition(PsiLocation position) { + setMethodConfiguration(position); + getPersistantData().TEST_OBJECT = TestType.SOURCE.getType(); + } } diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.form b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.form index 6dcebbbfb117..68d67c975184 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.form +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.form @@ -243,7 +243,7 @@ - + @@ -251,59 +251,25 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java index 2d954563d7cb..5a42c4cacb96 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGConfigurationEditor.java @@ -49,6 +49,7 @@ import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.ui.*; +import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBList; import com.intellij.ui.table.TableView; import com.intellij.util.IconUtil; @@ -71,6 +72,7 @@ import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; +import java.util.Arrays; import java.util.Map; public class TestNGConfigurationEditor extends SettingsEditor implements PanelWithAnchor { @@ -83,12 +85,8 @@ public class TestNGConfigurationEditor extends Se private LabeledComponent moduleClasspath; private JrePathEditor alternateJDK; private final ConfigurationModuleSelector moduleSelector; - private JRadioButton suiteTest; - private JRadioButton packageTest; - private JRadioButton classTest; - private JRadioButton methodTest; - private JRadioButton groupTest; - private JRadioButton patternTest; + private JComboBox myTestKind; + private JBLabel myTestLabel; private final TestNGConfigurationModel model; private LabeledComponent methodField; private LabeledComponent packageField; @@ -160,31 +158,21 @@ public class TestNGConfigurationEditor extends Se }); panel.add(editBtn, BorderLayout.EAST); - registerListener(new JRadioButton[]{packageTest, classTest, methodTest, groupTest, suiteTest, patternTest}, new ChangeListener() { - public void stateChanged(ChangeEvent e) { - ButtonModel buttonModel = (ButtonModel)e.getSource(); - if (buttonModel.isSelected()) { - if (buttonModel == packageTest.getModel()) { - model.setType(TestType.PACKAGE); - } - else if (buttonModel == classTest.getModel()) { - model.setType(TestType.CLASS); - } - else if (buttonModel == methodTest.getModel()) { - model.setType(TestType.METHOD); - } - else if (buttonModel == groupTest.getModel()) { - model.setType(TestType.GROUP); - } - else if (buttonModel == suiteTest.getModel()) { - model.setType(TestType.SUITE); - } - else if (buttonModel == patternTest.getModel()) { - model.setType(TestType.PATTERN); - } - } + myTestKind.setModel(new CollectionComboBoxModel<>(Arrays.asList(TestType.values()))); + myTestKind.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + model.setType((TestType)myTestKind.getSelectedItem()); } }); + myTestKind.setRenderer(new ListCellRendererWrapper() { + @Override + public void customize(JList list, TestType value, int index, boolean selected, boolean hasFocus) { + if (value != null) { + setText(value.getPresentableName()); + } + } + }); registerListener(new JRadioButton[]{packagesInProject, packagesInModule, packagesAcrossModules}, null); packagesInProject.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { @@ -236,7 +224,8 @@ public class TestNGConfigurationEditor extends Se } private void redisplay() { - if (packageTest.isSelected()) { + final TestType testKind = (TestType)myTestKind.getSelectedItem(); + if (testKind == TestType.PACKAGE) { packagePanel.setVisible(true); packageField.setVisible(true); classField.setVisible(false); @@ -245,7 +234,7 @@ public class TestNGConfigurationEditor extends Se suiteField.setVisible(false); myPattern.setVisible(false); } - else if (classTest.isSelected()) { + else if (testKind == TestType.CLASS) { packagePanel.setVisible(false); classField.setVisible(true); methodField.setVisible(false); @@ -253,7 +242,7 @@ public class TestNGConfigurationEditor extends Se suiteField.setVisible(false); myPattern.setVisible(false); } - else if (methodTest.isSelected()) { + else if (testKind == TestType.METHOD || testKind == TestType.SOURCE) { packagePanel.setVisible(false); classField.setVisible(true); methodField.setVisible(true); @@ -261,7 +250,7 @@ public class TestNGConfigurationEditor extends Se suiteField.setVisible(false); myPattern.setVisible(false); } - else if (groupTest.isSelected()) { + else if (testKind == TestType.GROUP) { packagePanel.setVisible(true); classField.setVisible(false); methodField.setVisible(false); @@ -269,7 +258,7 @@ public class TestNGConfigurationEditor extends Se suiteField.setVisible(false); myPattern.setVisible(false); } - else if (suiteTest.isSelected()) { + else if (testKind == TestType.SUITE) { packagePanel.setVisible(true); classField.setVisible(false); methodField.setVisible(false); @@ -277,7 +266,7 @@ public class TestNGConfigurationEditor extends Se suiteField.setVisible(true); myPattern.setVisible(false); } - else if (patternTest.isSelected()) { + else if (testKind == TestType.PATTERN) { packagePanel.setVisible(true); classField.setVisible(false); methodField.setVisible(false); @@ -327,7 +316,8 @@ public class TestNGConfigurationEditor extends Se model.apply(getModuleSelector().getModule(), config); getModuleSelector().applyTo(config); TestData data = config.getPersistantData(); - if (!classTest.isSelected() && !methodTest.isSelected()) { + final TestType testKind = (TestType)myTestKind.getSelectedItem(); + if (testKind != TestType.CLASS && testKind != TestType.METHOD && testKind != TestType.SOURCE) { if (packagesInProject.isSelected()) { data.setScope(TestSearchScope.WHOLE_PROJECT); } @@ -379,6 +369,7 @@ public class TestNGConfigurationEditor extends Se outputDirectory.setAnchor(anchor); classField.setAnchor(anchor); myPattern.setAnchor(anchor); + myTestLabel.setAnchor(anchor); } private static void registerListener(JRadioButton[] buttons, ChangeListener changelistener) { @@ -393,17 +384,6 @@ public class TestNGConfigurationEditor extends Se private void createView() { commonParametersPanel.add(commonJavaParameters, BorderLayout.CENTER); - - packageTest.setSelected(false); - suiteTest.setSelected(false); - suiteTest.setEnabled(true); - groupTest.setSelected(false); - groupTest.setEnabled(true); - classTest.setSelected(false); - classTest.setEnabled(true); - patternTest.setSelected(false); - patternTest.setEnabled(true); - classField.setComponent(new EditorTextFieldWithBrowseButton(project, true, new JavaCodeFragment.VisibilityChecker() { @Override public Visibility isDeclarationVisible(PsiElement declaration, PsiElement place) { @@ -503,8 +483,8 @@ public class TestNGConfigurationEditor extends Se public void onTypeChanged(TestType type) { //LOGGER.info("onTypeChanged with " + type); + myTestKind.setSelectedItem(type); if (type == TestType.PACKAGE) { - packageTest.setSelected(true); packageField.setEnabled(true); classField.setEnabled(false); methodField.setEnabled(false); @@ -513,7 +493,6 @@ public class TestNGConfigurationEditor extends Se myPattern.setEnabled(false); } else if (type == TestType.CLASS) { - classTest.setSelected(true); packageField.setEnabled(false); classField.setEnabled(true); methodField.setEnabled(false); @@ -521,8 +500,7 @@ public class TestNGConfigurationEditor extends Se suiteField.setEnabled(false); myPattern.setEnabled(false); } - else if (type == TestType.METHOD) { - methodTest.setSelected(true); + else if (type == TestType.METHOD || type == TestType.SOURCE) { packageField.setEnabled(false); classField.setEnabled(true); methodField.setEnabled(true); @@ -531,7 +509,6 @@ public class TestNGConfigurationEditor extends Se myPattern.setEnabled(false); } else if (type == TestType.GROUP) { - groupTest.setSelected(true); groupField.setEnabled(true); packageField.setVisible(false); classField.setEnabled(false); @@ -540,7 +517,6 @@ public class TestNGConfigurationEditor extends Se myPattern.setEnabled(false); } else if (type == TestType.SUITE) { - suiteTest.setSelected(true); suiteField.setEnabled(true); packageField.setVisible(false); classField.setEnabled(false); @@ -549,7 +525,6 @@ public class TestNGConfigurationEditor extends Se myPattern.setEnabled(false); } else if (type == TestType.PATTERN) { - patternTest.setSelected(true); myPattern.setEnabled(true); suiteField.setEnabled(false); packageField.setVisible(false); diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGDebuggerRunner.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGDebuggerRunner.java index bdd14ce60176..80c682cfc494 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGDebuggerRunner.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/TestNGDebuggerRunner.java @@ -17,15 +17,13 @@ package com.theoryinpractice.testng.configuration; import com.intellij.execution.JavaTestFrameworkDebuggerRunner; import com.intellij.execution.configurations.RunProfile; -import com.theoryinpractice.testng.configuration.testDiscovery.TestNGTestDiscoveryConfiguration; import org.jetbrains.annotations.NotNull; public class TestNGDebuggerRunner extends JavaTestFrameworkDebuggerRunner { @Override protected boolean validForProfile(@NotNull RunProfile profile) { - return profile instanceof TestNGConfiguration || - profile instanceof TestNGTestDiscoveryConfiguration; + return profile instanceof TestNGConfiguration; } @NotNull diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfiguration.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfiguration.java deleted file mode 100644 index 0b89cbca9a68..000000000000 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfiguration.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * 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.theoryinpractice.testng.configuration.testDiscovery; - -import com.intellij.execution.CantRunException; -import com.intellij.execution.ExecutionException; -import com.intellij.execution.Executor; -import com.intellij.execution.configurations.*; -import com.intellij.execution.runners.ExecutionEnvironment; -import com.intellij.execution.testDiscovery.TestDiscoveryConfiguration; -import com.intellij.execution.testDiscovery.TestDiscoverySearchHelper; -import com.intellij.execution.testframework.TestSearchScope; -import com.intellij.openapi.module.Module; -import com.intellij.openapi.project.Project; -import com.intellij.psi.PsiElement; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.refactoring.listeners.RefactoringElementListener; -import com.theoryinpractice.testng.configuration.SearchingForTestsTask; -import com.theoryinpractice.testng.configuration.TestNGConfiguration; -import com.theoryinpractice.testng.configuration.TestNGConfigurationType; -import com.theoryinpractice.testng.configuration.TestNGRunnableState; -import com.theoryinpractice.testng.model.TestNGTestPattern; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; - -import java.util.Set; - -public class TestNGTestDiscoveryConfiguration extends TestDiscoveryConfiguration { - - public TestNGTestDiscoveryConfiguration(String name, Project project, ConfigurationFactory factory) { - super(name, new JavaRunConfigurationModule(project, false), factory, - new TestNGConfiguration("", project, TestNGConfigurationType.getInstance().getConfigurationFactories()[0])); - } - - @Nullable - @Override - public RunProfileState getState(@NotNull Executor executor, @NotNull ExecutionEnvironment environment) throws ExecutionException { - return new TestNGTestDiscoveryRunnableState(environment); - } - - @Nullable - @Override - public RefactoringElementListener getRefactoringElementListener(PsiElement element) { - return null; - } - - @NotNull - @Override - public String getFrameworkPrefix() { - return "g"; - } - - private class TestNGTestDiscoveryRunnableState extends TestNGRunnableState { - public TestNGTestDiscoveryRunnableState(ExecutionEnvironment environment) { - super(environment, ((TestNGConfiguration)myDelegate)); - } - - @Override - protected TestSearchScope getScope() { - return TestSearchScope.MODULE_WITH_DEPENDENCIES; - } - - @Override - protected boolean forkPerModule() { - return getConfigurationModule().getModule() == null; - } - - @Override - public SearchingForTestsTask createSearchingForTestsTask() { - return new SearchingForTestsTask(myServerSocket, getConfiguration(), myTempFile, client) { - @Override - protected void search() throws CantRunException { - myClasses.clear(); - final Set patterns = TestDiscoverySearchHelper.search(getProject(), getPosition(), getChangeList(), getFrameworkPrefix()); - final Module module = getConfigurationModule().getModule(); - final GlobalSearchScope searchScope = - module != null ? GlobalSearchScope.moduleWithDependenciesScope(module) : GlobalSearchScope.projectScope(getProject()); - TestNGTestPattern.fillTestObjects(myClasses, patterns, TestSearchScope.MODULE_WITH_DEPENDENCIES, - TestNGTestDiscoveryConfiguration.this, searchScope); - } - - @Override - protected void onFound() { - super.onFound(); - writeClassesPerModule(myClasses); - } - }; - } - } -} diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfigurationProducer.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfigurationProducer.java index 8d1e95bf00d6..01833657345e 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfigurationProducer.java +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfigurationProducer.java @@ -15,11 +15,33 @@ */ package com.theoryinpractice.testng.configuration.testDiscovery; +import com.intellij.execution.JavaTestConfigurationBase; +import com.intellij.execution.PsiLocation; import com.intellij.execution.configurations.ConfigurationTypeUtil; import com.intellij.execution.testDiscovery.TestDiscoveryConfigurationProducer; +import com.intellij.openapi.util.Pair; +import com.intellij.psi.PsiMethod; +import com.theoryinpractice.testng.configuration.TestNGConfiguration; +import com.theoryinpractice.testng.configuration.TestNGConfigurationType; +import com.theoryinpractice.testng.model.TestData; +import com.theoryinpractice.testng.model.TestType; public class TestNGTestDiscoveryConfigurationProducer extends TestDiscoveryConfigurationProducer { protected TestNGTestDiscoveryConfigurationProducer() { - super(ConfigurationTypeUtil.findConfigurationType(TestNGTestDiscoveryConfigurationType.class)); + super(TestNGConfigurationType.getInstance()); + } + + @Override + protected void setPosition(JavaTestConfigurationBase configuration, PsiLocation position) { + ((TestNGConfiguration)configuration).beFromSourcePosition(position); + } + + @Override + protected Pair getPosition(JavaTestConfigurationBase configuration) { + final TestData data = ((TestNGConfiguration)configuration).getPersistantData(); + if (data.TEST_OBJECT.equals(TestType.SOURCE.getType())) { + return Pair.create(data.getMainClassName(), data.getMethodName()); + } + return null; } } diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfigurationType.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfigurationType.java deleted file mode 100644 index 1a80550ec633..000000000000 --- a/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryConfigurationType.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2000-2015 JetBrains s.r.o. - * - * 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.theoryinpractice.testng.configuration.testDiscovery; - -import com.intellij.execution.configuration.ConfigurationFactoryEx; -import com.intellij.execution.configurations.ConfigurationFactory; -import com.intellij.execution.configurations.ConfigurationType; -import com.intellij.execution.configurations.ModuleBasedConfiguration; -import com.intellij.execution.configurations.RunConfiguration; -import com.intellij.icons.AllIcons; -import com.intellij.openapi.project.Project; -import icons.TestngIcons; -import org.jetbrains.annotations.NotNull; - -import javax.swing.*; - -public class TestNGTestDiscoveryConfigurationType implements ConfigurationType { - private final ConfigurationFactory myFactory; - - public TestNGTestDiscoveryConfigurationType() { - myFactory = new ConfigurationFactoryEx(this) { - public RunConfiguration createTemplateConfiguration(Project project) { - return new TestNGTestDiscoveryConfiguration("", project, this); - } - - @Override - public void onNewConfigurationCreated(@NotNull RunConfiguration configuration) { - ((ModuleBasedConfiguration)configuration).onNewConfigurationCreated(); - } - }; - } - - @Override - public String getDisplayName() { - return "TestNG Test Discovery"; - } - - @Override - public String getConfigurationTypeDescription() { - return "Runs TestNG tests which passed changed code"; - } - - @Override - public Icon getIcon() { - return TestngIcons.TestNG; - } - - @NotNull - @Override - public String getId() { - return "TestNGTestDiscovery"; - } - - @Override - public ConfigurationFactory[] getConfigurationFactories() { - return new ConfigurationFactory[] {myFactory}; - } -} diff --git a/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryRunnableState.java b/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryRunnableState.java new file mode 100644 index 000000000000..fc4f12e54d98 --- /dev/null +++ b/plugins/testng/src/com/theoryinpractice/testng/configuration/testDiscovery/TestNGTestDiscoveryRunnableState.java @@ -0,0 +1,76 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * 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.theoryinpractice.testng.configuration.testDiscovery; + +import com.intellij.execution.CantRunException; +import com.intellij.execution.runners.ExecutionEnvironment; +import com.intellij.execution.testDiscovery.TestDiscoverySearchHelper; +import com.intellij.execution.testframework.TestSearchScope; +import com.intellij.openapi.module.Module; +import com.intellij.openapi.util.Pair; +import com.intellij.psi.search.GlobalSearchScope; +import com.theoryinpractice.testng.configuration.SearchingForTestsTask; +import com.theoryinpractice.testng.configuration.TestNGConfiguration; +import com.theoryinpractice.testng.configuration.TestNGRunnableState; +import com.theoryinpractice.testng.model.TestData; +import com.theoryinpractice.testng.model.TestNGTestPattern; +import com.theoryinpractice.testng.model.TestType; + +import java.util.Set; + +public class TestNGTestDiscoveryRunnableState extends TestNGRunnableState { + + public TestNGTestDiscoveryRunnableState(ExecutionEnvironment environment, + TestNGConfiguration configuration) { + super(environment, configuration); + } + + @Override + protected TestSearchScope getScope() { + return TestSearchScope.MODULE_WITH_DEPENDENCIES; + } + + @Override + protected boolean forkPerModule() { + return getConfiguration().getConfigurationModule().getModule() == null; + } + + @Override + public SearchingForTestsTask createSearchingForTestsTask() { + return new SearchingForTestsTask(myServerSocket, getConfiguration(), myTempFile, client) { + @Override + protected void search() throws CantRunException { + myClasses.clear(); + final TestData data = getConfiguration().getPersistantData(); + final Pair position = data.TEST_OBJECT.equals(TestType.SOURCE.getType()) + ? Pair.create(data.getMainClassName(), data.getMethodName()) : null; + final Set patterns = TestDiscoverySearchHelper + .search(getProject(), position, data.getChangeList(), getConfiguration().getFrameworkPrefix()); + final Module module = getConfiguration().getConfigurationModule().getModule(); + final GlobalSearchScope searchScope = + module != null ? GlobalSearchScope.moduleWithDependenciesScope(module) : GlobalSearchScope.projectScope(getProject()); + TestNGTestPattern.fillTestObjects(myClasses, patterns, TestSearchScope.MODULE_WITH_DEPENDENCIES, + getConfiguration(), searchScope); + } + + @Override + protected void onFound() { + super.onFound(); + writeClassesPerModule(myClasses); + } + }; + } +} diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestData.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestData.java index a83e58840093..5b86ccab78d7 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestData.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestData.java @@ -24,6 +24,7 @@ import com.intellij.execution.testframework.TestSearchScope; import com.intellij.openapi.module.Module; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Comparing; +import com.intellij.openapi.util.Pair; import com.intellij.psi.PsiClass; import com.intellij.psi.PsiMethod; import com.intellij.psi.PsiPackage; @@ -57,6 +58,7 @@ public class TestData implements Cloneable public boolean USE_DEFAULT_REPORTERS = false; public String PROPERTIES_FILE; private LinkedHashSet myPatterns = new LinkedHashSet(); + private String myChangeList; public TestData() { TEST_OBJECT = TestType.CLASS.getType(); @@ -220,4 +222,12 @@ public class TestData implements Cloneable public void setPatterns(LinkedHashSet set) { myPatterns = set; } + + public String getChangeList() { + return myChangeList; + } + + public void setChangeList(String changeList) { + myChangeList = changeList; + } } diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGConfigurationModel.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGConfigurationModel.java index 2be2d936b2eb..db6076395e01 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGConfigurationModel.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGConfigurationModel.java @@ -47,7 +47,7 @@ public class TestNGConfigurationModel private final Project project; public TestNGConfigurationModel(Project project) { - type = TestType.INVALID; + type = TestType.CLASS; for (int i = 3; i < typeDocuments.length; i++) typeDocuments[i] = new PlainDocument(); diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGSource.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGSource.java new file mode 100644 index 000000000000..6037d99827d7 --- /dev/null +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGSource.java @@ -0,0 +1,52 @@ +/* + * Copyright 2000-2016 JetBrains s.r.o. + * + * 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.theoryinpractice.testng.model; + +import com.intellij.execution.CantRunException; +import com.intellij.execution.configurations.RuntimeConfigurationException; +import com.intellij.openapi.util.Pair; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.PsiClass; +import com.intellij.psi.PsiMethod; +import com.theoryinpractice.testng.configuration.TestNGConfiguration; + +import java.util.List; +import java.util.Map; + +public class TestNGSource extends TestNGTestMethod { + public TestNGSource(TestNGConfiguration config) { + super(config); + } + + @Override + public void fillTestObjects(Map>> classes) throws CantRunException {} + + @Override + public String getGeneratedName() { + final TestData data = myConfig.getPersistantData(); + return "Tests for " + StringUtil.getQualifiedName(data.getMainClassName(), data.getMethodName()); + } + + @Override + public String getActionName() { + return getGeneratedName(); + } + + @Override + public void checkConfiguration() throws RuntimeConfigurationException { + super.checkConfiguration(); + } +} diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGTestObject.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGTestObject.java index 64e7f1c14a1e..d63a6199c1f9 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestNGTestObject.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestNGTestObject.java @@ -72,6 +72,10 @@ public abstract class TestNGTestObject { if (testObject.equals(TestType.SUITE.getType())){ return new TestNGTestSuite(config); } + + if (testObject.equals(TestType.SOURCE.getType())) { + return new TestNGSource(config); + } assert false : testObject; return null; } diff --git a/plugins/testng/src/com/theoryinpractice/testng/model/TestType.java b/plugins/testng/src/com/theoryinpractice/testng/model/TestType.java index 788c6cd58641..c61adb7c0e22 100644 --- a/plugins/testng/src/com/theoryinpractice/testng/model/TestType.java +++ b/plugins/testng/src/com/theoryinpractice/testng/model/TestType.java @@ -22,21 +22,24 @@ */ package com.theoryinpractice.testng.model; -public class TestType +public enum TestType { - public static final TestType INVALID = new TestType("INVALID", -1); - public static final TestType PACKAGE = new TestType("PACKAGE", 0); - public static final TestType CLASS = new TestType("CLASS", 1); - public static final TestType METHOD = new TestType("METHOD", 2); - public static final TestType GROUP = new TestType("GROUP", 3); - public static final TestType SUITE = new TestType("SUITE", 4); - public static final TestType PATTERN = new TestType("PATTERN", 5); + + PACKAGE("PACKAGE", "All in package", 0), + CLASS ("CLASS", "Class", 1), + METHOD ("METHOD", "Method", 2), + GROUP ("GROUP", "Group", 3), + SUITE ("SUITE", "Suite", 4), + PATTERN("PATTERN", "Pattern", 5), + SOURCE ("SOURCE", "Source location", 6); public final String type; + private final String presentableName; public final int value; - private TestType(String type, int value) { + TestType(String type, String presentableName, int value) { this.type = type; + this.presentableName = presentableName; this.value = value; } @@ -47,36 +50,8 @@ public class TestType public int getValue() { return value; } - - public static TestType valueOf(String type) - { - if(INVALID.type.equals(type)) - { - return INVALID; - } - if(PACKAGE.type.equals(type)) - { - return PACKAGE; - } - if(CLASS.type.equals(type)) - { - return CLASS; - } - if(METHOD.type.equals(type)) - { - return METHOD; - } - if(GROUP.type.equals(type)) - { - return GROUP; - } - if(SUITE.type.equals(type)) - { - return SUITE; - } - if (PATTERN.type.equals(type)) { - return PATTERN; - } - throw new IllegalArgumentException("Invalid type requested " + type); + + public String getPresentableName() { + return presentableName; } } \ No newline at end of file