Refine testbench for reporting elapsed time
authorsangwan.kwon <sangwan.kwon@samsung.com>
Thu, 1 Feb 2018 04:53:07 +0000 (13:53 +0900)
committerJaemin Ryu <jm77.ryu@samsung.com>
Mon, 11 Feb 2019 04:22:16 +0000 (13:22 +0900)
- Report elasped time.
- Run every testcase even failed.
- Colorize test result.

Change-Id: I156ceefff81fe76d11d61013d1b73efb9068d774
Signed-off-by: sangwan.kwon <sangwan.kwon@samsung.com>
include/klay/colorize.h [new file with mode: 0644]
include/klay/testbench.h
src/testbench.cpp
test/query-builder.cpp

diff --git a/include/klay/colorize.h b/include/klay/colorize.h
new file mode 100644 (file)
index 0000000..84b0103
--- /dev/null
@@ -0,0 +1,47 @@
+/*
+ *  Copyright (c) 2018 Samsung Electronics Co., Ltd All Rights Reserved
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License");
+ *  you may not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License
+ */
+#pragma once
+
+#include <ostream>
+
+namespace console {
+
+enum Code {
+       BLACK = 31,
+       RED = 31,
+       GREEN = 32,
+       YELLOW = 33,
+       BLUE = 34,
+       MAGENTA = 35,
+       CYAN = 36,
+       WHITE = 37,
+       DEFAULT = 39
+};
+
+class Colorize {
+public:
+       explicit Colorize(Code code = DEFAULT) : code(code) {}
+
+       friend std::ostream& operator<<(std::ostream& os, const Colorize& c)
+       {
+               return os << "\033[" << c.code << "m";
+       }
+
+private:
+       Code code;
+};
+
+} // namespace console
index a31a61672817564d11b2b0cb604136933a5c5830..7ad16a128f48826d4f76687eec3a4a487e0dda85 100644 (file)
 #include <vector>
 #include <memory>
 #include <sstream>
+#include <chrono>
 
 #include <klay/klay.h>
 
+using namespace std::chrono;
+
+#define TIME_MEASURE_START auto start = system_clock::now();
+#define TIME_MEASURE_END auto end = system_clock::now(); \
+                                                auto ms = duration_cast<milliseconds>(end - start); \
+                                                auto time = ms.count();
+
 namespace testbench {
 
 struct KLAY_EXPORT Source {
@@ -151,7 +159,6 @@ void TestName##TestCase::standalone()
                                << " but it was " << _act;              \
                testbench::Testbench::report(__testName,        \
                testbench::Source(__FILENAME__, __LINE__, _stream.str())); \
-               return;                                         \
        }                                                   \
 }
 
index 46d00414f30256da1ae7e89c9b9aae0fe83d5a6b..3f668dd137b21fb3f90fa3704eaefb5c26e900f7 100644 (file)
@@ -18,6 +18,9 @@
 #include <iostream>
 
 #include <klay/testbench.h>
+#include <klay/colorize.h>
+
+using namespace console;
 
 namespace testbench {
 
@@ -41,10 +44,12 @@ void TestResult::testsStarted()
 
 void TestResult::addFailure(const std::string& name, const Source& source)
 {
-       std::cout << "Testcase \"" << name << "\""
+       std::cout << Colorize(RED)
+                         << "\tTestcase \"" << name << "\""
                          << " failed: \"" << source.message << "\""
                          << " line " << source.lineNumber
-                         << " in " << source.fileName << std::endl;
+                         << " in " << source.fileName << std::endl
+                         << Colorize(DEFAULT);
 
        __failureCount++;
 }
@@ -52,9 +57,13 @@ void TestResult::addFailure(const std::string& name, const Source& source)
 void TestResult::testsEnded()
 {
        if (__failureCount > 0) {
-               std::cout << "\nThere were " << __failureCount << " failures" << std::endl;
+               std::cout << Colorize(RED)
+                                 << "\nThere were " << __failureCount << " failures" << std::endl
+                                 << Colorize(DEFAULT);
        } else {
-               std::cout << "\nThere were no test failures" << std::endl;
+               std::cout << Colorize(GREEN)
+                                 << "\nThere were no test failures" << std::endl
+                                 << Colorize(DEFAULT);
        }
 }
 
@@ -86,14 +95,19 @@ void TestSuite::run()
 
                std::cout << "Entering testcase: "
                                  << testcase.testName << std::endl;
+
+               TIME_MEASURE_START
                try {
                        (this->*testcase.function)();
                } catch (...) {
-                       TEST_FAIL("Caught exception from " +
+                       TEST_FAIL("\tCaught exception from " +
                                          testcase.testName + " testcase");
                }
-               std::cout << "Leaving testcase: "
-                                 << testcase.testName << std::endl;
+               TIME_MEASURE_END
+
+               std::cout << "Leaving testcase: " << testcase.testName
+                                 << " (Elapsed time: " << time
+                                 << "ms)" << std::endl;
 
                iter++;
        }
index 4b0aa2a79e3327e24432ebae8e1f4b70c49a28f7..8be20e4ac26e907f61612e99d68e389ee27c2b86 100644 (file)
@@ -70,15 +70,15 @@ TESTCASE(SELECT)
        std::string select1 = admin.select(&Admin::id, &Admin::pkg, &Admin::uid, &Admin::key);
        std::string select2 = admin.select(&Admin::id, &Admin::uid, &Admin::key);
 
-       TEST_EXPECT(true, select1 == "SELECT id, pkg, uid, key FROM admin");
-       TEST_EXPECT(true, select2 == "SELECT id, uid, key FROM admin");
+       TEST_EXPECT(select1, "SELECT id, pkg, uid, key FROM admin");
+       TEST_EXPECT(select2, "SELECT id, uid, key FROM admin");
 }
 
 TESTCASE(SELECT_ALL)
 {
        std::string select = admin.selectAll();
 
-       TEST_EXPECT(true, select == "SELECT * FROM admin");
+       TEST_EXPECT(select, "SELECT * FROM admin");
 }
 
 TESTCASE(SELECT_WHERE)
@@ -91,10 +91,10 @@ TESTCASE(SELECT_WHERE)
        std::string select4 = admin.selectAll().where(expr(&Admin::uid) > 3 ||
                                                                                                  expr(&Admin::pkg) == "dpm");
 
-       TEST_EXPECT(true, select1 == "SELECT uid, key FROM admin WHERE id > ?");
-       TEST_EXPECT(true, select2 == "SELECT * FROM admin WHERE uid > ?");
-       TEST_EXPECT(true, select3 == "SELECT * FROM admin WHERE uid > ? AND pkg = ?");
-       TEST_EXPECT(true, select4 == "SELECT * FROM admin WHERE uid > ? OR pkg = ?");
+       TEST_EXPECT(select1, "SELECT uid, key FROM admin WHERE id > ?");
+       TEST_EXPECT(select2, "SELECT * FROM admin WHERE uid > ?");
+       TEST_EXPECT(select3, "SELECT * FROM admin WHERE uid > ? AND pkg = ?");
+       TEST_EXPECT(select4, "SELECT * FROM admin WHERE uid > ? OR pkg = ?");
 }
 
 TESTCASE(SELECT_DISTINCT)
@@ -102,7 +102,7 @@ TESTCASE(SELECT_DISTINCT)
        std::string select = admin.select(distinct(&Admin::uid, &Admin::key))
                                                           .where(expr(&Admin::id) > 3);
 
-       TEST_EXPECT(true, select == "SELECT DISTINCT uid, key FROM admin WHERE id > ?");
+       TEST_EXPECT(select, "SELECT DISTINCT uid, key FROM admin WHERE id > ?");
 }
 
 TESTCASE(UPDATE)
@@ -114,9 +114,9 @@ TESTCASE(UPDATE)
        std::string update3 = admin.update(&Admin::key, &Admin::pkg)
                                                           .where(expr(&Admin::uid) == 0 && expr(&Admin::id) == 1);
 
-       TEST_EXPECT(true, update1 == "UPDATE admin SET id = ?, pkg = ?, uid = ?, key = ?");
-       TEST_EXPECT(true, update2 == "UPDATE admin SET key = ? WHERE uid = ? AND id = ?");
-       TEST_EXPECT(true, update3 == "UPDATE admin SET key = ?, pkg = ? WHERE uid = ? AND id = ?");
+       TEST_EXPECT(update1, "UPDATE admin SET id = ?, pkg = ?, uid = ?, key = ?");
+       TEST_EXPECT(update2, "UPDATE admin SET key = ? WHERE uid = ? AND id = ?");
+       TEST_EXPECT(update3, "UPDATE admin SET key = ?, pkg = ? WHERE uid = ? AND id = ?");
 }
 
 TESTCASE(DELETE)
@@ -125,8 +125,8 @@ TESTCASE(DELETE)
        std::string delete2 = admin.remove().where(expr(&Admin::pkg) == "dpm" &&
                                                                                           expr(&Admin::uid) == 3);
 
-       TEST_EXPECT(true, delete1 == "DELETE FROM admin");
-       TEST_EXPECT(true, delete2 == "DELETE FROM admin WHERE pkg = ? AND uid = ?");
+       TEST_EXPECT(delete1, "DELETE FROM admin");
+       TEST_EXPECT(delete2, "DELETE FROM admin WHERE pkg = ? AND uid = ?");
 }
 
 TESTCASE(INSERT)
@@ -134,8 +134,8 @@ TESTCASE(INSERT)
        std::string insert1 = admin.insert(&Admin::id, &Admin::pkg, &Admin::uid, &Admin::key);
        std::string insert2 = admin.insert(&Admin::id, &Admin::pkg, &Admin::key);
 
-       TEST_EXPECT(true, insert1 == "INSERT INTO admin (id, pkg, uid, key) VALUES (?, ?, ?, ?)");
-       TEST_EXPECT(true, insert2 == "INSERT INTO admin (id, pkg, key) VALUES (?, ?, ?)");
+       TEST_EXPECT(insert1, "INSERT INTO admin (id, pkg, uid, key) VALUES (?, ?, ?, ?)");
+       TEST_EXPECT(insert2, "INSERT INTO admin (id, pkg, key) VALUES (?, ?, ?)");
 }
 
 TESTCASE(TYPE_SAFE)
@@ -161,11 +161,11 @@ TESTCASE(MULTI_SELECT)
                                                                                 &ManagedPolicy::id, &ManagedPolicy::value)
                                                                 .where(expr(&Admin::uid) > 0 && expr(&ManagedPolicy::id) == 3);
 
-       TEST_EXPECT(true, multiSelect1 == "SELECT admin.uid, admin.key, managed_policy.id, "
-                                                                         "managed_policy.value FROM admin, managed_policy");
-       TEST_EXPECT(true, multiSelect2 == "SELECT admin.uid, admin.key, managed_policy.id, "
-                                                                         "managed_policy.value FROM admin, managed_policy "
-                                                                         "WHERE admin.uid > ? AND managed_policy.id = ?");
+       TEST_EXPECT(multiSelect1, "SELECT admin.uid, admin.key, managed_policy.id, "
+                                                         "managed_policy.value FROM admin, managed_policy");
+       TEST_EXPECT(multiSelect2, "SELECT admin.uid, admin.key, managed_policy.id, "
+                                                         "managed_policy.value FROM admin, managed_policy "
+                                                         "WHERE admin.uid > ? AND managed_policy.id = ?");
 }
 
 TESTCASE(JOIN)
@@ -181,13 +181,13 @@ TESTCASE(JOIN)
                                                  .on(expr(&ManagedPolicy::aid) == expr(&Admin::id))
                                                  .where(expr(&ManagedPolicy::pid) == 99);
 
-       TEST_EXPECT(true, join1 == "SELECT admin.uid, admin.key FROM admin "
-                                                          "LEFT OUTER JOIN policy_definition");
-       TEST_EXPECT(true, join2 == "SELECT admin.uid, admin.key FROM admin "
-                                                          "CROSS JOIN managed_policy");
-       TEST_EXPECT(true, join3 == "SELECT managed_policy.value FROM managed_policy "
-                                                          "INNER JOIN policy_definition "
-                                                          "ON managed_policy.pid = policy_definition.id "
-                                                          "INNER JOIN admin ON managed_policy.aid = admin.id "
-                                                          "WHERE managed_policy.pid = ?");
+       TEST_EXPECT(join1, "SELECT admin.uid, admin.key FROM admin "
+                                          "LEFT OUTER JOIN policy_definition");
+       TEST_EXPECT(join2, "SELECT admin.uid, admin.key FROM admin "
+                                          "CROSS JOIN managed_policy");
+       TEST_EXPECT(join3, "SELECT managed_policy.value FROM managed_policy "
+                                          "INNER JOIN policy_definition "
+                                          "ON managed_policy.pid = policy_definition.id "
+                                          "INNER JOIN admin ON managed_policy.aid = admin.id "
+                                          "WHERE managed_policy.pid = ?");
 }