]> granicus.if.org Git - check/commitdiff
New version of receive_test_result passes unit tests
authoramalec <amalec@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Fri, 19 Oct 2001 23:27:33 +0000 (23:27 +0000)
committeramalec <amalec@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Fri, 19 Oct 2001 23:27:33 +0000 (23:27 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@104 64e312b2-a51f-0410-8e61-82d0ca0eb02a

check/src/check_msg.c
check/src/check_msg.h
check/src/check_pack.c
check/tests/check_check_msg.c
check/tests/check_check_pack.c

index d90c6d95d61996c7bbe0e03d72a9378ee1463564..104c1a2570f5c5131867868ee36203f5c39db18c 100644 (file)
@@ -51,6 +51,9 @@ static int get_setup_key (void);
 static void setup_pipe (Pipe *p);
 static void setup_messaging_with_key (int key);
 static void teardown_messaging_with_key (int key);
+static TestResult *construct_test_result (RcvMsg *rmsg, int waserror);
+static void tr_set_loc_by_ctx (TestResult *tr, enum ck_result_ctx ctx,
+                              RcvMsg *rmsg);
 
 void send_failure_info (int key, char *msg)
 {
@@ -105,6 +108,64 @@ TestResult *receive_test_result (int key)
   return tr;
 }
 
+TestResult *new_receive_test_result (int key, int waserror)
+{
+  Pipe *p;
+  RcvMsg *rmsg;
+
+  p = get_pipe_by_key(key);
+  if (p == NULL)
+    eprintf("Couldn't find pipe with key %d",__FILE__, __LINE__, key);
+  close(p->sendfd);
+  rmsg = new_punpack(p->recvfd);
+  close(p->recvfd);
+  setup_pipe(p);
+  return construct_test_result (rmsg, waserror);
+}
+
+static void tr_set_loc_by_ctx (TestResult *tr, enum ck_result_ctx ctx,
+                              RcvMsg *rmsg)
+{
+  if (ctx == CK_CTX_TEST) {
+    tr->file = rmsg->test_file;
+    tr->line = rmsg->test_line;
+  } else {
+    tr->file = rmsg->fixture_file;
+    tr->line = rmsg->fixture_line;
+  }
+}
+
+static TestResult *construct_test_result (RcvMsg *rmsg, int waserror)
+{
+  TestResult *tr;
+
+  if (rmsg == NULL)
+    return NULL;
+
+  tr = emalloc (sizeof(TestResult));
+  /*
+    a message with an error message (non null) is assigned to the lastctx
+    if waserror, then assign to the lastctx
+    otherwise assign to the lastctx if it is setup, and to test otherwise
+  */
+  if (rmsg->msg != NULL || waserror) {
+    tr->ctx = rmsg->lastctx;
+    tr->msg = rmsg->msg;
+    tr_set_loc_by_ctx(tr, rmsg->lastctx, rmsg);
+  } else if (rmsg->lastctx == CK_CTX_SETUP) {
+    tr->ctx = CK_CTX_SETUP;
+    tr->msg = NULL;
+    tr_set_loc_by_ctx(tr, CK_CTX_SETUP, rmsg);  
+  } else {
+    tr->ctx = CK_CTX_TEST;
+    tr->msg = NULL;
+    tr_set_loc_by_ctx(tr, CK_CTX_TEST, rmsg);
+  }
+
+  return tr;  
+  
+}
+
 void setup_messaging(void)
 {
   setup_messaging_with_key(get_recv_key());
index 2d6535c18c91ed83dbe98d309f0e0143ea5109ee..a37b235427f8129978259b1961f279a80865073d 100644 (file)
@@ -27,6 +27,7 @@ void send_loc_info (int key, char *file, int line);
 void send_ctx_info (int key,enum ck_result_ctx ctx);
 
 TestResult *receive_test_result (int key);
+TestResult *new_receive_test_result (int key, int waserror);
 
 void setup_messaging(void);
 int get_send_key(void);
index 51764f550ab19a4a1907f67098d9b8e33d9cba80..78a16ce567a43ebf023d225f24e6bc9c9c01aaae 100644 (file)
@@ -367,6 +367,7 @@ static RcvMsg *rcvmsg_create(void)
 
   rmsg = emalloc (sizeof (RcvMsg));
   rmsg->lastctx = -1;
+  rmsg->msg = NULL;
   reset_rcv_test(rmsg);
   reset_rcv_fixture(rmsg);
   return rmsg;
index c8c918497230460886407b5dfd8c4de914867aee..a483d083e6d58b49185960d254b5d88d66964fa1 100644 (file)
@@ -13,23 +13,86 @@ START_TEST(test_send)
   send_ctx_info(get_test_key(),CK_CTX_SETUP);
   send_loc_info(get_test_key(),"abc123.c", 10);
   send_ctx_info(get_test_key(),CK_CTX_TEST);
-  send_loc_info(get_test_key(),"abc123.c", 22);
-  send_loc_info(get_test_key(),"abc123.c", 25);
+  send_loc_info(get_test_key(),"abc124.c", 22);
+  send_loc_info(get_test_key(),"abc125.c", 25);
   send_failure_info(get_test_key(),"Oops");
-  tr = receive_test_result(get_test_key());
+  tr = new_receive_test_result(get_test_key(), 0);
   teardown_test_messaging();
 
+  fail_unless (tr != NULL,
+              "No test result received");
   fail_unless (tr_ctx(tr) == CK_CTX_TEST,
               "Bad CTX received");
   fail_unless (strcmp(tr_msg(tr), "Oops") == 0,
               "Bad failure msg received");
-  fail_unless (strcmp(tr_lfile(tr), "abc123.c") == 0,
+  fail_unless (strcmp(tr_lfile(tr), "abc125.c") == 0,
               "Bad loc file received");
   fail_unless (tr_lno(tr) == 25,
               "Bad loc line received");
+  if (tr != NULL)
+    free(tr);
 }
 END_TEST
 
+START_TEST(test_send_with_passing_teardown)
+{
+  TestResult *tr;
+  setup_test_messaging();
+  send_ctx_info(get_test_key(),CK_CTX_SETUP);
+  send_loc_info(get_test_key(),"abc123.c", 10);
+  send_ctx_info(get_test_key(),CK_CTX_TEST);
+  send_loc_info(get_test_key(),"abc124.c", 22);
+  send_loc_info(get_test_key(),"abc125.c", 25);
+  send_ctx_info(get_test_key(),CK_CTX_TEARDOWN);
+  send_loc_info(get_test_key(),"abc126.c", 54);
+  tr = new_receive_test_result(get_test_key(), 0);
+  teardown_test_messaging();
+
+  fail_unless (tr != NULL,
+              "No test result received");
+  fail_unless (tr_ctx(tr) == CK_CTX_TEST,
+              "Bad CTX received");
+  fail_unless (tr_msg(tr) == NULL,
+              "Bad failure msg received");
+  fail_unless (strcmp(tr_lfile(tr), "abc125.c") == 0,
+              "Bad loc file received");
+  fail_unless (tr_lno(tr) == 25,
+              "Bad loc line received");
+  if (tr != NULL)
+    free(tr);
+}
+END_TEST
+
+START_TEST(test_send_with_error_teardown)
+{
+  TestResult *tr;
+  setup_test_messaging();
+  send_ctx_info(get_test_key(),CK_CTX_SETUP);
+  send_loc_info(get_test_key(),"abc123.c", 10);
+  send_ctx_info(get_test_key(),CK_CTX_TEST);
+  send_loc_info(get_test_key(),"abc124.c", 22);
+  send_loc_info(get_test_key(),"abc125.c", 25);
+  send_ctx_info(get_test_key(),CK_CTX_TEARDOWN);
+  send_loc_info(get_test_key(),"abc126.c", 54);
+  tr = new_receive_test_result(get_test_key(), 1);
+  teardown_test_messaging();
+
+  fail_unless (tr != NULL,
+              "No test result received");
+  fail_unless (tr_ctx(tr) == CK_CTX_TEARDOWN,
+              "Bad CTX received");
+  fail_unless (tr_msg(tr) == NULL,
+              "Bad failure msg received");
+  fail_unless (strcmp(tr_lfile(tr), "abc126.c") == 0,
+              "Bad loc file received");
+  fail_unless (tr_lno(tr) == 54,
+              "Bad loc line received");
+  if (tr != NULL)
+    free(tr);
+}
+END_TEST
+
+
 Suite *make_msg_suite (void)
 {
   Suite *s;
@@ -37,6 +100,8 @@ Suite *make_msg_suite (void)
   s = suite_create("Msg");
   tc = tcase_create("Core Tests");
   tcase_add_test(tc, test_send);
+  tcase_add_test(tc, test_send_with_passing_teardown);
+  tcase_add_test(tc, test_send_with_error_teardown);
   suite_add_tcase(s, tc);
   return s;
 }
index 3a806be8621d26da4dfac9a6de22c2910ae0fd58..8994e8f75e8cb10366de1a714af61fb26467d727 100644 (file)
@@ -309,6 +309,29 @@ START_TEST(test_ppack_multictx)
 }
 END_TEST
 
+START_TEST(test_ppack_nofail)
+{
+  int filedes[2];
+  CtxMsg cmsg;
+  LocMsg lmsg;
+  RcvMsg *rmsg;
+
+  lmsg.file = "abc123.c";
+  lmsg.line = 10;
+  cmsg.ctx = CK_CTX_SETUP;
+  pipe(filedes);
+  ppack(filedes[1],CK_MSG_CTX, &cmsg);
+  ppack(filedes[1],CK_MSG_LOC, &lmsg);
+  close(filedes[1]);
+  rmsg = new_punpack(filedes[0]);
+
+  fail_unless (rmsg->msg == NULL,
+              "Failure result should be NULL with no failure message");
+  if (rmsg != NULL)
+    free(rmsg);
+}
+END_TEST
+
 Suite *make_pack_suite(void)
 {
 
@@ -329,6 +352,7 @@ Suite *make_pack_suite(void)
   tcase_add_test(tc_core, test_ppack_noctx);
   tcase_add_test(tc_core, test_ppack_onlyctx);
   tcase_add_test(tc_core, test_ppack_multictx);
+  tcase_add_test(tc_core, test_ppack_nofail);
   suite_add_tcase(s, tc_limit);
   tcase_add_test(tc_limit, test_pack_ctx_limit);
   tcase_add_test(tc_limit, test_pack_fail_limit);