<errorHandler implementation="com.intellij.diagnostic.ITNReporter"/>
<deadCode implementation="com.theoryinpractice.testng.inspection.TestNGEntryPoint"/>
<cantBeStatic implementation="com.theoryinpractice.testng.inspection.TestNGCanBeStaticExtension" />
+ <configurationProducer implementation="com.theoryinpractice.testng.configuration.TestNGPatternConfigurationProducer"/>
<configurationProducer implementation="com.theoryinpractice.testng.configuration.TestNGInClassConfigurationProducer"/>
<configurationProducer implementation="com.theoryinpractice.testng.configuration.TestNGPackageConfigurationProducer"/>
<configurationProducer implementation="com.theoryinpractice.testng.configuration.TestNGSuiteConfigurationProducer"/>
}
}
}
+ else if (data.TEST_OBJECT.equals(TestType.PATTERN.getType())) {
+ for (final String className : data.getPatterns()) {
+ final PsiClass psiClass = ApplicationManager.getApplication().runReadAction(new Computable<PsiClass>() {
+ @Nullable
+ @Override
+ public PsiClass compute() {
+ return ClassUtil.findPsiClass(psiManager, className.replace('/', '.'), null, true, getSearchScope());
+ }
+ });
+ if (psiClass == null) {
+ throw new CantRunException("Class " + className + " not found");
+ }
+ if (ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
+ @Override
+ public Boolean compute() {
+ return TestNGUtil.hasTest(psiClass);
+ }
+ })) {
+ calculateDependencies(null, classes, psiClass);
+ } else {
+ throw new CantRunException("No tests found in class " + className);
+ }
+ }
+ }
}
private Map<String, String> buildTestParameters() {
import com.intellij.refactoring.listeners.UndoRefactoringElementListener;
import com.theoryinpractice.testng.model.TestData;
import com.theoryinpractice.testng.model.TestType;
+import com.theoryinpractice.testng.util.TestNGUtil;
import org.jdom.Element;
+import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.testng.xml.Parser;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
public class TestNGConfiguration extends ModuleBasedConfiguration<JavaRunConfigurationModule>
implements CommonJavaRunConfigurationParameters, RefactoringListenerProvider {
+ @NonNls private static final String PATTERNS_EL_NAME = "patterns";
+ @NonNls private static final String PATTERN_EL_NAME = "pattern";
+ @NonNls private static final String TEST_CLASS_ATT_NAME = "testClass";
+
//private TestNGResultsContainer resultsContainer;
protected TestData data;
protected transient Project project;
catch (Exception e) {
throw new RuntimeConfigurationException("Unable to parse '" + data.getSuiteName() + "' specified");
}
+ } else if (data.TEST_OBJECT.equals(TestType.PATTERN.getType())) {
+ final Set<String> patterns = data.getPatterns();
+ if (patterns.isEmpty()) {
+ throw new RuntimeConfigurationWarning("No pattern selected");
+ }
+ final GlobalSearchScope searchScope = GlobalSearchScope.allScope(getProject());
+ for (String pattern : patterns) {
+ final PsiClass psiClass = JavaExecutionUtil.findMainClass(getProject(), pattern, searchScope);
+ if (psiClass == null) {
+ throw new RuntimeConfigurationWarning("Class " + pattern + " not found");
+ }
+ if (!TestNGUtil.hasTest(psiClass)) {
+ throw new RuntimeConfigurationWarning("Class " + pattern + " not a test");
+ }
+ }
}
JavaRunConfigurationExtensionManager.checkConfigurationIsValid(this);
//TODO add various checks here
listeners.add(listenerClassName.getAttributeValue("class"));
}
}
+ final Element patternsElement = element.getChild(PATTERNS_EL_NAME);
+ if (patternsElement != null) {
+ final Set<String> tests = new LinkedHashSet<String>();
+ for (Object o : patternsElement.getChildren(PATTERN_EL_NAME)) {
+ Element patternElement = (Element)o;
+ tests.add(patternElement.getAttributeValue(TEST_CLASS_ATT_NAME));
+ }
+ getPersistantData().setPatterns(tests);
+ }
}
@Override
listenerElement.setAttribute("class", listener);
listenersElement.addContent(listenerElement);
}
+ final Set<String> patterns = getPersistantData().getPatterns();
+ if (!patterns.isEmpty()) {
+ final Element patternsElement = new Element(PATTERNS_EL_NAME);
+ for (String o : patterns) {
+ final Element patternElement = new Element(PATTERN_EL_NAME);
+ patternElement.setAttribute(TEST_CLASS_ATT_NAME, o);
+ patternsElement.addContent(patternElement);
+ }
+ element.addContent(patternsElement);
+ }
PathMacroManager.getInstance(getProject()).collapsePathsRecursively(element);
}
<?xml version="1.0" encoding="UTF-8"?>
<form xmlns="http://www.intellij.com/uidesigner/form/" version="1" bind-to-class="com.theoryinpractice.testng.configuration.TestNGConfigurationEditor">
- <grid id="27dc6" binding="panel" layout-manager="GridLayoutManager" row-count="4" column-count="5" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+ <grid id="27dc6" binding="panel" layout-manager="GridLayoutManager" row-count="4" column-count="6" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
<xy x="20" y="20" width="772" height="523"/>
<text value="&Method"/>
</properties>
</component>
- <grid id="b9bd" layout-manager="GridLayoutManager" row-count="6" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
+ <grid id="b9bd" layout-manager="GridLayoutManager" row-count="7" column-count="1" same-size-horizontally="false" same-size-vertically="false" hgap="-1" vgap="-1">
<margin top="0" left="0" bottom="0" right="0"/>
<constraints>
- <grid row="1" column="0" row-span="1" col-span="5" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
+ <grid row="1" column="0" row-span="1" col-span="6" vsize-policy="3" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<clientProperties>
<colspec value="left:4dlu:noGrow"/>
<colspec value="fill:max(d;4px):grow"/>
<constraints>
- <grid row="4" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
+ <grid row="5" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="1" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties/>
<border type="none"/>
</component>
<component id="d1d3" class="com.intellij.openapi.ui.LabeledComponent" binding="outputDirectory">
<constraints>
- <grid row="5" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ <grid row="6" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
</constraints>
<properties>
<labelLocation value="West"/>
<text value="&Group"/>
</properties>
</component>
+ <component id="d64d9" class="com.intellij.openapi.ui.LabeledComponent" binding="myPattern">
+ <constraints>
+ <grid row="4" column="0" row-span="1" col-span="1" vsize-policy="0" hsize-policy="3" anchor="0" fill="1" indent="0" use-parent-layout="false"/>
+ </constraints>
+ <properties>
+ <componentClass value="javax.swing.JPanel"/>
+ <labelLocation value="West"/>
+ <text value="Pattern"/>
+ <visible value="true"/>
+ </properties>
+ </component>
</children>
</grid>
<tabbedpane id="7ce0a" class="com.intellij.ui.components.JBTabbedPane" default-binding="true">
<constraints>
- <grid row="2" column="0" row-span="1" col-span="5" vsize-policy="0" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
+ <grid row="2" column="0" row-span="1" col-span="6" vsize-policy="0" hsize-policy="3" anchor="0" fill="3" indent="0" use-parent-layout="false">
<preferred-size width="200" height="200"/>
</grid>
</constraints>
<grid row="3" column="0" row-span="1" col-span="1" vsize-policy="6" hsize-policy="1" anchor="0" fill="2" indent="0" use-parent-layout="false"/>
</constraints>
</vspacer>
+ <component id="99b4d" class="com.intellij.ui.components.JBRadioButton" binding="patternTest">
+ <constraints>
+ <grid row="0" column="5" row-span="1" col-span="1" vsize-policy="0" hsize-policy="0" anchor="0" fill="0" indent="0" use-parent-layout="false"/>
+ </constraints>
+ <properties>
+ <text value="Pattern"/>
+ </properties>
+ </component>
</children>
</grid>
<buttonGroups>
<group name="testGroup">
- <member id="dcd9c"/>
- <member id="d8c06"/>
<member id="5eaf8"/>
<member id="61e8b"/>
<member id="2ab9d"/>
+ <member id="dcd9c"/>
+ <member id="d8c06"/>
+ <member id="99b4d"/>
</group>
</buttonGroups>
</form>
import com.intellij.openapi.module.Module;
import com.intellij.openapi.options.SettingsEditor;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.ui.ComponentWithBrowseButton;
-import com.intellij.openapi.ui.LabeledComponent;
-import com.intellij.openapi.ui.TextFieldWithBrowseButton;
+import com.intellij.openapi.ui.*;
+import com.intellij.openapi.util.IconLoader;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.JavaCodeFragment;
import com.intellij.psi.PsiClass;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMethod;
import com.intellij.psi.search.GlobalSearchScope;
-import com.intellij.ui.PanelWithAnchor;
import com.intellij.ui.EditorTextFieldWithBrowseButton;
+import com.intellij.ui.PanelWithAnchor;
import com.intellij.ui.table.TableView;
+import com.intellij.util.PlatformIcons;
import com.intellij.util.TextFieldCompletionProvider;
import com.theoryinpractice.testng.MessageInfoException;
import com.theoryinpractice.testng.configuration.browser.*;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
+import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
import java.awt.*;
import java.awt.event.ActionEvent;
private JRadioButton classTest;
private JRadioButton methodTest;
private JRadioButton groupTest;
+ private JRadioButton patternTest;
private final TestNGConfigurationModel model;
private LabeledComponent<EditorTextFieldWithBrowseButton> methodField;
private LabeledComponent<EditorTextFieldWithBrowseButton> packageField;
private JList listenersTable;
private JButton removeListener;
private JCheckBox myUseDefaultReportersCheckBox;
+ private LabeledComponent<JPanel> myPattern;
+ TextFieldWithBrowseButton myPatternTextField;
private final CommonJavaParametersPanel commonJavaParameters = new CommonJavaParametersPanel();
private ArrayList<Map.Entry> propertiesList;
private TestNGListenersTableModel listenerModel;
public TestNGConfigurationEditor(Project project) {
this.project = project;
BrowseModuleValueActionListener[] browseListeners = new BrowseModuleValueActionListener[] {new PackageBrowser(project),
- new TestClassBrowser(project, this), new MethodBrowser(project, this), new GroupBrowser(project, this), new SuiteBrowser(project)};
+ new TestClassBrowser(project, this), new MethodBrowser(project, this), new GroupBrowser(project, this), new SuiteBrowser(project),
+ new TestClassBrowser(project, this){
+ @Override
+ protected void onClassChoosen(PsiClass psiClass) {
+ final JTextField textField = myPatternTextField.getTextField();
+ final String text = textField.getText();
+ textField.setText(text + (text.length() > 0 ? "||" : "") + psiClass.getQualifiedName());
+ }
+
+ @Override
+ public void actionPerformed(ActionEvent e) {
+ showDialog();
+ }
+ }};
model = new TestNGConfigurationModel(project);
model.setListener(this);
createView();
commonJavaParameters.setModuleContext(moduleSelector.getModule());
}
});
- registerListener(new JRadioButton[] {packageTest, classTest, methodTest, groupTest, suiteTest}, new ChangeListener()
+
+ final JPanel panel = myPattern.getComponent();
+ panel.setLayout(new BorderLayout());
+ myPatternTextField = new TextFieldWithBrowseButton();
+ myPatternTextField.setButtonIcon(PlatformIcons.ADD_ICON);
+ panel.add(myPatternTextField, BorderLayout.CENTER);
+ final FixedSizeButton editBtn = new FixedSizeButton();
+ editBtn.setIcon(IconLoader.getIcon("/actions/showViewer.png"));
+ editBtn.addActionListener(new ActionListener() {
+ public void actionPerformed(ActionEvent e) {
+ Messages.showTextAreaDialog(myPatternTextField.getTextField(), "Configure suite tests", "EditParametersPopupWindow");
+ }
+ });
+ 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();
model.setType(TestType.GROUP);
} else if (buttonModel == suiteTest.getModel()) {
model.setType(TestType.SUITE);
+ } else if (buttonModel == patternTest.getModel()) {
+ model.setType(TestType.PATTERN);
}
redisplay();
}
}
});
- LabeledComponent[] components = new LabeledComponent[] {packageField, classField, methodField, groupField, suiteField};
+ LabeledComponent[] components = new LabeledComponent[] {packageField, classField, methodField, groupField, suiteField, myPattern};
for (int i = 0; i < components.length; i++) {
- ComponentWithBrowseButton field = (ComponentWithBrowseButton)components[i].getComponent();
+ JComponent field = components[i].getComponent();
Object document = model.getDocument(i);
if (field instanceof TextFieldWithBrowseButton) {
((TextFieldWithBrowseButton)field).getTextField().setDocument((PlainDocument)document);
- } else {
- final com.intellij.openapi.editor.Document componentDocument = ((EditorTextFieldWithBrowseButton)field).getChildComponent().getDocument();
+ }
+ else if (field instanceof EditorTextFieldWithBrowseButton) {
+ final com.intellij.openapi.editor.Document componentDocument =
+ ((EditorTextFieldWithBrowseButton)field).getChildComponent().getDocument();
model.setDocument(i, componentDocument);
}
- browseListeners[i].setField(field);
+ else {
+ field = myPatternTextField;
+ document = new PlainDocument();
+ ((TextFieldWithBrowseButton)field).getTextField().setDocument((Document)document);
+ model.setDocument(i, document);
+ }
+
+ browseListeners[i].setField((ComponentWithBrowseButton)field);
}
model.setType(TestType.CLASS);
addListener.addActionListener(new AddTestListenerListener());
methodField.setVisible(false);
groupField.setVisible(false);
suiteField.setVisible(false);
+ myPattern.setVisible(false);
} else if (classTest.isSelected()) {
packagePanel.setVisible(false);
classField.setVisible(true);
methodField.setVisible(false);
groupField.setVisible(false);
suiteField.setVisible(false);
+ myPattern.setVisible(false);
} else if (methodTest.isSelected()) {
packagePanel.setVisible(false);
classField.setVisible(true);
methodField.setVisible(true);
groupField.setVisible(false);
suiteField.setVisible(false);
+ myPattern.setVisible(false);
} else if (groupTest.isSelected()) {
packagePanel.setVisible(false);
classField.setVisible(false);
methodField.setVisible(false);
groupField.setVisible(true);
suiteField.setVisible(false);
+ myPattern.setVisible(false);
} else if (suiteTest.isSelected()) {
packagePanel.setVisible(false);
classField.setVisible(false);
methodField.setVisible(false);
groupField.setVisible(false);
suiteField.setVisible(true);
+ myPattern.setVisible(false);
+ } else if (patternTest.isSelected()) {
+ packagePanel.setVisible(false);
+ classField.setVisible(false);
+ methodField.setVisible(false);
+ groupField.setVisible(false);
+ suiteField.setVisible(false);
+ myPattern.setVisible(true);
}
}
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
methodField.setEnabled(false);
groupField.setEnabled(false);
suiteField.setEnabled(false);
+ myPattern.setEnabled(false);
} else if (type == TestType.CLASS) {
classTest.setSelected(true);
packageField.setEnabled(false);
methodField.setEnabled(false);
groupField.setEnabled(false);
suiteField.setEnabled(false);
+ myPattern.setEnabled(false);
} else if (type == TestType.METHOD) {
methodTest.setSelected(true);
packageField.setEnabled(false);
methodField.setEnabled(true);
groupField.setEnabled(false);
suiteField.setEnabled(false);
+ myPattern.setEnabled(false);
} else if (type == TestType.GROUP) {
groupTest.setSelected(true);
groupField.setEnabled(true);
classField.setEnabled(false);
methodField.setEnabled(false);
suiteField.setEnabled(false);
+ myPattern.setEnabled(false);
} else if (type == TestType.SUITE) {
suiteTest.setSelected(true);
suiteField.setEnabled(true);
classField.setEnabled(false);
methodField.setEnabled(false);
groupField.setEnabled(false);
+ myPattern.setEnabled(false);
+ } else if (type == TestType.PATTERN) {
+ patternTest.setSelected(true);
+ myPattern.setEnabled(true);
+ suiteField.setEnabled(false);
+ packageField.setEnabled(false);
+ classField.setEnabled(false);
+ methodField.setEnabled(false);
+ groupField.setEnabled(false);
}
}
import com.intellij.execution.*;
import com.intellij.execution.actions.ConfigurationContext;
+import com.intellij.openapi.actionSystem.LangDataKeys;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.psi.*;
@Nullable
protected RunnerAndConfigurationSettings createConfigurationByElement(Location location, ConfigurationContext context) {
+ final PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(context.getDataContext());
+ if (elements != null && TestNGPatternConfigurationProducer.collectTestClasses(elements).size() > 1) {
+ return null;
+ }
+
PsiClass psiClass = null;
PsiElement element = location.getPsiElement();
while (element != null) {
--- /dev/null
+/*
+ * Copyright 2000-2012 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.
+ */
+
+/*
+ * User: anna
+ * Date: 23-May-2007
+ */
+package com.theoryinpractice.testng.configuration;
+
+import com.intellij.execution.JavaRunConfigurationExtensionManager;
+import com.intellij.execution.Location;
+import com.intellij.execution.RunnerAndConfigurationSettings;
+import com.intellij.execution.actions.ConfigurationContext;
+import com.intellij.execution.junit.JUnitUtil;
+import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.actionSystem.LangDataKeys;
+import com.intellij.openapi.project.Project;
+import com.intellij.openapi.util.Comparing;
+import com.intellij.psi.PsiClass;
+import com.intellij.psi.PsiClassOwner;
+import com.intellij.psi.PsiElement;
+import com.intellij.psi.PsiFile;
+import com.theoryinpractice.testng.model.TestData;
+import com.theoryinpractice.testng.model.TestType;
+import com.theoryinpractice.testng.util.TestNGUtil;
+import org.jetbrains.annotations.NotNull;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+public class TestNGPatternConfigurationProducer extends TestNGConfigurationProducer{
+
+ private PsiElement[] myElements;
+
+
+ public int compareTo(Object o) {
+ return PREFERED;
+ }
+
+ protected RunnerAndConfigurationSettings createConfigurationByElement(final Location location, final ConfigurationContext context) {
+ final Project project = location.getProject();
+ final LinkedHashSet<String> classes = new LinkedHashSet<String>();
+ myElements = collectPatternElements(context, classes);
+ if (classes.size() <= 1) return null;
+ RunnerAndConfigurationSettings settings = cloneTemplateConfiguration(project, context);
+ final TestNGConfiguration configuration = (TestNGConfiguration)settings.getConfiguration();
+ final TestData data = configuration.getPersistantData();
+ data.getPatterns().addAll(classes);
+ data.TEST_OBJECT = TestType.PATTERN.getType();
+ data.setScope(setupPackageConfiguration(context, project, configuration, data.getScope()));
+ configuration.setGeneratedName();
+ JavaRunConfigurationExtensionManager.getInstance().extendCreatedConfiguration(configuration, location);
+ return settings;
+ }
+
+ static Set<PsiClass> collectTestClasses(PsiElement[] psiElements) {
+ final Set<PsiClass> foundClasses = new LinkedHashSet<PsiClass>();
+ for (PsiElement psiElement : psiElements) {
+ if (psiElement instanceof PsiClassOwner) {
+ final PsiClass[] classes = ((PsiClassOwner)psiElement).getClasses();
+ for (PsiClass aClass : classes) {
+ if (JUnitUtil.isTestClass(aClass)) {
+ foundClasses.add(aClass);
+ }
+ }
+ } else if (psiElement instanceof PsiClass) {
+ if (TestNGUtil.hasTest((PsiClass)psiElement)) {
+ foundClasses.add((PsiClass)psiElement);
+ }
+ }
+ }
+ return foundClasses;
+ }
+
+ private static PsiElement[] collectPatternElements(ConfigurationContext context, LinkedHashSet<String> classes) {
+ final DataContext dataContext = context.getDataContext();
+ PsiElement[] elements = LangDataKeys.PSI_ELEMENT_ARRAY.getData(dataContext);
+ if (elements != null) {
+ for (PsiClass psiClass : collectTestClasses(elements)) {
+ classes.add(psiClass.getQualifiedName());
+ }
+ return elements;
+ } else {
+ final PsiFile file = LangDataKeys.PSI_FILE.getData(dataContext);
+ if (file instanceof PsiClassOwner) {
+ for (PsiClass psiClass : collectTestClasses(((PsiClassOwner)file).getClasses())) {
+ classes.add(psiClass.getQualifiedName());
+ }
+ return new PsiElement[]{file};
+ }
+ }
+ return null;
+ }
+
+ public PsiElement getSourceElement() {
+ return myElements[0];
+ }
+
+ @Override
+ protected RunnerAndConfigurationSettings findExistingByElement(@NotNull Location location,
+ @NotNull RunnerAndConfigurationSettings[] existingConfigurations,
+ ConfigurationContext context) {
+ final LinkedHashSet<String> classes = new LinkedHashSet<String>();
+ collectPatternElements(context, classes);
+ for (RunnerAndConfigurationSettings existingConfiguration : existingConfigurations) {
+ final TestNGConfiguration unitConfiguration = (TestNGConfiguration)existingConfiguration.getConfiguration();
+ final String type = unitConfiguration.getPersistantData().TEST_OBJECT;
+ if (Comparing.equal(type, TestType.PATTERN.getType())) {
+ if (Comparing.equal(classes, unitConfiguration.getPersistantData().getPatterns())) {
+ return existingConfiguration;
+ }
+ }
+ }
+ return null;
+ }
+}
\ No newline at end of file
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
public List<String> TEST_LISTENERS = new ArrayList<String>();
public boolean USE_DEFAULT_REPORTERS = false;
public String PROPERTIES_FILE;
+ private Set<String> myPatterns = new HashSet<String>();
public TestData() {
TEST_OBJECT = TestType.CLASS.getType();
&& Comparing.equal(OUTPUT_DIRECTORY, data.OUTPUT_DIRECTORY)
&& Comparing.equal(VM_PARAMETERS, data.VM_PARAMETERS)
&& Comparing.equal(PARAMETERS, data.PARAMETERS)
+ && Comparing.equal(myPatterns, data.myPatterns)
&& USE_DEFAULT_REPORTERS == data.USE_DEFAULT_REPORTERS;
}
}
Comparing.hashcode(OUTPUT_DIRECTORY) ^
Comparing.hashcode(VM_PARAMETERS) ^
Comparing.hashcode(PARAMETERS) ^
- Comparing.hashcode(USE_DEFAULT_REPORTERS);
+ Comparing.hashcode(USE_DEFAULT_REPORTERS) ^
+ Comparing.hashcode(myPatterns);
}
@Override
data.USE_DEFAULT_REPORTERS = USE_DEFAULT_REPORTERS;
data.ENVS = new LinkedHashMap<String, String>(ENVS);
+ data.myPatterns = new HashSet<String>();
+ data.myPatterns.addAll(myPatterns);
data.setScope(getScope());
return data;
}
return getSuiteName();
}
else {
+ if (TestType.PATTERN.getType().equals(TEST_OBJECT)) {
+ final int size = myPatterns.size();
+ if (size == 0) return "Temp suite";
+ return StringUtil.getShortName(myPatterns.iterator().next()) + (size > 1 ? " and " + (size - 1) + " more" : "");
+ }
return name;
}
}
public void setEnvs(final Map<String, String> envs) {
ENVS = envs;
}
+
+ public Set<String> getPatterns() {
+ return myPatterns;
+ }
+
+ public void setPatterns(Set<String> set) {
+ myPatterns = set;
+ }
}
import com.intellij.execution.JavaExecutionUtil;
import com.intellij.execution.junit.JUnitUtil;
-import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.editor.RangeMarker;
-import com.intellij.openapi.editor.event.DocumentListener;
-import com.intellij.openapi.editor.markup.MarkupModel;
import com.intellij.openapi.module.Module;
import com.intellij.openapi.project.Project;
-import com.intellij.openapi.util.Key;
-import com.intellij.openapi.util.TextRange;
+import com.intellij.openapi.util.text.StringUtil;
import com.intellij.psi.PsiClass;
import com.theoryinpractice.testng.configuration.TestNGConfiguration;
import com.theoryinpractice.testng.configuration.TestNGConfigurationEditor;
-import org.jetbrains.annotations.NotNull;
-import org.jetbrains.annotations.Nullable;
import javax.swing.text.BadLocationException;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
-import java.beans.PropertyChangeListener;
+import java.util.LinkedHashSet;
/**
* @author Hani Suleiman Date: Jul 21, 2005 Time: 1:20:14 PM
private TestNGConfigurationEditor editor;
private TestType type;
- private final Object[] typeDocuments = new Object[5];
+ private final Object[] typeDocuments = new Object[6];
private final Document propertiesFileDocument = new PlainDocument();
private final Document outputDirectoryDocument = new PlainDocument();
private final Project project;
this.project = project;
}
- public void setDocument(int type, com.intellij.openapi.editor.Document doc) {
+ public void setDocument(int type, Object doc) {
typeDocuments[type] = doc;
}
data.MAIN_CLASS_NAME = "";
data.METHOD_NAME = "";
}
+ else if (TestType.PATTERN == type) {
+ final LinkedHashSet<String> set = new LinkedHashSet<String>();
+ final String[] patterns = getText(TestType.PATTERN).split("\\|\\|");
+ for (String pattern : patterns) {
+ if (pattern.length() > 0) {
+ set.add(pattern);
+ }
+ }
+ data.setPatterns(set);
+ }
try {
data.PROPERTIES_FILE = propertiesFileDocument.getText(0, propertiesFileDocument.getLength());
setTypeValue(TestType.METHOD, data.getMethodName());
setTypeValue(TestType.GROUP, data.getGroupName());
setTypeValue(TestType.SUITE, data.getSuiteName());
+ setTypeValue(TestType.PATTERN, StringUtil.join(data.getPatterns(), "||"));
setDocumentText(propertiesFileDocument, data.getPropertiesFile());
setDocumentText(outputDirectoryDocument, data.getOutputDirectory());
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);
public final String type;
public final int value;
{
return SUITE;
}
+ if (PATTERN.type.equals(type)) {
+ return PATTERN;
+ }
throw new IllegalArgumentException("Invalid type requested " + type);
}
}
\ No newline at end of file