Improve Err test coverage

Project: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/commit/ebf290c7
Tree: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/tree/ebf290c7
Diff: http://git-wip-us.apache.org/repos/asf/lucy-clownfish/diff/ebf290c7

Branch: refs/heads/master
Commit: ebf290c71dc0a3252df4de5fceedec9e683dd7e5
Parents: 201441c
Author: Nick Wellnhofer <[email protected]>
Authored: Wed May 11 13:41:13 2016 +0200
Committer: Nick Wellnhofer <[email protected]>
Committed: Sun May 15 17:57:34 2016 +0200

----------------------------------------------------------------------
 runtime/core/Clownfish/Test/TestErr.c | 111 ++++++++++++++++++++++++++++-
 1 file changed, 110 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucy-clownfish/blob/ebf290c7/runtime/core/Clownfish/Test/TestErr.c
----------------------------------------------------------------------
diff --git a/runtime/core/Clownfish/Test/TestErr.c 
b/runtime/core/Clownfish/Test/TestErr.c
index 0497428..46ecb1e 100644
--- a/runtime/core/Clownfish/Test/TestErr.c
+++ b/runtime/core/Clownfish/Test/TestErr.c
@@ -43,6 +43,110 @@ test_To_String(TestBatchRunner *runner) {
 }
 
 static void
+test_Cat_Mess(TestBatchRunner *runner) {
+    Err *error = Err_new(Str_newf("alpha"));
+    Err_Cat_Mess(error, SSTR_WRAP_C("\nbeta"));
+    String *mess = Err_Get_Mess(error);
+    TEST_TRUE(runner, Str_Equals_Utf8(mess, "alpha\nbeta", 10), "Cat_Mess");
+    DECREF(error);
+}
+
+static void
+test_Add_Frame(TestBatchRunner *runner) {
+    {
+        Err *error = Err_new(Str_newf("alpha"));
+        Err_Add_Frame(error, "source.c", 128, "function");
+        String *mess = Err_Get_Mess(error);
+        const char *expected = "alpha\n\tfunction at source.c line 128\n";
+        TEST_TRUE(runner, Str_Equals_Utf8(mess, expected, strlen(expected)),
+                  "Add_Frame");
+        DECREF(error);
+    }
+
+    {
+        Err *error = Err_new(Str_newf("alpha\n"));
+        Err_Add_Frame(error, "source.c", 128, "function");
+        String *mess = Err_Get_Mess(error);
+        const char *expected = "alpha\n\tfunction at source.c line 128\n";
+        TEST_TRUE(runner, Str_Equals_Utf8(mess, expected, strlen(expected)),
+                  "Add_Frame with trailing newline");
+        DECREF(error);
+    }
+
+    {
+        Err *error = Err_new(Str_newf("alpha"));
+        Err_Add_Frame(error, "source.c", 128, NULL);
+        String *mess = Err_Get_Mess(error);
+        const char *expected = "alpha\n\tat source.c line 128\n";
+        TEST_TRUE(runner, Str_Equals_Utf8(mess, expected, strlen(expected)),
+                  "Add_Frame without func");
+        DECREF(error);
+    }
+}
+
+static void
+S_rethrow(void *context) {
+    Err *error = (Err*)context;
+    Err_rethrow(error, "src.c", 12, "fn");
+}
+
+static void
+test_rethrow(TestBatchRunner *runner) {
+    Err *error = Err_new(Str_newf("error"));
+    Err *rethrown = Err_trap(S_rethrow, error);
+    String *mess = Err_Get_Mess(rethrown);
+    const char *expected = "error\n\tfn at src.c line 12\n";
+    TEST_TRUE(runner, Str_Starts_With_Utf8(mess, expected, strlen(expected)),
+              "rethrow");
+    DECREF(error);
+}
+
+static void
+S_invalid_downcast(void *context) {
+    Obj *obj = (Obj*)context;
+    DOWNCAST(obj, ERR);
+}
+
+static void
+test_downcast(TestBatchRunner *runner) {
+    Obj *obj = (Obj*)Str_newf("gamma");
+
+    TEST_TRUE(runner, DOWNCAST(obj, STRING) != NULL, "downcast");
+
+    TEST_TRUE(runner, DOWNCAST(NULL, STRING) == NULL, "downcast NULL");
+
+    Err *error = Err_trap(S_invalid_downcast, obj);
+    TEST_TRUE(runner, error != NULL, "downcast throws");
+    DECREF(error);
+
+    DECREF(obj);
+}
+
+static void
+S_invalid_certify(void *context) {
+    Obj *obj = (Obj*)context;
+    CERTIFY(obj, ERR);
+}
+
+static void
+test_certify(TestBatchRunner *runner) {
+    Obj *obj = (Obj*)Str_newf("epsilon");
+    Err *error;
+
+    TEST_TRUE(runner, CERTIFY(obj, STRING) != NULL, "certify");
+
+    error = Err_trap(S_invalid_certify, NULL);
+    TEST_TRUE(runner, error != NULL, "certify NULL");
+    DECREF(error);
+
+    error = Err_trap(S_invalid_certify, obj);
+    TEST_TRUE(runner, error != NULL, "certify throws");
+    DECREF(error);
+
+    DECREF(obj);
+}
+
+static void
 S_err_thread(void *arg) {
     TestBatchRunner *runner = (TestBatchRunner*)arg;
 
@@ -76,8 +180,13 @@ test_threads(TestBatchRunner *runner) {
 
 void
 TestErr_Run_IMP(TestErr *self, TestBatchRunner *runner) {
-    TestBatchRunner_Plan(runner, (TestBatch*)self, 4);
+    TestBatchRunner_Plan(runner, (TestBatch*)self, 15);
     test_To_String(runner);
+    test_Cat_Mess(runner);
+    test_Add_Frame(runner);
+    test_rethrow(runner);
+    test_downcast(runner);
+    test_certify(runner);
     test_threads(runner);
 }
 

Reply via email to