summaryrefslogtreecommitdiff
path: root/test/TestRunnerClient.h
diff options
context:
space:
mode:
Diffstat (limited to 'test/TestRunnerClient.h')
-rw-r--r--test/TestRunnerClient.h147
1 files changed, 147 insertions, 0 deletions
diff --git a/test/TestRunnerClient.h b/test/TestRunnerClient.h
new file mode 100644
index 0000000..4dc4460
--- /dev/null
+++ b/test/TestRunnerClient.h
@@ -0,0 +1,147 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Gerhard Leonhartsberger.
+ * 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
+ *******************************************************************************/
+
+#ifndef TESTRUNNERSERVER_H_
+#define TESTRUNNERSERVER_H_
+
+#ifdef CPPUNIT_MAIN
+
+#include "cppunit/TestResultCollector.h"
+#include "cppunit/TestListener.h"
+
+#include <vector>
+#include <string>
+#include <string.h>
+#include <stdlib.h>
+
+
+/*!
+ * Class <code>TestRunnerClient</code> handles the network connection to the
+ * <code>CppUnitServer</code> and executes all registered CppUnit tests.
+ * <p>
+ * The meta data of the CppUnit tests and the test results are sent to the
+ * <code>CppUnitServer</code> for displaying.
+ * </p>
+ * <p>
+ * For debugging purposes class <code>TestRunnerClient</code> displays debug
+ * messages on <code>std.cerr</code>. The debug modus is activated by specifying
+ * <code>debug</code> command line option. The command line is parsed by method
+ * <code>Init()</code>.
+ * </p>
+ * <p>
+ * Note: This class is not intended to be subclassed by clients. This class is
+ * based on the original <code>RemoteTestRunner</code> class provided by
+ * <code>org.eclipse.cdt.cppunit</code>.
+ * </p>
+ *
+ * @author Gerhard Leonhartsberger
+ */
+class TestRunnerClient: public CppUnit::TestListener
+{
+private:
+ CppUnit::TestResult *fTestResult;
+ CppUnit::TestResultCollector resultCollector;
+ int fClientSocket;
+ char *fHost;
+ int fPort;
+ int fDebugMode;
+ int fKeepAlive;
+
+public:
+ TestRunnerClient();
+ virtual ~TestRunnerClient();
+
+ CppUnit::TestResultCollector& getResultCollector();
+
+ /*!
+ * Initializes the <code>TestRunnerClient</code>.
+ * <p>
+ * The given <code>args</code> are parsed. The syntax for the arguments is
+ * defined in EBNF as follows: <code>{-option=value}</code>
+ * </p>
+ *
+ * @param n The number of arguments.
+ * @param args The argument values. Valid options are:
+ * <li><code>-debug</code> When present the TestRunnerClient
+ * is run in debug modus and displays debug messages.</li>
+ * <li><code>-port=number</code> Defines the port where
+ * CppUnitServer is listening for client connections.</li>
+ */
+ void Init(int n,char *args[]);
+
+ /*!
+ * Runs the TestRunnerClient. A trial to connect to the CppUnitServer is done.
+ * The test results are sent to the CppUnitServer.
+ *
+ * @return The return value is <code>0</code> when the CppUnitServer was connected successfully
+ * otherwise the return value is <code>-1</code>.
+ */
+ int Run();
+
+ /*!
+ * Stops processing <code>CppUnit</code> from executing tests.
+ */
+ void Stop();
+
+ /*!
+ * Method defined in <code>CppUnit::TestListener</code>.
+ */
+ void startTest(CppUnit::Test *test);
+
+ /*!
+ * Method defined in <code>CppUnit::TestListener</code>.
+ */
+ void addFailure(const CppUnit::TestFailure &failure);
+
+ /*!
+ * Method defined in <code>CppUnit::TestListener</code>.
+ */
+ void endTest(CppUnit::Test *test);
+
+private:
+ int Connect();
+ void RunTests();
+ void ShutDown();
+
+ // utility methods
+ void ParseCommandLine(int n, char *args[]);
+ void DefineHostName();
+ void InstallListeners();
+ void UninstallListeners();
+
+ /*!
+ * Sends the given test to the CppUnitView.
+ * <p>
+ * In case of test is of type CppUnit::Test the following protocol is sent:
+ * <code>TSTTREE name, false, testCaseCount</code>
+ * </p>
+ * <p>
+ * In case of test is of type CppUnit::TestSuite the following protocol is sent:
+ * TSTTREE name, true, testCount
+ * </p>
+ * @param test the CppUnit test
+ */
+ void SendTestTree(CppUnit::Test *test);
+ void SendMessage(std::string msg);
+
+ // Notification methods
+ void NotifyTestRunStarted(int testCount);
+ void NotifyTestRunEnded(long elapsedTime);
+ void NotifyTestRunStopped(long elapsedTime);
+ void NotifyTestTreeEntry(std::string treeEntry);
+ void NotifyTestStarted(std::string testName);
+ void NotifyTestEnded(std::string testName);
+ void NotifyTestFailed(std::string status, std::string testName, std::string trace);
+
+ std::string GetTrace(const CppUnit::TestFailure &failure);
+ long CurrentTimeMillis();
+ void PrivateSleep(int millisecs);
+};
+
+#endif /*CPPUNIT_MAIN*/
+#endif /*TESTRUNNERSERVER_H_*/