blob: a82a2ed0eea7c047bda64a39af9258f6afa8145b [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2021 Red Hat Inc. and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Red Hat Inc. - initial API and implementation
*******************************************************************************/
package org.eclipse.pde.unittest.junit.ui;
import org.eclipse.pde.unittest.junit.launcher.JUnitPluginLaunchConfigurationDelegate;
import org.eclipse.unittest.launcher.ITestRunnerClient;
import org.eclipse.unittest.model.ITestRunSession;
import org.eclipse.jdt.ui.unittest.junit.ui.JUnitTestViewSupport;
public class JUnitPluginTestViewSupport extends JUnitTestViewSupport {
@Override
public String getDisplayName() {
return "JUnit Plugin"; //$NON-NLS-1$
}
@Override
public ITestRunnerClient newTestRunnerClient(ITestRunSession session) {
String portAsString = session.getLaunch().getAttribute(JUnitPluginLaunchConfigurationDelegate.ATTR_PORT);
return new org.eclipse.jdt.ui.unittest.junit.launcher.JUnitRemoteTestRunnerClient(
portAsString != null ? Integer.parseInt(portAsString) : -1, session);
}
}
/*
* implements ITestViewSupport {
*
* public static final String FRAME_LINE_PREFIX = "at "; //$NON-NLS-1$
*
* @Override public Collection<StringMatcher> getTraceExclusionFilterPatterns()
* { return Arrays
* .stream(JUnitPreferencesConstants.parseList(Platform.getPreferencesService().
* getString( JUnitCorePlugin.CORE_PLUGIN_ID,
* JUnitPreferencesConstants.PREF_ACTIVE_FILTERS_LIST, "", null))) //$NON-NLS-1$
* .filter(Predicate.not(String::isBlank)) // .map(pattern -> new
* StringMatcher(pattern, true, false)) // .collect(Collectors.toList()); }
*
* @Override public IAction getOpenTestAction(Shell shell, ITestCaseElement
* testCase) { return new OpenTestAction(shell, testCase,
* getParameterTypes(testCase)); }
*
* @Override public IAction getOpenTestAction(Shell shell, ITestSuiteElement
* testSuite) { String testName = testSuite.getTestName(); List<? extends
* ITestElement> children = testSuite.getChildren(); if
* (testName.startsWith("[") && testName.endsWith("]") && !children.isEmpty()
* //$NON-NLS-1$ //$NON-NLS-2$ && children.get(0) instanceof ITestCaseElement) {
* // a group of parameterized tests return new OpenTestAction(shell,
* (ITestCaseElement) children.get(0), null); }
*
* int index = testName.indexOf('('); // test factory method if (index > 0) {
* return new OpenTestAction(shell, testSuite.getTestName(),
* testName.substring(0, index), getParameterTypes(testSuite), true,
* testSuite.getTestRunSession()); }
*
* // regular test class return new OpenTestAction(shell, testName,
* testSuite.getTestRunSession());
*
* }
*
* @Override public IAction createOpenEditorAction(Shell shell, ITestElement
* failure, String traceLine) { try { String testName = traceLine; int
* indexOfFramePrefix = testName.indexOf(FRAME_LINE_PREFIX); if
* (indexOfFramePrefix == -1) { return null; } testName =
* testName.substring(indexOfFramePrefix); testName =
* testName.substring(FRAME_LINE_PREFIX.length(),
* testName.lastIndexOf('(')).trim(); int indexOfModuleSeparator =
* testName.lastIndexOf('/'); if (indexOfModuleSeparator != -1) { testName =
* testName.substring(indexOfModuleSeparator + 1); } testName =
* testName.substring(0, testName.lastIndexOf('.')); int innerSeparatorIndex =
* testName.indexOf('$'); if (innerSeparatorIndex != -1) testName =
* testName.substring(0, innerSeparatorIndex);
*
* String lineNumber = traceLine; lineNumber =
* lineNumber.substring(lineNumber.indexOf(':') + 1,
* lineNumber.lastIndexOf(')')); int line; try { line =
* Integer.parseInt(lineNumber); } catch (NumberFormatException e) { // In some
* cases the line number can be omitted from a stack trace line line = 1; }
* return new OpenEditorAtLineAction(shell, testName, line,
* failure.getTestRunSession()); } catch (IndexOutOfBoundsException e) {
* JUnitPluginTestPlugin.log(e); } return null; }
*
* @Override public Runnable
* createShowStackTraceInConsoleViewActionDelegate(ITestElement failedTest) {
* return new ShowStackTraceInConsoleViewActionDelegate(failedTest); }
*
* @Override public ILaunchConfiguration
* getRerunLaunchConfiguration(List<ITestElement> tests) { if (tests.size() > 1)
* { MessageDialog.openInformation(Display.getDefault().getActiveShell(),
* JUnitMessages.JUnitCantRunMultipleTests,
* JUnitMessages.JUnitCantRunMultipleTests); return null; } ITestElement
* testSuite = tests.get(0); String testMethodName = null; // test method name
* is null when re-running a regular test class String testName =
* testSuite.getTestName();
*
* ILaunchConfiguration launchConfiguration =
* testSuite.getTestRunSession().getLaunch().getLaunchConfiguration(); ITestKind
* junitKind; try { junitKind = JUnitVersion
* .fromJUnitTestKindId(launchConfiguration
* .getAttribute(JUnitLaunchConfigurationConstants.ATTR_TEST_RUNNER_KIND, ""))
* //$NON-NLS-1$ .getJUnitTestKind(); } catch (CoreException e) {
* JUnitPluginTestPlugin.log(e); return null; }
*
* IJavaProject project = JUnitLaunchConfigurationConstants
* .getJavaProject(testSuite.getTestRunSession().getLaunch().
* getLaunchConfiguration()); if (project == null) { return null; }
*
* String qualifiedName = null; IType testType = findTestClass(testSuite,
* junitKind.getFinder(), project, true); if (testType != null) { qualifiedName
* = testType.getFullyQualifiedName();
*
* if (!qualifiedName.equals(testName)) { int index = testName.indexOf('('); if
* (index > 0) { // test factory method testMethodName = testName.substring(0,
* index); } } String[] parameterTypes = getParameterTypes(testSuite); if
* (testMethodName != null && parameterTypes != null) { String paramTypesStr =
* Arrays.stream(parameterTypes).collect(Collectors.joining(",")); //$NON-NLS-1$
* testMethodName = testMethodName + "(" + paramTypesStr + ")"; //$NON-NLS-1$
* //$NON-NLS-2$ } } else { // see bug 443498 testType =
* findTestClass(testSuite.getParent(), junitKind.getFinder(), project, false);
* if (testType != null && testSuite instanceof ITestSuiteElement) {
* qualifiedName = testType.getFullyQualifiedName();
*
* String className = getClassName(testSuite); if
* (!qualifiedName.equals(className)) { testMethodName = testName; } } }
*
* ILaunchConfigurationWorkingCopy res; try { res =
* launchConfiguration.copy(launchConfiguration.getName() + " - rerun");
* //$NON-NLS-1$
* res.setAttribute(JUnitLaunchConfigurationConstants.ATTR_TEST_METHOD_NAME,
* testMethodName); return res; } catch (CoreException e) {
* JUnitPluginTestPlugin.log(e); return null; }
*
* }
*/
/*
* Returns the element's test class or the next container's test class, which
* exists, and for which ITestFinder.isTest() is true.
*/
/*
* private IType findTestClass(ITestElement element, ITestFinder finder,
* IJavaProject project, boolean checkOnlyCurrentElement) { ITestElement current
* = element; while (current != null) { try { String className = null; if
* (current instanceof ITestRunSession) { ILaunch launch =
* element.getTestRunSession().getLaunch(); if (launch != null) {
* ILaunchConfiguration configuration = launch.getLaunchConfiguration(); if
* (configuration != null) { className = configuration
* .getAttribute(IJavaLaunchConfigurationConstants.ATTR_MAIN_TYPE_NAME, (String)
* null); } } } else { className = getClassName(current); }
*
* if (className != null) { IType type = project.findType(className); if (type
* != null && finder.isTest(type)) { return type; } else if
* (checkOnlyCurrentElement) { return null; } } } catch (CoreException e) {
* JUnitPluginTestPlugin.log(e); } current = current.getParent(); } return null;
* }
*
* @Override public String getDisplayName() { return "JUnit Plugin";
* //$NON-NLS-1$ }
*
* @Override public ITestRunnerClient newTestRunnerClient(ITestRunSession
* session) { String portAsString =
* session.getLaunch().getAttribute(JUnitPluginLaunchConfigurationDelegate.
* ATTR_PORT); return new JUnitRemoteTestRunnerClient(portAsString != null ?
* Integer.parseInt(portAsString) : -1, session); }
*/
/**
* Returns the parameter types specified for this test element
*
* @param test test
* @return a parameter type array
*/
/*
* private String[] getParameterTypes(ITestElement test) { String testName =
* test.getDisplayName(); if (testName != null) { int index =
* testName.lastIndexOf("method:"); //$NON-NLS-1$ if (index != -1) { index =
* testName.indexOf('(', index); if (index > 0) { int closeIndex =
* testName.indexOf(')', index); if (closeIndex > 0) { String params =
* testName.substring(index + 1, closeIndex); return params.split(",");
* //$NON-NLS-1$ } } } } return null; }
*/
/**
* Returns the type/class of the test element
*
* @param test test
* @return return the type/class name
*/
/*
* public static String getClassName(ITestElement test) { return
* extractClassName(test.getTestName()); }
*
* private static String extractClassName(String testNameString) {
* testNameString = extractRawClassName(testNameString); testNameString =
* testNameString.replace('$', '.'); // see bug 178503 return testNameString; }
*/
/**
* Extracts and returns a raw class name from a test element name
*
* @param testNameString a test element name
*
* @return an extracted raw class name
*/
/*
* public static String extractRawClassName(String testNameString) { if
* (testNameString.startsWith("[") && testNameString.endsWith("]")) {
* //$NON-NLS-1$ //$NON-NLS-2$ // a group of parameterized tests, see //
* https://bugs.eclipse.org/bugs/show_bug.cgi?id=102512 return testNameString; }
* int index = testNameString.lastIndexOf('('); if (index < 0) return
* testNameString; int end = testNameString.lastIndexOf(')'); return
* testNameString.substring(index + 1, end > index ? end :
* testNameString.length()); }
*
* public static String getTestMethodName(ITestElement test) { String testName =
* test.getTestName(); int index = testName.lastIndexOf('('); if (index > 0)
* return testName.substring(0, index); index = testName.indexOf('@'); if (index
* > 0) return testName.substring(0, index); return testName; }
*
* }
*/