diff --git a/platform/platform-resources/src/idea/LangActions.xml b/platform/platform-resources/src/idea/LangActions.xml
index 8d1074c547f9..a87fe7ed3a9f 100644
--- a/platform/platform-resources/src/idea/LangActions.xml
+++ b/platform/platform-resources/src/idea/LangActions.xml
@@ -786,6 +786,11 @@
+
+
+
+
+
diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java
index b7a91e6fc3f4..6decd4ab0159 100644
--- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java
+++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/SMTestProxy.java
@@ -400,6 +400,15 @@ public class SMTestProxy extends AbstractTestProxy {
return TestsPresentationUtil.getPresentableName(this);
}
+ @Override
+ @Nullable
+ public AssertEqualsDiffViewerProvider getDiffViewerProvider() {
+ if (myState instanceof AssertEqualsDiffViewerProvider) {
+ return (AssertEqualsDiffViewerProvider)myState;
+ }
+ return null;
+ }
+
@Override
public String toString() {
return getPresentableName();
diff --git a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/states/TestComparisionFailedState.java b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/states/TestComparisionFailedState.java
index 5ae00eff8db2..79cf7e93881c 100644
--- a/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/states/TestComparisionFailedState.java
+++ b/platform/smRunner/src/com/intellij/execution/testframework/sm/runner/states/TestComparisionFailedState.java
@@ -15,6 +15,7 @@
*/
package com.intellij.execution.testframework.sm.runner.states;
+import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.execution.testframework.CompositePrintable;
import com.intellij.execution.testframework.Printer;
import com.intellij.execution.testframework.stacktrace.DiffHyperlink;
@@ -27,7 +28,7 @@ import org.jetbrains.annotations.Nullable;
/**
* @author Roman.Chernyatchik
*/
-public class TestComparisionFailedState extends TestFailedState {
+public class TestComparisionFailedState extends TestFailedState implements AbstractTestProxy.AssertEqualsDiffViewerProvider {
private final String myErrorMsgPresentation;
private final String myStacktracePresentation;
private DiffHyperlink myHyperlink;
@@ -67,4 +68,18 @@ public class TestComparisionFailedState extends TestFailedState {
printer.print(CompositePrintable.NEW_LINE, ConsoleViewContentType.ERROR_OUTPUT);
}
}
+
+ public void openDiff(final Project project) {
+ myHyperlink.openDiff(project);
+ }
+
+ @Override
+ public String getExpecteed() {
+ return myHyperlink.getLeft();
+ }
+
+ @Override
+ public String getActual() {
+ return myHyperlink.getRight();
+ }
}
diff --git a/platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java b/platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java
index 0db0d7ed62f4..3ddc3f1d9821 100644
--- a/platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java
+++ b/platform/testRunner/src/com/intellij/execution/testframework/AbstractTestProxy.java
@@ -124,5 +124,14 @@ public abstract class AbstractTestProxy extends CompositePrintable {
return myExceptionMark;
}
+ @Nullable
+ public AssertEqualsDiffViewerProvider getDiffViewerProvider() {
+ return null;
+ }
+ public interface AssertEqualsDiffViewerProvider {
+ void openDiff(final Project project);
+ String getExpecteed();
+ String getActual();
+ }
}
diff --git a/platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java b/platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java
index c7159cef636a..66b7bb3e4b4a 100644
--- a/platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java
+++ b/platform/testRunner/src/com/intellij/execution/testframework/TestTreeView.java
@@ -20,6 +20,7 @@
*/
package com.intellij.execution.testframework;
+import com.intellij.execution.testframework.actions.ViewAssertEqualsDiffAction;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.actionSystem.ActionPlaces;
import com.intellij.openapi.actionSystem.DataProvider;
@@ -92,5 +93,6 @@ public abstract class TestTreeView extends Tree implements DataProvider {
});
TreeUtil.installActions(this);
PopupHandler.installPopupHandler(this, IdeActions.GROUP_TESTTREE_POPUP, ActionPlaces.TESTTREE_VIEW_POPUP);
+ ViewAssertEqualsDiffAction.registerShortcut(this);
}
}
\ No newline at end of file
diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/actions/ViewAssertEqualsDiffAction.java b/platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java
similarity index 76%
rename from plugins/junit/src/com/intellij/execution/junit2/ui/actions/ViewAssertEqualsDiffAction.java
rename to platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java
index 56180ec82ab1..9c03a18bdc92 100644
--- a/plugins/junit/src/com/intellij/execution/junit2/ui/actions/ViewAssertEqualsDiffAction.java
+++ b/platform/testRunner/src/com/intellij/execution/testframework/actions/ViewAssertEqualsDiffAction.java
@@ -14,11 +14,8 @@
* limitations under the License.
*/
-package com.intellij.execution.junit2.ui.actions;
+package com.intellij.execution.testframework.actions;
-import com.intellij.execution.junit2.TestProxy;
-import com.intellij.execution.junit2.states.ComparisonFailureState;
-import com.intellij.execution.junit2.states.TestState;
import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.openapi.actionSystem.*;
import org.jetbrains.annotations.NonNls;
@@ -31,8 +28,10 @@ public class ViewAssertEqualsDiffAction extends AnAction {
public void actionPerformed(final AnActionEvent e) {
final AbstractTestProxy testProxy = AbstractTestProxy.DATA_KEY.getData(e.getDataContext());
if (testProxy != null) {
- final ComparisonFailureState state = (ComparisonFailureState)((TestProxy)testProxy).getState();
- state.openDiff(PlatformDataKeys.PROJECT.getData(e.getDataContext()));
+ final AbstractTestProxy.AssertEqualsDiffViewerProvider diffViewerProvider = testProxy.getDiffViewerProvider();
+ if (diffViewerProvider != null) {
+ diffViewerProvider.openDiff(PlatformDataKeys.PROJECT.getData(e.getDataContext()));
+ }
}
}
@@ -45,9 +44,8 @@ public class ViewAssertEqualsDiffAction extends AnAction {
}
else {
final AbstractTestProxy test = AbstractTestProxy.DATA_KEY.getData(dataContext);
- if (test instanceof TestProxy) {
- final TestState state = ((TestProxy)test).getState();
- enabled = state instanceof ComparisonFailureState;
+ if (test != null) {
+ enabled = test.getDiffViewerProvider() != null;
}
else {
enabled = false;
diff --git a/plugins/junit/src/META-INF/plugin.xml b/plugins/junit/src/META-INF/plugin.xml
index b0d1d0d28407..f34d19f72bc0 100644
--- a/plugins/junit/src/META-INF/plugin.xml
+++ b/plugins/junit/src/META-INF/plugin.xml
@@ -39,10 +39,9 @@
-
-
+
diff --git a/plugins/junit/src/com/intellij/execution/junit2/TestProxy.java b/plugins/junit/src/com/intellij/execution/junit2/TestProxy.java
index 8aa09de31cf8..b8f65113bde3 100644
--- a/plugins/junit/src/com/intellij/execution/junit2/TestProxy.java
+++ b/plugins/junit/src/com/intellij/execution/junit2/TestProxy.java
@@ -21,12 +21,14 @@ import com.intellij.execution.junit2.events.*;
import com.intellij.execution.junit2.info.TestInfo;
import com.intellij.execution.junit2.states.Statistics;
import com.intellij.execution.junit2.states.TestState;
-import com.intellij.execution.testframework.*;
+import com.intellij.execution.testframework.AbstractTestProxy;
+import com.intellij.execution.testframework.Filter;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.project.Project;
import com.intellij.pom.Navigatable;
import com.intellij.rt.execution.junit.states.PoolOfTestStates;
import org.jetbrains.annotations.NotNull;
+import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
import java.util.Collections;
@@ -268,4 +270,12 @@ public class TestProxy extends AbstractTestProxy {
return false;
}
+ @Override
+ @Nullable
+ public AssertEqualsDiffViewerProvider getDiffViewerProvider() {
+ if (myState instanceof AssertEqualsDiffViewerProvider) {
+ return (AssertEqualsDiffViewerProvider)myState;
+ }
+ return null;
+ }
}
diff --git a/plugins/junit/src/com/intellij/execution/junit2/states/ComparisonFailureState.java b/plugins/junit/src/com/intellij/execution/junit2/states/ComparisonFailureState.java
index 789f43331b21..e41bbcabb9cb 100644
--- a/plugins/junit/src/com/intellij/execution/junit2/states/ComparisonFailureState.java
+++ b/plugins/junit/src/com/intellij/execution/junit2/states/ComparisonFailureState.java
@@ -17,13 +17,14 @@
package com.intellij.execution.junit2.states;
import com.intellij.execution.junit2.segments.ObjectReader;
+import com.intellij.execution.testframework.AbstractTestProxy;
import com.intellij.execution.testframework.Printer;
import com.intellij.execution.testframework.stacktrace.DiffHyperlink;
import com.intellij.execution.ui.ConsoleViewContentType;
import com.intellij.openapi.project.Project;
import org.jetbrains.annotations.NonNls;
-public class ComparisonFailureState extends FaultyState {
+public class ComparisonFailureState extends FaultyState implements AbstractTestProxy.AssertEqualsDiffViewerProvider {
private DiffHyperlink myHyperlink;
@NonNls
protected static final String EXPECTED_VALUE_MESSAGE_TEXT = "expected:<";
diff --git a/plugins/junit/src/com/intellij/execution/junit2/ui/JUnitTestTreeView.java b/plugins/junit/src/com/intellij/execution/junit2/ui/JUnitTestTreeView.java
index 9df5be4f9c99..334e57805087 100644
--- a/plugins/junit/src/com/intellij/execution/junit2/ui/JUnitTestTreeView.java
+++ b/plugins/junit/src/com/intellij/execution/junit2/ui/JUnitTestTreeView.java
@@ -17,7 +17,6 @@
package com.intellij.execution.junit2.ui;
import com.intellij.execution.junit2.TestProxy;
-import com.intellij.execution.junit2.ui.actions.ViewAssertEqualsDiffAction;
import com.intellij.execution.testframework.TestConsoleProperties;
import com.intellij.execution.testframework.TestTreeView;
import org.jetbrains.annotations.NotNull;
@@ -42,9 +41,4 @@ public class JUnitTestTreeView extends TestTreeView {
final boolean hasFocus) {
return Formatters.printTest(TestProxyClient.from(value));
}
-
- protected void installHandlers() {
- super.installHandlers();
- ViewAssertEqualsDiffAction.registerShortcut(this);
- }
}