| /******************************************************************************* |
| * Copyright (c) 2011, 2012 Anton Gorenkov |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Anton Gorenkov - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.cdt.testsrunner.internal.gtest; |
| |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.text.MessageFormat; |
| |
| import org.eclipse.cdt.testsrunner.launcher.ITestsRunnerProvider; |
| import org.eclipse.cdt.testsrunner.model.ITestModelUpdater; |
| import org.eclipse.cdt.testsrunner.model.TestingException; |
| |
| |
| /** |
| * The Tests Runner provider plug-in to run tests with Google Testing framework. |
| * |
| * Parses the text test module to output and provides the data for the Tests |
| * Runner Plug-In. |
| */ |
| public class GoogleTestsRunnerProvider implements ITestsRunnerProvider { |
| |
| private static final String TEST_PATHS_DELIMITED = ":"; //$NON-NLS-1$ |
| private static final String TEST_PATH_PARTS_DELIMITED = "."; //$NON-NLS-1$ |
| private static final String ALL_TESTS= ".*"; //$NON-NLS-1$ |
| |
| |
| @Override |
| public String[] getAdditionalLaunchParameters(String[][] testPaths) { |
| final String[] gtestParameters = { |
| "--gtest_repeat=1", //$NON-NLS-1$ |
| "--gtest_print_time=1", //$NON-NLS-1$ |
| "--gtest_color=no", //$NON-NLS-1$ |
| }; |
| String[] result = gtestParameters; |
| |
| // Build tests filter |
| if (testPaths != null && testPaths.length >= 1) { |
| StringBuilder sb = new StringBuilder("--gtest_filter="); //$NON-NLS-1$ |
| boolean needTestPathDelimiter = false; |
| for (String[] testPath : testPaths) { |
| if (needTestPathDelimiter) { |
| sb.append(TEST_PATHS_DELIMITED); |
| } else { |
| needTestPathDelimiter = true; |
| } |
| boolean needTestPathPartDelimiter = false; |
| for (String testPathPart : testPath) { |
| if (needTestPathPartDelimiter) { |
| sb.append(TEST_PATH_PARTS_DELIMITED); |
| } else { |
| needTestPathPartDelimiter = true; |
| } |
| sb.append(testPathPart); |
| } |
| // If it is a test suite |
| if (testPath.length <= 1) { |
| sb.append(ALL_TESTS); |
| } |
| } |
| result = new String[gtestParameters.length + 1]; |
| System.arraycopy(gtestParameters, 0, result, 0, gtestParameters.length); |
| result[gtestParameters.length] = sb.toString(); |
| } |
| return result; |
| } |
| |
| /** |
| * Construct the error message from prefix and detailed description. |
| * |
| * @param prefix prefix |
| * @param description detailed description |
| * @return the full message |
| */ |
| private String getErrorText(String prefix, String description) { |
| return MessageFormat.format(GoogleTestsRunnerMessages.GoogleTestsRunner_error_format, prefix, description); |
| } |
| |
| @Override |
| public void run(ITestModelUpdater modelUpdater, InputStream inputStream) throws TestingException { |
| |
| try { |
| OutputHandler ouputHandler = new OutputHandler(modelUpdater); |
| ouputHandler.run(inputStream); |
| } catch (IOException e) { |
| throw new TestingException(getErrorText(GoogleTestsRunnerMessages.GoogleTestsRunner_io_error_prefix, e.getLocalizedMessage())); |
| } |
| } |
| |
| } |