summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-07-17 19:16:53 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-07-17 19:16:53 (GMT)
commitde745f71cff330f37637c73d44c30acfb6f70a93 (patch)
treee131055c43fdfc0b744f16be396df51222d6868a
parenta328466bc492c50c443e406b9325542a75182327 (diff)
downloadswift-de745f71cff330f37637c73d44c30acfb6f70a93.zip
swift-de745f71cff330f37637c73d44c30acfb6f70a93.tar.bz2
Extended CppUnit checker to have test selection.
-rw-r--r--3rdParty/CppUnit/Makefile.inc1
-rw-r--r--3rdParty/CppUnit/cppunit/BriefTestProgressListener.h43
-rw-r--r--3rdParty/CppUnit/src/BriefTestProgressListener.cpp49
-rw-r--r--QA/UnitTest/checker.cpp73
4 files changed, 158 insertions, 8 deletions
diff --git a/3rdParty/CppUnit/Makefile.inc b/3rdParty/CppUnit/Makefile.inc
index 3c94d1f..27aadc2 100644
--- a/3rdParty/CppUnit/Makefile.inc
+++ b/3rdParty/CppUnit/Makefile.inc
@@ -5,6 +5,7 @@ CPPUNIT_TARGET = 3rdParty/CppUnit/CppUnit.a
CPPUNIT_SOURCES = \
3rdParty/CppUnit/src/TextTestRunner.cpp \
3rdParty/CppUnit/src/TextTestProgressListener.cpp \
+ 3rdParty/CppUnit/src/BriefTestProgressListener.cpp \
3rdParty/CppUnit/src/TextOutputter.cpp \
3rdParty/CppUnit/src/XmlOutputter.cpp \
3rdParty/CppUnit/src/XmlElement.cpp \
diff --git a/3rdParty/CppUnit/cppunit/BriefTestProgressListener.h b/3rdParty/CppUnit/cppunit/BriefTestProgressListener.h
new file mode 100644
index 0000000..137ca44
--- /dev/null
+++ b/3rdParty/CppUnit/cppunit/BriefTestProgressListener.h
@@ -0,0 +1,43 @@
+#ifndef CPPUNIT_BRIEFTESTPROGRESSLISTENER_H
+#define CPPUNIT_BRIEFTESTPROGRESSLISTENER_H
+
+#include <cppunit/TestListener.h>
+
+
+CPPUNIT_NS_BEGIN
+
+
+/*! \brief TestListener that prints the name of each test before running it.
+ * \ingroup TrackingTestExecution
+ */
+class CPPUNIT_API BriefTestProgressListener : public TestListener
+{
+public:
+ /*! Constructs a BriefTestProgressListener object.
+ */
+ BriefTestProgressListener();
+
+ /// Destructor.
+ virtual ~BriefTestProgressListener();
+
+ void startTest( Test *test );
+
+ void addFailure( const TestFailure &failure );
+
+ void endTest( Test *test );
+
+private:
+ /// Prevents the use of the copy constructor.
+ BriefTestProgressListener( const BriefTestProgressListener &copy );
+
+ /// Prevents the use of the copy operator.
+ void operator =( const BriefTestProgressListener &copy );
+
+private:
+ bool m_lastTestFailed;
+};
+
+
+CPPUNIT_NS_END
+
+#endif // CPPUNIT_BRIEFTESTPROGRESSLISTENER_H
diff --git a/3rdParty/CppUnit/src/BriefTestProgressListener.cpp b/3rdParty/CppUnit/src/BriefTestProgressListener.cpp
new file mode 100644
index 0000000..c38cea0
--- /dev/null
+++ b/3rdParty/CppUnit/src/BriefTestProgressListener.cpp
@@ -0,0 +1,49 @@
+#include <cppunit/BriefTestProgressListener.h>
+#include <cppunit/Test.h>
+#include <cppunit/TestFailure.h>
+#include <cppunit/portability/Stream.h>
+
+
+CPPUNIT_NS_BEGIN
+
+
+BriefTestProgressListener::BriefTestProgressListener()
+ : m_lastTestFailed( false )
+{
+}
+
+
+BriefTestProgressListener::~BriefTestProgressListener()
+{
+}
+
+
+void
+BriefTestProgressListener::startTest( Test *test )
+{
+ stdCOut() << test->getName();
+ stdCOut().flush();
+
+ m_lastTestFailed = false;
+}
+
+
+void
+BriefTestProgressListener::addFailure( const TestFailure &failure )
+{
+ stdCOut() << " : " << (failure.isError() ? "error" : "assertion");
+ m_lastTestFailed = true;
+}
+
+
+void
+BriefTestProgressListener::endTest( Test *test )
+{
+ if ( !m_lastTestFailed )
+ stdCOut() << " : OK";
+ stdCOut() << "\n";
+}
+
+
+CPPUNIT_NS_END
+
diff --git a/QA/UnitTest/checker.cpp b/QA/UnitTest/checker.cpp
index ea4f0d9..b59cea6 100644
--- a/QA/UnitTest/checker.cpp
+++ b/QA/UnitTest/checker.cpp
@@ -3,14 +3,71 @@
#include <cppunit/extensions/TestFactoryRegistry.h>
#include <cppunit/XmlOutputter.h>
#include <cppunit/TextTestResult.h>
+#include <cppunit/BriefTestProgressListener.h>
+#include <cppunit/TextTestProgressListener.h>
+#include <cppunit/TextOutputter.h>
-int main(int argc, char* argv[])
-{
- CppUnit::TestFactoryRegistry& registry = CppUnit::TestFactoryRegistry::getRegistry();
- CppUnit::TextUi::TestRunner runner;
- runner.addTest( registry.makeTest() );
- if (argc >= 2 && std::string(argv[1]) != std::string("--xml")) {
- runner.setOutputter(new CppUnit::XmlOutputter(&runner.result(), std::cout));
+int main(int argc, char* argv[]) {
+ bool verbose = false;
+ bool outputXML = false;
+
+ // Parse parameters
+ std::vector<std::string> testsToRun;
+ for (int i = 1; i < argc; ++i) {
+ std::string param(argv[i]);
+ if (param == "--verbose") {
+ verbose = true;
+ }
+ else if (param == "--xml") {
+ outputXML = true;
+ }
+ else {
+ testsToRun.push_back(param);
+ }
+ }
+ if (testsToRun.empty()) {
+ testsToRun.push_back("");
+ }
+
+ // Set up the listeners
+ CppUnit::TestResult controller;
+
+ CppUnit::TestResultCollector result;
+ controller.addListener(&result);
+
+ CppUnit::TextTestProgressListener progressListener;
+ CppUnit::BriefTestProgressListener verboseListener;
+ if (!outputXML) {
+ if (verbose) {
+ controller.addListener(&verboseListener);
+ }
+ else {
+ controller.addListener(&progressListener);
+ }
}
- return (runner.run("") ? 0 : 1);
+
+ // Run the tests
+ CppUnit::TestRunner runner;
+ runner.addTest(CppUnit::TestFactoryRegistry::getRegistry().makeTest());
+ for (std::vector<std::string>::const_iterator i = testsToRun.begin(); i != testsToRun.end(); ++i) {
+ try {
+ runner.run(controller, *i);
+ }
+ catch (const std::exception& e) {
+ std::cerr << "Error: " << e.what() << std::endl;
+ return -1;
+ }
+ }
+
+ // Output the results
+ if (outputXML) {
+ CppUnit::XmlOutputter outputter(&result, std::cerr);
+ outputter.write();
+ }
+ else {
+ CppUnit::TextOutputter outputter(&result, std::cerr);
+ outputter.write();
+ }
+
+ return result.wasSuccessful() ? 0 : 1;
}