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_*/
|
---|