summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'QA/Checker')
-rw-r--r--QA/Checker/SConscript14
-rw-r--r--QA/Checker/checker.cpp73
2 files changed, 87 insertions, 0 deletions
diff --git a/QA/Checker/SConscript b/QA/Checker/SConscript
new file mode 100644
index 0000000..0456b93
--- /dev/null
+++ b/QA/Checker/SConscript
@@ -0,0 +1,14 @@
+Import("env")
+
+if env["TEST"] :
+ if env["SCONS_STAGE"] == "flags" :
+ env["CHECKER_FLAGS"] = {
+ "LIBS": ["Checker"],
+ "LIBPATH": [Dir(".")],
+ "LINKFLAGS": ["/SUBSYSTEM:CONSOLE"] if env["PLATFORM"] == "win32" else []
+ }
+
+ if env["SCONS_STAGE"] == "build" :
+ checker_env = env.Clone()
+ checker_env.MergeFlags(env["CPPUNIT_FLAGS"])
+ checker_env.Library("Checker", "checker.cpp")
diff --git a/QA/Checker/checker.cpp b/QA/Checker/checker.cpp
new file mode 100644
index 0000000..b59cea6
--- /dev/null
+++ b/QA/Checker/checker.cpp
@@ -0,0 +1,73 @@
+#include <string>
+#include <cppunit/ui/text/TestRunner.h>
+#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[]) {
+ 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);
+ }
+ }
+
+ // 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;
+}