diff options
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.java | 69 |
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; + } } } |