From 02e10c0042631b9f8620187699486bfe45349fad Mon Sep 17 00:00:00 2001 From: Anna Kozlova Date: Thu, 9 Jun 2016 13:10:28 +0300 Subject: [PATCH] change list run restored for junit (cherry picked from commit 953c12b) --- .../TestDiscoverySearchHelper.java | 6 +-- .../execution/junit/JUnitConfiguration.java | 10 ++++ .../intellij/execution/junit/TestObject.java | 5 +- .../junit/testDiscovery/TestsByChanges.java | 36 +++++++++++++++ .../configuration/JUnitConfigurable.form | 18 ++++++-- .../configuration/JUnitConfigurable.java | 46 ++++++++++++++++++- .../JUnitConfigurationModel.java | 9 ++-- 7 files changed, 117 insertions(+), 13 deletions(-) create mode 100644 plugins/junit/src/com/intellij/execution/junit/testDiscovery/TestsByChanges.java diff --git a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoverySearchHelper.java b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoverySearchHelper.java index ba2f12465779..f58e5fbf17b6 100644 --- a/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoverySearchHelper.java +++ b/java/execution/impl/src/com/intellij/execution/testDiscovery/TestDiscoverySearchHelper.java @@ -38,8 +38,8 @@ import java.io.IOException; import java.util.*; public class TestDiscoverySearchHelper { - public static Set search(final Project project, - final Pair position, + public static Set search(final Project project, + final Pair position, final String changeList, final String frameworkPrefix) { final Set patterns = new LinkedHashSet(); @@ -119,7 +119,7 @@ public class TestDiscoverySearchHelper { @NotNull private static List getAffectedFiles(String changeListName, Project project) { final ChangeListManager changeListManager = ChangeListManager.getInstance(project); - if (changeListName == null) { + if ("All".equals(changeListName)) { return changeListManager.getAffectedFiles(); } final LocalChangeList changeList = changeListManager.findChangeList(changeListName); diff --git a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java index ca66e1e60093..4b12dbd100b3 100644 --- a/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java +++ b/plugins/junit/src/com/intellij/execution/junit/JUnitConfiguration.java @@ -59,6 +59,7 @@ public class JUnitConfiguration extends JavaTestConfigurationBase { @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"; + @NonNls public static final String BY_SOURCE_CHANGES = "changes"; //fork modes @NonNls public static final String FORK_NONE = "none"; @@ -505,6 +506,7 @@ public class JUnitConfiguration extends JavaTestConfigurationBase { private String REPEAT_MODE = RepeatCount.ONCE; private LinkedHashSet myPattern = new LinkedHashSet(); private Map myEnvs = new LinkedHashMap(); + private String myChangeList = "All"; public boolean equals(final Object object) { if (!(object instanceof Data)) return false; @@ -688,6 +690,14 @@ public class JUnitConfiguration extends JavaTestConfigurationBase { public void setCategoryName(String categoryName) { CATEGORY_NAME = categoryName; } + + public String getChangeList() { + return myChangeList; + } + + public void setChangeList(String changeList) { + myChangeList = changeList; + } } } diff --git a/plugins/junit/src/com/intellij/execution/junit/TestObject.java b/plugins/junit/src/com/intellij/execution/junit/TestObject.java index 980b4cc29086..cd7c4abe4ec5 100644 --- a/plugins/junit/src/com/intellij/execution/junit/TestObject.java +++ b/plugins/junit/src/com/intellij/execution/junit/TestObject.java @@ -22,6 +22,7 @@ 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.junit.testDiscovery.TestsByChanges; import com.intellij.execution.junit2.TestProxy; import com.intellij.execution.junit2.segments.DeferredActionsQueue; import com.intellij.execution.junit2.segments.DeferredActionsQueueImpl; @@ -48,7 +49,6 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Disposer; -import com.intellij.openapi.util.Getter; import com.intellij.openapi.util.Key; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.text.StringUtil; @@ -104,6 +104,9 @@ public abstract class TestObject extends JavaTestFrameworkRunnableState getPosition() { + return null; + } +} diff --git a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.form b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.form index dd5fe6332940..1d9a7e53c6dc 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.form +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.form @@ -3,7 +3,7 @@ - + @@ -148,7 +148,7 @@ - + @@ -158,7 +158,7 @@ - + @@ -226,10 +226,20 @@ + + + + + + + + + + - + 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 8bca4b127c11..8e267e1b17c6 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurable.java @@ -43,6 +43,8 @@ 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.vcs.changes.ChangeListManager; +import com.intellij.openapi.vcs.changes.LocalChangeList; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.GlobalSearchScope; @@ -64,6 +66,8 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; import java.util.List; +import java.util.Optional; +import java.util.concurrent.atomic.AtomicReference; public class JUnitConfigurable extends SettingsEditor implements PanelWithAnchor { private static final List ourEnabledFields = Arrays.asList( @@ -73,7 +77,9 @@ public class JUnitConfigurable extends SettingsEdi new TIntArrayList(new int[]{3}), new TIntArrayList(new int[]{4}), new TIntArrayList(new int[]{5}), - new TIntArrayList(new int[]{1, 2})); + new TIntArrayList(new int[]{1, 2}), + new TIntArrayList(new int[]{6}) + ); 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}; @@ -104,6 +110,7 @@ public class JUnitConfigurable extends SettingsEdi private JPanel myScopesPanel; private JComboBox myRepeatCb; private JTextField myRepeatCountField; + private LabeledComponent> myChangeListLabeledComponent; private Project myProject; private JComponent anchor; @@ -161,6 +168,7 @@ public class JUnitConfigurable extends SettingsEdi aModel.addElement(JUnitConfigurationModel.CATEGORY); if (Registry.is("testDiscovery.enabled")) { aModel.addElement(JUnitConfigurationModel.BY_SOURCE_POSITION); + aModel.addElement(JUnitConfigurationModel.BY_SOURCE_CHANGES); } myTypeChooser.setModel(aModel); myTypeChooser.setRenderer(new ListCellRendererWrapper() { @@ -186,7 +194,10 @@ public class JUnitConfigurable extends SettingsEdi setText("Category"); break; case JUnitConfigurationModel.BY_SOURCE_POSITION: - setText("Source location"); + setText("Through source location"); + break; + case JUnitConfigurationModel.BY_SOURCE_CHANGES: + setText("Over changes in sources"); break; } } @@ -263,6 +274,15 @@ public class JUnitConfigurable extends SettingsEdi setAnchor(mySearchForTestsLabel); myJrePathEditor.setAnchor(myModule.getLabel()); myCommonJavaParameters.setAnchor(myModule.getLabel()); + + final DefaultComboBoxModel model = new DefaultComboBoxModel<>(); + myChangeListLabeledComponent.getComponent().setModel(model); + model.addElement("All"); + + final List changeLists = ChangeListManager.getInstance(project).getChangeLists(); + for (LocalChangeList changeList : changeLists) { + model.addElement(changeList.getName()); + } } private static void addRadioButtonsListeners(final JRadioButton[] radioButtons, ChangeListener listener) { @@ -276,6 +296,7 @@ public class JUnitConfigurable extends SettingsEdi public void applyEditorTo(final JUnitConfiguration configuration) { myModel.apply(getModuleSelector().getModule(), configuration); + configuration.getPersistentData().setChangeList((String)myChangeListLabeledComponent.getComponent().getSelectedItem()); applyHelpersTo(configuration); final JUnitConfiguration.Data data = configuration.getPersistentData(); if (myWholeProjectScope.isSelected()) { @@ -308,6 +329,7 @@ public class JUnitConfigurable extends SettingsEdi myRepeatCb.setSelectedItem(configuration.getRepeatMode()); myModel.reset(configuration); + myChangeListLabeledComponent.getComponent().setSelectedItem(configuration.getPersistentData().getChangeList()); myCommonJavaParameters.reset(configuration); getModuleSelector().reset(configuration); final TestSearchScope scope = configuration.getPersistentData().getScope(); @@ -339,6 +361,7 @@ public class JUnitConfigurable extends SettingsEdi myCategory.setVisible(false); myMethod.setVisible(false); myDir.setVisible(false); + myChangeListLabeledComponent.setVisible(false); myForkCb.setEnabled(true); myForkCb.setModel(new DefaultComboBoxModel(FORK_MODE_ALL)); myForkCb.setSelectedItem(selectedItem); @@ -349,6 +372,7 @@ public class JUnitConfigurable extends SettingsEdi myPattern.setVisible(false); myClass.setVisible(false); myCategory.setVisible(false); + myChangeListLabeledComponent.setVisible(false); myMethod.setVisible(false); myForkCb.setEnabled(true); myForkCb.setModel(new DefaultComboBoxModel(FORK_MODE_ALL)); @@ -361,6 +385,7 @@ public class JUnitConfigurable extends SettingsEdi myDir.setVisible(false); myClass.setVisible(true); myCategory.setVisible(false); + myChangeListLabeledComponent.setVisible(false); myMethod.setVisible(false); myForkCb.setEnabled(true); myForkCb.setModel(getForkModelBasedOnRepeat()); @@ -374,6 +399,7 @@ public class JUnitConfigurable extends SettingsEdi myClass.setVisible(true); myCategory.setVisible(false); myMethod.setVisible(true); + myChangeListLabeledComponent.setVisible(false); myForkCb.setEnabled(false); myForkCb.setSelectedItem(JUnitConfiguration.FORK_NONE); } else if (selectedType == JUnitConfigurationModel.CATEGORY) { @@ -384,6 +410,20 @@ public class JUnitConfigurable extends SettingsEdi myClass.setVisible(false); myCategory.setVisible(true); myMethod.setVisible(false); + myChangeListLabeledComponent.setVisible(false); + myForkCb.setEnabled(true); + myForkCb.setModel(new DefaultComboBoxModel(FORK_MODE_ALL)); + myForkCb.setSelectedItem(selectedItem); + } + else if (selectedType == JUnitConfigurationModel.BY_SOURCE_CHANGES) { + myPackagePanel.setVisible(false); + myScopesPanel.setVisible(false); + myDir.setVisible(false); + myPattern.setVisible(false); + myClass.setVisible(false); + myCategory.setVisible(false); + myMethod.setVisible(false); + myChangeListLabeledComponent.setVisible(true); myForkCb.setEnabled(true); myForkCb.setModel(new DefaultComboBoxModel(FORK_MODE_ALL)); myForkCb.setSelectedItem(selectedItem); @@ -396,6 +436,7 @@ public class JUnitConfigurable extends SettingsEdi myClass.setVisible(false); myCategory.setVisible(false); myMethod.setVisible(true); + myChangeListLabeledComponent.setVisible(false); myForkCb.setEnabled(true); myForkCb.setModel(new DefaultComboBoxModel(FORK_MODE_ALL)); myForkCb.setSelectedItem(selectedItem); @@ -503,6 +544,7 @@ public class JUnitConfigurable extends SettingsEdi myPattern.setAnchor(anchor); myPackage.setAnchor(anchor); myCategory.setAnchor(anchor); + myChangeListLabeledComponent.setAnchor(anchor); } public void onTypeChanged(final int newType) { 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 bc440fbd836f..a187b83dc375 100644 --- a/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurationModel.java +++ b/plugins/junit/src/com/intellij/execution/junit2/configuration/JUnitConfigurationModel.java @@ -44,6 +44,7 @@ public class JUnitConfigurationModel { public static final int DIR = 4; public static final int CATEGORY = 5; public static final int BY_SOURCE_POSITION = 6; + public static final int BY_SOURCE_CHANGES = 7; private static final List ourTestObjects; @@ -54,7 +55,8 @@ public class JUnitConfigurationModel { JUnitConfiguration.TEST_PATTERN, JUnitConfiguration.TEST_DIRECTORY, JUnitConfiguration.TEST_CATEGORY, - JUnitConfiguration.BY_SOURCE_POSITION); + JUnitConfiguration.BY_SOURCE_POSITION, + JUnitConfiguration.BY_SOURCE_CHANGES); } @@ -106,7 +108,8 @@ public class JUnitConfigurationModel { if (testObject != JUnitConfiguration.TEST_PACKAGE && testObject != JUnitConfiguration.TEST_PATTERN && testObject != JUnitConfiguration.TEST_DIRECTORY && - testObject != JUnitConfiguration.TEST_CATEGORY) { + testObject != JUnitConfiguration.TEST_CATEGORY && + testObject != JUnitConfiguration.BY_SOURCE_CHANGES) { try { data.METHOD_NAME = getJUnitTextValue(METHOD); final PsiClass testClass = !myProject.isDefault() && !StringUtil.isEmptyOrSpaces(className) ? JUnitUtil.findPsiClass(className, module, myProject) : null; @@ -124,7 +127,7 @@ public class JUnitConfigurationModel { data.MAIN_CLASS_NAME = className; } } - else { + else if (testObject != JUnitConfiguration.BY_SOURCE_CHANGES) { if (testObject == JUnitConfiguration.TEST_PACKAGE) { data.PACKAGE_NAME = getJUnitTextValue(ALL_IN_PACKAGE); }