| /******************************************************************************* |
| * 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; } |
| * |
| * } |
| */ |