summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'QA/UnitTest/checker.cpp')
-rw-r--r--QA/UnitTest/checker.cpp73
1 files changed, 65 insertions, 8 deletions
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;
}