]> git.tdb.fi Git - libs/test.git/blobdiff - source/test.cpp
Support passing a parameter to a test function
[libs/test.git] / source / test.cpp
index 910853f28da5dcf6da2e42a3ebde74b806bce513..b4693b294ea57cfaa54194ebf33e79fd0335813a 100644 (file)
@@ -70,6 +70,7 @@ void Test::run(bool verbose)
        {
                detail_info = string();
                detail_debug = string();
+               fail_reason = string();
                passed = false;
                start_test((*i)->get_description());
                const ExceptionCheck *exc_check = (*i)->get_exception_check();
@@ -87,14 +88,26 @@ void Test::run(bool verbose)
                }
                catch(const exception &e)
                {
-                       if(exc_check && exc_check->check(e))
+                       if(exc_check)
                        {
-                               pass_test();
-                               debug(Debug::demangle(typeid(e).name()));
-                               debug(e.what());
+                               if(exc_check->check(e))
+                               {
+                                       pass_test();
+                                       debug(Debug::demangle(typeid(e).name()));
+                                       debug(e.what());
+                               }
+                               else
+                               {
+                                       fail_test("Exception of incorrect type thrown");
+                                       debug(format("%s (expected %s)", Debug::demangle(typeid(e).name()), Debug::demangle(exc_check->get_type_info().name())));
+                                       debug(e.what());
+                               }
                        }
                        else
+                       {
+                               debug(Debug::demangle(typeid(e).name()));
                                fail_test(e.what());
+                       }
                }
                catch(...)
                {
@@ -103,6 +116,13 @@ void Test::run(bool verbose)
 
                if(verbose)
                        detail_info += detail_debug;
+               if(!passed)
+               {
+                       if(fail_reason.empty())
+                               detail_info += "Failed without reason";
+                       else
+                               detail_info += fail_reason;
+               }
                if(!detail_info.empty())
                {
                        vector<string> lines = split(detail_info, '\n');
@@ -132,7 +152,7 @@ void Test::pass_test()
 void Test::fail_test(const string &why)
 {
        IO::print("\033[31mfailed\033[0m\n");
-       IO::print("    %s\n", why);
+       fail_reason = why;
 }
 
 void Test::expect(bool cond, const string &expr)