summaryrefslogtreecommitdiff
path: root/platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java')
-rw-r--r--platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java69
1 files changed, 63 insertions, 6 deletions
diff --git a/platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java b/platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java
index fd80ea0154db..5d19c5ee0877 100644
--- a/platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java
+++ b/platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java
@@ -16,13 +16,15 @@
package com.intellij.execution.testframework.actions;
-import com.intellij.execution.testframework.AbstractTestProxy;
+import com.intellij.execution.testframework.*;
import com.intellij.openapi.actionSystem.*;
+import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NonNls;
-import javax.swing.*;
+import java.util.ArrayList;
+import java.util.List;
-public class ViewAssertEqualsDiffAction extends AnAction {
+public class ViewAssertEqualsDiffAction extends AnAction implements TestTreeViewAction {
@NonNls public static final String ACTION_ID = "openAssertEqualsDiff";
public void actionPerformed(final AnActionEvent e) {
@@ -30,11 +32,35 @@ public class ViewAssertEqualsDiffAction extends AnAction {
if (testProxy != null) {
final AbstractTestProxy.AssertEqualsDiffViewerProvider diffViewerProvider = testProxy.getDiffViewerProvider();
if (diffViewerProvider != null) {
- diffViewerProvider.openDiff(CommonDataKeys.PROJECT.getData(e.getDataContext()));
+ final Project project = CommonDataKeys.PROJECT.getData(e.getDataContext());
+ if (diffViewerProvider instanceof AbstractTestProxy.AssertEqualsMultiDiffViewProvider) {
+ final TestFrameworkRunningModel runningModel = TestTreeView.MODEL_DATA_KEY.getData(e.getDataContext());
+ final List<AbstractTestProxy.AssertEqualsMultiDiffViewProvider> providers = collectAvailableProviders(runningModel);
+ final MyAssertEqualsDiffChain diffChain =
+ providers.size() > 1 ? new MyAssertEqualsDiffChain(providers, (AbstractTestProxy.AssertEqualsMultiDiffViewProvider)diffViewerProvider) : null;
+ ((AbstractTestProxy.AssertEqualsMultiDiffViewProvider)diffViewerProvider).openMultiDiff(project, diffChain);
+ } else {
+ diffViewerProvider.openDiff(project);
+ }
}
}
}
+ private static List<AbstractTestProxy.AssertEqualsMultiDiffViewProvider> collectAvailableProviders(TestFrameworkRunningModel model) {
+ final List<AbstractTestProxy.AssertEqualsMultiDiffViewProvider> providers = new ArrayList<AbstractTestProxy.AssertEqualsMultiDiffViewProvider>();
+ if (model != null) {
+ final AbstractTestProxy root = model.getRoot();
+ final List<? extends AbstractTestProxy> allTests = root.getAllTests();
+ for (AbstractTestProxy test : allTests) {
+ final AbstractTestProxy.AssertEqualsDiffViewerProvider provider = test.getDiffViewerProvider();
+ if (provider instanceof AbstractTestProxy.AssertEqualsMultiDiffViewProvider) {
+ providers.add((AbstractTestProxy.AssertEqualsMultiDiffViewProvider)provider);
+ }
+ }
+ }
+ return providers;
+ }
+
public void update(final AnActionEvent e) {
final Presentation presentation = e.getPresentation();
final boolean enabled;
@@ -55,7 +81,38 @@ public class ViewAssertEqualsDiffAction extends AnAction {
presentation.setVisible(enabled);
}
- public static void registerShortcut(final JComponent component) {
- ActionManager.getInstance().getAction(ACTION_ID).registerCustomShortcutSet(CommonShortcuts.ALT_ENTER, component);
+ private static class MyAssertEqualsDiffChain implements AbstractTestProxy.AssertEqualsDiffChain {
+
+
+ private final List<AbstractTestProxy.AssertEqualsMultiDiffViewProvider> myProviders;
+ private AbstractTestProxy.AssertEqualsMultiDiffViewProvider myProvider;
+
+ public MyAssertEqualsDiffChain(List<AbstractTestProxy.AssertEqualsMultiDiffViewProvider> providers,
+ AbstractTestProxy.AssertEqualsMultiDiffViewProvider provider) {
+ myProviders = providers;
+ myProvider = provider;
+ }
+
+ @Override
+ public AbstractTestProxy.AssertEqualsMultiDiffViewProvider getPrevious() {
+ final int prevIdx = (myProviders.size() + myProviders.indexOf(myProvider) - 1) % myProviders.size();
+ return myProviders.get(prevIdx);
+ }
+
+ @Override
+ public AbstractTestProxy.AssertEqualsMultiDiffViewProvider getCurrent() {
+ return myProvider;
+ }
+
+ @Override
+ public AbstractTestProxy.AssertEqualsMultiDiffViewProvider getNext() {
+ final int nextIdx = (myProviders.indexOf(myProvider) + 1) % myProviders.size();
+ return myProviders.get(nextIdx);
+ }
+
+ @Override
+ public void setCurrent(AbstractTestProxy.AssertEqualsMultiDiffViewProvider provider) {
+ myProvider = provider;
+ }
}
}