mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
showing test state on run marks
This commit is contained in:
@@ -16,8 +16,12 @@
|
||||
package com.intellij.testIntegration;
|
||||
|
||||
import com.intellij.codeInsight.TestFrameworks;
|
||||
import com.intellij.execution.TestStateStorage;
|
||||
import com.intellij.execution.lineMarker.ExecutorAction;
|
||||
import com.intellij.execution.lineMarker.RunLineMarkerContributor;
|
||||
import com.intellij.execution.testframework.TestIconMapper;
|
||||
import com.intellij.execution.testframework.sm.runner.states.TestStateInfo;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.PsiClass;
|
||||
import com.intellij.psi.PsiElement;
|
||||
import com.intellij.psi.PsiIdentifier;
|
||||
@@ -26,6 +30,8 @@ import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.util.Function;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
*/
|
||||
@@ -54,8 +60,9 @@ public class TestRunLineMarkerProvider extends RunLineMarkerContributor {
|
||||
if (psiClass != null) {
|
||||
TestFramework framework = TestFrameworks.detectFramework(psiClass);
|
||||
if (framework != null && framework.isTestMethod(element)) {
|
||||
// String url = "java:test://" + psiClass.getQualifiedName() + "." + ((PsiMethod)element).getName();
|
||||
return new Info(framework.getIcon(), TOOLTIP_PROVIDER, ExecutorAction.getActions(1));
|
||||
String url = "java:test://" + psiClass.getQualifiedName() + "." + ((PsiMethod)element).getName();
|
||||
Icon icon = getTestStateIcon(url, e.getProject());
|
||||
return new Info(icon == null ? framework.getIcon() : icon, TOOLTIP_PROVIDER, ExecutorAction.getActions(1));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -66,4 +73,11 @@ public class TestRunLineMarkerProvider extends RunLineMarkerContributor {
|
||||
protected boolean isIdentifier(PsiElement e) {
|
||||
return e instanceof PsiIdentifier;
|
||||
}
|
||||
|
||||
private static Icon getTestStateIcon(String url, Project project) {
|
||||
TestStateStorage.Record state = TestStateStorage.getInstance(project).getState(url);
|
||||
if (state == null) return null;
|
||||
TestStateInfo.Magnitude magnitude = TestIconMapper.getMagnitude(state.magnitude);
|
||||
return TestIconMapper.getIcon(magnitude);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
* Copyright 2000-2015 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.
|
||||
*/
|
||||
package com.intellij.execution.testframework;
|
||||
|
||||
import com.intellij.execution.testframework.sm.runner.states.TestStateInfo;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import javax.swing.*;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Dmitry Avdeev
|
||||
*/
|
||||
public class TestIconMapper implements PoolOfTestIcons {
|
||||
|
||||
private final static Map<Integer, TestStateInfo.Magnitude> magnitudes = new HashMap<Integer, TestStateInfo.Magnitude>();
|
||||
|
||||
static {
|
||||
for (TestStateInfo.Magnitude value : TestStateInfo.Magnitude.values()) {
|
||||
magnitudes.put(value.getValue(), value);
|
||||
}
|
||||
}
|
||||
|
||||
public static TestStateInfo.Magnitude getMagnitude(int value) {
|
||||
return magnitudes.get(value);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Icon getIcon(TestStateInfo.Magnitude magnitude) {
|
||||
switch (magnitude) {
|
||||
case SKIPPED_INDEX:
|
||||
return SKIPPED_ICON;
|
||||
case COMPLETE_INDEX:
|
||||
return PASSED_ICON;
|
||||
case NOT_RUN_INDEX:
|
||||
return NOT_RAN;
|
||||
case RUNNING_INDEX:
|
||||
return null;
|
||||
case TERMINATED_INDEX:
|
||||
return TERMINATED_ICON;
|
||||
case IGNORED_INDEX:
|
||||
return IGNORED_ICON;
|
||||
case FAILED_INDEX:
|
||||
return FAILED_ICON;
|
||||
case ERROR_INDEX:
|
||||
return ERROR_ICON;
|
||||
case PASSED_INDEX:
|
||||
return PASSED_ICON;
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
+11
-13
@@ -15,7 +15,7 @@
|
||||
*/
|
||||
package com.intellij.execution.testframework.sm.runner.states;
|
||||
|
||||
import com.intellij.execution.testframework.sm.SMTestsRunnerBundle;
|
||||
import com.intellij.execution.ExecutionBundle;
|
||||
|
||||
/**
|
||||
* @author Roman Chernyatchik
|
||||
@@ -32,7 +32,6 @@ public interface TestStateInfo {
|
||||
* Some magic definition from AbstractTestProxy class.
|
||||
* If state is defect something wrong is with it and should be shown
|
||||
* properly in UI.
|
||||
* @return
|
||||
*/
|
||||
boolean isDefect();
|
||||
|
||||
@@ -54,22 +53,21 @@ public interface TestStateInfo {
|
||||
boolean wasTerminated();
|
||||
|
||||
/**
|
||||
* It's some magic parameter than describe state type.
|
||||
* @return
|
||||
* It's some magic parameter that describes state type.
|
||||
*/
|
||||
Magnitude getMagnitude();
|
||||
|
||||
//WARN: It is Hack, see PoolOfTestStates, API is necessary
|
||||
enum Magnitude {
|
||||
SKIPPED_INDEX(0, 1, SMTestsRunnerBundle.message("sm.test.runner.magnitude.skipped.failed.title")),
|
||||
COMPLETE_INDEX(1, 3, SMTestsRunnerBundle.message("sm.test.runner.magnitude.completed.failed.title")),
|
||||
NOT_RUN_INDEX(2, 0, SMTestsRunnerBundle.message("sm.test.runner.magnitude.not.run.failed.title")),
|
||||
RUNNING_INDEX(3, 7, SMTestsRunnerBundle.message("sm.test.runner.magnitude.running.failed.title")),
|
||||
TERMINATED_INDEX(4, 6, SMTestsRunnerBundle.message("sm.test.runner.magnitude.terminated.failed.title")),
|
||||
IGNORED_INDEX(5, 2, SMTestsRunnerBundle.message("sm.test.runner.magnitude.ignored.failed.title")),
|
||||
FAILED_INDEX(6, 4, SMTestsRunnerBundle.message("sm.test.runner.magnitude.assertion.failed.title")),
|
||||
ERROR_INDEX(8, 5, SMTestsRunnerBundle.message("sm.test.runner.magnitude.testerror.title")),
|
||||
PASSED_INDEX(COMPLETE_INDEX.getValue(), COMPLETE_INDEX.getSortWeight(), SMTestsRunnerBundle.message("sm.test.runner.magnitude.passed.title"));
|
||||
SKIPPED_INDEX(0, 1, ExecutionBundle.message("sm.test.runner.magnitude.skipped.failed.title")),
|
||||
COMPLETE_INDEX(1, 3, ExecutionBundle.message("sm.test.runner.magnitude.completed.failed.title")),
|
||||
NOT_RUN_INDEX(2, 0, ExecutionBundle.message("sm.test.runner.magnitude.not.run.failed.title")),
|
||||
RUNNING_INDEX(3, 7, ExecutionBundle.message("sm.test.runner.magnitude.running.failed.title")),
|
||||
TERMINATED_INDEX(4, 6, ExecutionBundle.message("sm.test.runner.magnitude.terminated.failed.title")),
|
||||
IGNORED_INDEX(5, 2, ExecutionBundle.message("sm.test.runner.magnitude.ignored.failed.title")),
|
||||
FAILED_INDEX(6, 4, ExecutionBundle.message("sm.test.runner.magnitude.assertion.failed.title")),
|
||||
ERROR_INDEX(8, 5, ExecutionBundle.message("sm.test.runner.magnitude.testerror.title")),
|
||||
PASSED_INDEX(COMPLETE_INDEX.getValue(), COMPLETE_INDEX.getSortWeight(), ExecutionBundle.message("sm.test.runner.magnitude.passed.title"));
|
||||
|
||||
private final int myValue;
|
||||
private final int mySortWeight;
|
||||
@@ -362,3 +362,13 @@ failed.to.create.output.file=Failed to create output file ''{0}''
|
||||
|
||||
script.execution.timeout=Script execution took more than {0} seconds.
|
||||
junit.configuration.configure.junit.test.kind.label=&Test kind:
|
||||
|
||||
sm.test.runner.magnitude.completed.failed.title=Completed
|
||||
sm.test.runner.magnitude.passed.title=Passed
|
||||
sm.test.runner.magnitude.skipped.failed.title=Skipped
|
||||
sm.test.runner.magnitude.not.run.failed.title=Not run
|
||||
sm.test.runner.magnitude.running.failed.title=Running...
|
||||
sm.test.runner.magnitude.terminated.failed.title=Terminated
|
||||
sm.test.runner.magnitude.ignored.failed.title=Ignored
|
||||
sm.test.runner.magnitude.assertion.failed.title=Assertion failed
|
||||
sm.test.runner.magnitude.testerror.title=Error
|
||||
|
||||
@@ -35,15 +35,5 @@ sm.test.runner.ui.tabs.statistics.columns.results.count.msg.passed=P:{0}
|
||||
sm.test.runner.ui.tabs.statistics.columns.results.count.msg.ignored=I:{0}
|
||||
sm.test.runner.ui.tabs.statistics.columns.results.no.tests=<NO TESTS>
|
||||
|
||||
sm.test.runner.magnitude.completed.failed.title=Completed
|
||||
sm.test.runner.magnitude.passed.title=Passed
|
||||
sm.test.runner.magnitude.skipped.failed.title=Skipped
|
||||
sm.test.runner.magnitude.not.run.failed.title=Not run
|
||||
sm.test.runner.magnitude.running.failed.title=Running...
|
||||
sm.test.runner.magnitude.terminated.failed.title=Terminated
|
||||
sm.test.runner.magnitude.ignored.failed.title=Ignored
|
||||
sm.test.runner.magnitude.assertion.failed.title=Assertion failed
|
||||
sm.test.runner.magnitude.testerror.title=Error
|
||||
|
||||
sm.test.runner.states.suite.is.empty=Empty test suite.
|
||||
sm.test.runner.states.test.is.ignored=Test ignored.
|
||||
@@ -16,5 +16,6 @@
|
||||
<orderEntry type="module" module-name="annotations" />
|
||||
<orderEntry type="library" scope="TEST" name="Mocks" level="project" />
|
||||
<orderEntry type="module" module-name="testFramework" scope="TEST" />
|
||||
<orderEntry type="module" module-name="lang-api" />
|
||||
</component>
|
||||
</module>
|
||||
Reference in New Issue
Block a user