Add command line parser on Testbench 16/200216/2 accepted/tizen/unified/20190502.051441 submit/tizen/20190430.085417
authorsangwan.kwon <sangwan.kwon@samsung.com>
Wed, 20 Feb 2019 07:23:36 +0000 (16:23 +0900)
committersangwan.kwon <sangwan.kwon@samsung.com>
Wed, 20 Feb 2019 07:33:11 +0000 (16:33 +0900)
$ klay-test --help

Usage: klay-test [Option]

Options :
   -a, --run-all               run all TESTCASES
   -r, --run=[TESTCASE]        run TESTCASE
   -l, --list                  list TESTCASES
   -h, --help                  show this

Change-Id: I6591550dba254d833165c63ffc85178db1b9da99
Signed-off-by: sangwan.kwon <sangwan.kwon@samsung.com>
include/klay/testbench.h
include/klay/testbench/test-driver.h
include/klay/testbench/test-reporter.h
src/testbench.cpp
src/testbench/test-driver.cpp
src/testbench/test-reporter.cpp
test/main.cpp

index f63521a71a910d1058867fbc93b39c5d357c07da..f7550dd428f6639ffa2e5378484517028d833ad8 100644 (file)
@@ -30,7 +30,9 @@ namespace testbench {
 
 class KLAY_EXPORT Testbench {
 public:
-       static void runAllTestSuites();
+       static void run(int argc, char* argv[]);
+
+       static void runAllTestSuites(); // Deprecated Function
 };
 
 struct KLAY_EXPORT Source;
index b7b298dfd842f316143a83682f8343a525d40473..cbd7d460c33e528426c1f6d1e998d8b706b3c1f2 100644 (file)
@@ -39,10 +39,12 @@ public:
 
        static TestDriver& GetInstance(void);
 
-       void addTestCase(TestCase* testCase);
-       void addFailure(const std::string& name, const Source& source);
+       void addTestCase(TestCase* testCase) noexcept;
+       void addFailure(const std::string& name, const Source& source) noexcept;
 
-       void run(void);
+       void run(void) noexcept;
+       void run(const std::string& name) noexcept;
+       void list(void) const noexcept;
 
 private:
        TestDriver() = default;
index bc74fcd5f819df7d2f6c4f593ca44646a52b5fc0..50f225aec6911fba13f2d345f3d600e36c584f81 100644 (file)
@@ -46,6 +46,7 @@ public:
        void addFailure(const std::string& name, const Source& source) noexcept;
        void addException(const std::string& name) noexcept;
        void report(void) const noexcept;
+       void print(const std::string& name) const noexcept;
 
 private:
        std::size_t total = 0;
index d337e2f9a50b9d9cd7091d874945789787a4735e..97af95c60f8a272966d3374c23781e5a8788980f 100644 (file)
 
 #include <klay/testbench.h>
 
+#include <iostream>
+#include <string>
+
+#include <getopt.h>
+
 namespace klay {
 namespace testbench {
 
+namespace {
+
+void usage(const std::string name)
+{
+       std::cout << "Usage: " << name << " [Option]" << std::endl
+                         << std::endl
+                         << "Options :" << std::endl
+                         << "   -a, --run-all               run all TESTCASES" << std::endl
+                         << "   -r, --run=[TESTCASE]        run TESTCASE" << std::endl
+                         << "   -l, --list                  list TESTCASES" << std::endl
+                         << "   -h, --help                  show this" << std::endl
+                         << std::endl;
+}
+
+} // anonymous namespace
+
+void Testbench::run(int argc, char* argv[])
+{
+       struct option options[] = {
+               {"run-all", no_argument, 0, 'a'},
+               {"run", required_argument, 0, 'r'},
+               {"list", no_argument, 0, 'l'},
+               {"help", no_argument, 0, 'h'},
+               {0, 0, 0, 0}
+       };
+
+       if (argc <= 1) {
+               usage(argv[0]);
+               TestDriver::GetInstance().run();
+               return;
+       }
+
+       while (int opt = getopt_long(argc, argv, "ar:lh", options, 0)) {
+               if (opt == -1)
+                       break;
+
+               switch (opt) {
+               case 'a':
+                       TestDriver::GetInstance().run();
+                       break;
+               case 'r':
+                       TestDriver::GetInstance().run(optarg);
+                       break;
+               case 'l':
+                       TestDriver::GetInstance().list();
+                       break;
+               case 'h':
+               default:
+                       usage(argv[0]);
+               }
+       }
+}
+
 void Testbench::runAllTestSuites()
 {
        TestDriver::GetInstance().run();
index 218d849e5a299ca571cd0968154d76a0c1df59e4..5b6628a3de346bf5e6f36d174e71428c78d15ce6 100644 (file)
@@ -31,17 +31,17 @@ TestDriver& TestDriver::GetInstance()
        return *TestDriver::instance;
 }
 
-void TestDriver::addTestCase(TestCase* testCase)
+void TestDriver::addTestCase(TestCase* testCase) noexcept
 {
        this->testSuite.addTestCase(testCase);
 }
 
-void TestDriver::addFailure(const std::string& name, const Source& source)
+void TestDriver::addFailure(const std::string& name, const Source& source) noexcept
 {
        this->reporter.addFailure(name, source);
 }
 
-void TestDriver::run(void)
+void TestDriver::run(void) noexcept
 {
        const auto& testCases = this->testSuite.getTestCases();
        for (const auto& tc : testCases) {
@@ -59,5 +59,35 @@ void TestDriver::run(void)
        this->reporter.report();
 }
 
+void TestDriver::run(const std::string& name) noexcept
+{
+       const auto& testCases = this->testSuite.getTestCases();
+       for (const auto& tc : testCases) {
+               if (name.compare(tc->getName()) != 0)
+                       continue;
+
+               auto startTime = this->reporter.start(tc->getName());
+
+               try {
+                       tc->task();
+               } catch (...) {
+                       this->reporter.addException(tc->getName());
+               }
+
+               this->reporter.end(tc->getName(), startTime);
+
+               break;
+       }
+
+       this->reporter.report();
+}
+
+void TestDriver::list(void) const noexcept
+{
+       const auto& testCases = this->testSuite.getTestCases();
+       for (const auto& tc : testCases)
+               this->reporter.print(tc->getName());
+}
+
 } //namespace testbench
 } //namespace klay
index 2859053e5c5208c9084f030d773cdf3dfa437171..50278a0527b617c1965235434f91c1dd161d0cae 100644 (file)
@@ -80,5 +80,10 @@ void TestReporter::report(void) const noexcept
                                  << Colorize(DEFAULT);
 }
 
+void TestReporter::print(const std::string& name) const noexcept
+{
+       std::cout << "Testcase name: " << name << std::endl;
+}
+
 } //namespace testbench
 } //namespace klay
index 050f96a5b773518abf9f033a3593db6f445a8f21..3219d3e1c9b6e1a1592529b839c5547d7b9e2b36 100644 (file)
@@ -17,9 +17,9 @@
 
 #include <klay/testbench.h>
 
-int main(int /*argc*/, char** /*argv*/)
+int main(int argc, char* argv[])
 {
-       testbench::Testbench::runAllTestSuites();
+       testbench::Testbench::run(argc, argv);
 
        return 0;
 }