[861874] | 1 | /*******************************************************************************
|
---|
| 2 | * Copyright (c) 2008 Gerhard Leonhartsberger.
|
---|
| 3 | * All rights reserved. This program and the accompanying materials
|
---|
| 4 | * are made available under the terms of the Eclipse Public License v1.0
|
---|
| 5 | * which accompanies this distribution, and is available at
|
---|
| 6 | * http://www.eclipse.org/legal/epl-v10.html
|
---|
| 7 | *******************************************************************************/
|
---|
| 8 |
|
---|
| 9 | #ifndef TESTRUNNERSERVER_H_
|
---|
| 10 | #define TESTRUNNERSERVER_H_
|
---|
| 11 |
|
---|
| 12 | #ifdef CPPUNIT_MAIN
|
---|
| 13 |
|
---|
| 14 | #include "cppunit/TestListener.h"
|
---|
| 15 |
|
---|
| 16 | #include <vector>
|
---|
| 17 | #include <string>
|
---|
| 18 |
|
---|
| 19 | /*!
|
---|
| 20 | * Class <code>TestRunnerClient</code> handles the network connection to the
|
---|
| 21 | * <code>CppUnitServer</code> and executes all registered CppUnit tests.
|
---|
| 22 | * <p>
|
---|
| 23 | * The meta data of the CppUnit tests and the test results are sent to the
|
---|
| 24 | * <code>CppUnitServer</code> for displaying.
|
---|
| 25 | * </p>
|
---|
| 26 | * <p>
|
---|
| 27 | * For debugging purposes class <code>TestRunnerClient</code> displays debug
|
---|
| 28 | * messages on <code>std.cerr</code>. The debug modus is activated by specifying
|
---|
| 29 | * <code>debug</code> command line option. The command line is parsed by method
|
---|
| 30 | * <code>Init()</code>.
|
---|
| 31 | * </p>
|
---|
| 32 | * <p>
|
---|
| 33 | * Note: This class is not intended to be subclassed by clients. This class is
|
---|
| 34 | * based on the original <code>RemoteTestRunner</code> class provided by
|
---|
| 35 | * <code>org.eclipse.cdt.cppunit</code>.
|
---|
| 36 | * </p>
|
---|
| 37 | *
|
---|
| 38 | * @author Gerhard Leonhartsberger
|
---|
| 39 | */
|
---|
| 40 | class TestRunnerClient: public CppUnit::TestListener
|
---|
| 41 | {
|
---|
| 42 | private:
|
---|
| 43 | CppUnit::TestResult *fTestResult;
|
---|
| 44 | int fClientSocket;
|
---|
| 45 | char *fHost;
|
---|
| 46 | int fPort;
|
---|
| 47 | int fDebugMode;
|
---|
| 48 | int fKeepAlive;
|
---|
| 49 |
|
---|
| 50 | public:
|
---|
| 51 | TestRunnerClient();
|
---|
| 52 | virtual ~TestRunnerClient();
|
---|
| 53 |
|
---|
| 54 | /*!
|
---|
| 55 | * Initializes the <code>TestRunnerClient</code>.
|
---|
| 56 | * <p>
|
---|
| 57 | * The given <code>args</code> are parsed. The syntax for the arguments is
|
---|
| 58 | * defined in EBNF as follows: <code>{-option=value}</code>
|
---|
| 59 | * </p>
|
---|
| 60 | *
|
---|
| 61 | * @param n The number of arguments.
|
---|
| 62 | * @param args The argument values. Valid options are:
|
---|
| 63 | * <li><code>-debug</code> When present the TestRunnerClient
|
---|
| 64 | * is run in debug modus and displays debug messages.</li>
|
---|
| 65 | * <li><code>-port=number</code> Defines the port where
|
---|
| 66 | * CppUnitServer is listening for client connections.</li>
|
---|
| 67 | */
|
---|
| 68 | void Init(int n,char *args[]);
|
---|
| 69 |
|
---|
| 70 | /*!
|
---|
| 71 | * Runs the TestRunnerClient. A trial to connect to the CppUnitServer is done.
|
---|
| 72 | * The test results are sent to the CppUnitServer.
|
---|
| 73 | *
|
---|
| 74 | * @return The return value is <code>0</code> when the CppUnitServer was connected successfully
|
---|
| 75 | * otherwise the return value is <code>-1</code>.
|
---|
| 76 | */
|
---|
| 77 | int Run();
|
---|
| 78 |
|
---|
| 79 | /*!
|
---|
| 80 | * Stops processing <code>CppUnit</code> from executing tests.
|
---|
| 81 | */
|
---|
| 82 | void Stop();
|
---|
| 83 |
|
---|
| 84 | /*!
|
---|
| 85 | * Method defined in <code>CppUnit::TestListener</code>.
|
---|
| 86 | */
|
---|
| 87 | void startTest(CppUnit::Test *test);
|
---|
| 88 |
|
---|
| 89 | /*!
|
---|
| 90 | * Method defined in <code>CppUnit::TestListener</code>.
|
---|
| 91 | */
|
---|
| 92 | void addFailure(const CppUnit::TestFailure &failure);
|
---|
| 93 |
|
---|
| 94 | /*!
|
---|
| 95 | * Method defined in <code>CppUnit::TestListener</code>.
|
---|
| 96 | */
|
---|
| 97 | void endTest(CppUnit::Test *test);
|
---|
| 98 |
|
---|
| 99 | private:
|
---|
| 100 | int Connect();
|
---|
| 101 | void RunTests();
|
---|
| 102 | void ShutDown();
|
---|
| 103 |
|
---|
| 104 | // utility methods
|
---|
| 105 | void ParseCommandLine(int n, char *args[]);
|
---|
| 106 | void DefineHostName();
|
---|
| 107 | void InstallListeners();
|
---|
| 108 | void UninstallListeners();
|
---|
| 109 |
|
---|
| 110 | /*!
|
---|
| 111 | * Sends the given test to the CppUnitView.
|
---|
| 112 | * <p>
|
---|
| 113 | * In case of test is of type CppUnit::Test the following protocol is sent:
|
---|
| 114 | * <code>TSTTREE name, false, testCaseCount</code>
|
---|
| 115 | * </p>
|
---|
| 116 | * <p>
|
---|
| 117 | * In case of test is of type CppUnit::TestSuite the following protocol is sent:
|
---|
| 118 | * TSTTREE name, true, testCount
|
---|
| 119 | * </p>
|
---|
| 120 | * @param test the CppUnit test
|
---|
| 121 | */
|
---|
| 122 | void SendTestTree(CppUnit::Test *test);
|
---|
| 123 | void SendMessage(std::string msg);
|
---|
| 124 |
|
---|
| 125 | // Notification methods
|
---|
| 126 | void NotifyTestRunStarted(int testCount);
|
---|
| 127 | void NotifyTestRunEnded(long elapsedTime);
|
---|
| 128 | void NotifyTestRunStopped(long elapsedTime);
|
---|
| 129 | void NotifyTestTreeEntry(std::string treeEntry);
|
---|
| 130 | void NotifyTestStarted(std::string testName);
|
---|
| 131 | void NotifyTestEnded(std::string testName);
|
---|
| 132 | void NotifyTestFailed(std::string status, std::string testName, std::string trace);
|
---|
| 133 |
|
---|
| 134 | std::string GetTrace(const CppUnit::TestFailure &failure);
|
---|
| 135 | long CurrentTimeMillis();
|
---|
| 136 | void PrivateSleep(int millisecs);
|
---|
| 137 | };
|
---|
| 138 |
|
---|
| 139 | #endif /*CPPUNIT_MAIN*/
|
---|
| 140 | #endif /*TESTRUNNERSERVER_H_*/
|
---|