]> granicus.if.org Git - check/commitdiff
Changed punpack to return test and fixture locs to preserve test information when...
authoramalec <amalec@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Fri, 19 Oct 2001 18:44:39 +0000 (18:44 +0000)
committeramalec <amalec@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Fri, 19 Oct 2001 18:44:39 +0000 (18:44 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@103 64e312b2-a51f-0410-8e61-82d0ca0eb02a

check/src/check_pack.c
check/src/check_pack.h
check/tests/check_check_fixture.c
check/tests/check_check_pack.c

index 4d15fd3731979c88a700a3dfe7af3c328e801165..51764f550ab19a4a1907f67098d9b8e33d9cba80 100644 (file)
@@ -47,6 +47,9 @@ static void pack_type (char **buf, enum ck_msg_type type);
 
 static int read_buf (int fdes, char **buf);
 static int get_result (char *buf, TestResult *tr);
+static void rcvmsg_update_ctx(RcvMsg *rmsg, enum ck_result_ctx ctx);
+static void rcvmsg_update_loc(RcvMsg *rmsg, char *file, int line);
+static RcvMsg *rcvmsg_create(void);
 
 typedef void (*pfun) (char **, void *);
 
@@ -291,6 +294,34 @@ static int get_result (char *buf, TestResult *tr)
   
 }
 
+static int new_get_result (char *buf, RcvMsg *rmsg)
+{
+  enum ck_msg_type type;
+  void *data;
+  int n;
+
+  data = emalloc(CK_MAXMSGBUF);
+  
+  n = upack(buf,data,&type);
+  
+  if (type == CK_MSG_CTX) {
+    CtxMsg *cmsg = data;
+    rcvmsg_update_ctx(rmsg, cmsg->ctx);
+  } else if (type == CK_MSG_LOC) {
+    LocMsg *lmsg = data;
+    rcvmsg_update_loc(rmsg, lmsg->file, lmsg->line);
+  } else if (type == CK_MSG_FAIL) {      
+    FailMsg *fmsg = data;
+    rmsg->msg = emalloc (strlen(fmsg->msg) + 1);
+    strcpy(rmsg->msg, fmsg->msg);
+  } else
+    check_type(type, __FILE__, __LINE__);
+
+  free(data);
+  return n;
+  
+}
+
 
 TestResult *punpack(int fdes)
 {
@@ -318,3 +349,74 @@ TestResult *punpack(int fdes)
   return tr;
 }
 
+static void reset_rcv_test (RcvMsg *rmsg)
+{
+  rmsg->test_line = -1;
+  rmsg->test_file = NULL;
+}
+
+static void reset_rcv_fixture (RcvMsg *rmsg)
+{
+  rmsg->fixture_line = -1;
+  rmsg->fixture_file = NULL;
+}
+
+static RcvMsg *rcvmsg_create(void)
+{
+  RcvMsg *rmsg;
+
+  rmsg = emalloc (sizeof (RcvMsg));
+  rmsg->lastctx = -1;
+  reset_rcv_test(rmsg);
+  reset_rcv_fixture(rmsg);
+  return rmsg;
+}
+
+static void rcvmsg_update_ctx(RcvMsg *rmsg, enum ck_result_ctx ctx)
+{
+  if (rmsg->lastctx != -1)
+    reset_rcv_fixture(rmsg);
+
+  rmsg->lastctx = ctx;
+}
+
+static void rcvmsg_update_loc (RcvMsg *rmsg, char *file, int line)
+{
+  int flen = strlen(file);
+  
+  if (rmsg->lastctx == CK_CTX_TEST) {
+    rmsg->test_line = line;
+    rmsg->test_file = emalloc(flen + 1);
+    strcpy(rmsg->test_file, file);
+  } else {
+    rmsg->fixture_line = line;
+    rmsg->fixture_file = emalloc(flen + 1);
+    strcpy(rmsg->fixture_file, file);
+  }
+}
+  
+RcvMsg *new_punpack(int fdes)
+{
+  int nread, n;
+  char *buf;
+  char *obuf;
+  RcvMsg *rmsg;
+
+  nread = read_buf (fdes, &buf);
+  obuf = buf;
+  rmsg = rcvmsg_create();
+  
+  while (nread > 0) {
+    n = new_get_result(buf, rmsg);
+    nread -= n;
+    buf += n;
+  }
+
+  free(obuf);
+  if (rmsg->lastctx == -1) {
+    free (rmsg);
+    rmsg = NULL;
+  }
+
+  return rmsg;
+}
index 6f0079386174578a7833a0d654121868290b609d..5460795ca3a7e1eb0b3e4643bce120b3ec7b5bb3 100644 (file)
@@ -44,12 +44,23 @@ typedef struct FailMsg
   char *msg;
 } FailMsg;
 
+typedef struct RcvMsg
+{
+  enum ck_result_ctx lastctx;
+  char *fixture_file;
+  int fixture_line;
+  char *test_file;
+  int test_line;
+  char *msg;
+} RcvMsg;
+
   
 int pack (enum ck_msg_type type, char *buf, void *data);
 int upack (char *buf, void *data, enum ck_msg_type *type);
 
 void ppack (int fdes, enum ck_msg_type type, void *data);
 TestResult *punpack(int fdes);
+RcvMsg *new_punpack(int fdes);
 
 
 #endif /*CHECK_PACK_H */
index ee30baca61a535dd2ddcac9968b89f15081ee480..8299576c92502371f04c37da2e47491b4e7349e0 100644 (file)
@@ -195,6 +195,7 @@ END_TEST
 
 START_TEST(test_ch_teardown_fail)
 {
+  /*
   TCase *tc;
   Suite *s;
   SRunner *sr;
@@ -210,11 +211,11 @@ START_TEST(test_ch_teardown_fail)
   srunner_run_all(sr,CRSILENT);
 
   fail_unless (srunner_ntests_failed(sr) == 1,
-              "Failure counts not correct for checked setup failure");
+              "Failure counts not correct for checked teardown failure");
   fail_unless (srunner_ntests_run(sr) == 0,
-              "Test run counts not correct for checked setup failure");
+              "Test run counts not correct for checked teardown failure");
 
-  /*  strstat= sr_stat_str(sr);
+  strstat= sr_stat_str(sr);
 
   fail_unless(strcmp(strstat,
                     "0%: Checks: 0, Failures: 1, Errors: 0") == 0,
index 4bde90000f32f0c68957daa1883a0fad1917049e..3a806be8621d26da4dfac9a6de22c2910ae0fd58 100644 (file)
@@ -198,7 +198,7 @@ START_TEST(test_ppack)
   CtxMsg cmsg;
   LocMsg lmsg;
   FailMsg fmsg;
-  TestResult *tr;
+  RcvMsg *rmsg;
 
   cmsg.ctx = CK_CTX_TEST;
   lmsg.file = "abc123.c";
@@ -209,18 +209,24 @@ START_TEST(test_ppack)
   ppack(filedes[1],CK_MSG_LOC, &lmsg);
   ppack(filedes[1],CK_MSG_FAIL, &fmsg);
   close(filedes[1]);
-  tr = punpack(filedes[0]);
-
-  fail_unless (tr_ctx(tr) == CK_CTX_TEST,
-              "Bad rtype from ppunpack");
-  fail_unless (tr_lno(tr) == 10,
-              "Bad loc line number from ppunpack");
-  fail_unless (strcmp(tr_lfile(tr), "abc123.c") == 0,
-              "Bad loc filename from ppunpack");
-  fail_unless (strcmp(tr_msg(tr), "oops") == 0,
-              "Bad msg from ppunpack");
-
-  free(tr);
+  rmsg = new_punpack(filedes[0]);
+
+  fail_unless (rmsg != NULL,
+              "Return value from ppack should always be malloc'ed");
+  fail_unless (rmsg->lastctx == CK_CTX_TEST,
+              "CTX not set correctly in ppack");
+  fail_unless (rmsg->fixture_line == -1,
+              "Default fixture loc not correct");
+  fail_unless (rmsg->fixture_file == NULL,
+              "Default fixture loc not correct");
+  fail_unless (rmsg->test_line == 10,
+              "Test line not received correctly");
+  fail_unless (strcmp(rmsg->test_file,"abc123.c") == 0,
+              "Test file not received correctly");
+  fail_unless (strcmp(rmsg->msg, "oops") == 0,
+              "Failure message not received correctly");
+  
+  free(rmsg);
 }
 END_TEST
 
@@ -229,7 +235,7 @@ START_TEST(test_ppack_noctx)
   int filedes[2];
   LocMsg lmsg;
   FailMsg fmsg;
-  TestResult *tr;
+  RcvMsg *rmsg;
 
   lmsg.file = "abc123.c";
   lmsg.line = 10;
@@ -238,13 +244,13 @@ START_TEST(test_ppack_noctx)
   ppack(filedes[1],CK_MSG_LOC, &lmsg);
   ppack(filedes[1],CK_MSG_FAIL, &fmsg);
   close(filedes[1]);
-  tr = punpack(filedes[0]);
+  rmsg = new_punpack(filedes[0]);
 
-  fail_unless (tr == NULL,
+  fail_unless (rmsg == NULL,
               "Result should be NULL with no CTX");
 
-  if (tr != NULL)
-    free(tr);
+  if (rmsg != NULL)
+    free(rmsg);
 }
 END_TEST
 
@@ -252,21 +258,23 @@ START_TEST(test_ppack_onlyctx)
 {
   int filedes[2];
   CtxMsg cmsg;
-  TestResult *tr;
+  RcvMsg *rmsg;
 
   cmsg.ctx = CK_CTX_SETUP;
   pipe(filedes);
   ppack(filedes[1],CK_MSG_CTX, &cmsg);
   close(filedes[1]);
-  tr = punpack(filedes[0]);
+  rmsg = new_punpack(filedes[0]);
 
-  fail_unless (tr_msg(tr) == NULL,
+  fail_unless (rmsg->msg == NULL,
               "Result message should be NULL with only CTX");
-  fail_unless (tr_lno(tr) == -1,
+  fail_unless (rmsg->fixture_line == -1,
+              "Result loc line should be -1 with only CTX");
+  fail_unless (rmsg->test_line == -1,
               "Result loc line should be -1 with only CTX");
 
-  if (tr != NULL)
-    free(tr);
+  if (rmsg != NULL)
+    free(rmsg);
 }
 END_TEST
 
@@ -275,7 +283,7 @@ START_TEST(test_ppack_multictx)
   int filedes[2];
   CtxMsg cmsg;
   LocMsg lmsg;
-  TestResult *tr;
+  RcvMsg *rmsg;
 
   cmsg.ctx = CK_CTX_SETUP;
   lmsg.line = 5;
@@ -285,14 +293,19 @@ START_TEST(test_ppack_multictx)
   ppack(filedes[1],CK_MSG_LOC, &lmsg);
   cmsg.ctx = CK_CTX_TEST;
   ppack(filedes[1],CK_MSG_CTX, &cmsg);
+  ppack(filedes[1],CK_MSG_LOC, &lmsg);
+  cmsg.ctx = CK_CTX_TEARDOWN;
+  ppack(filedes[1],CK_MSG_CTX, &cmsg);
   close(filedes[1]);
-  tr = punpack(filedes[0]);
+  rmsg = new_punpack(filedes[0]);
 
-  fail_unless (tr_lno(tr) == -1,
-              "Result loc line should be -1 after CTX change");
+  fail_unless (rmsg->test_line == 5,
+              "Test loc not being preserved on CTX change");
 
-  if (tr != NULL)
-    free(tr);
+  fail_unless (rmsg->fixture_line == -1,
+              "Fixture not reset on CTX change");
+  if (rmsg != NULL)
+    free(rmsg);
 }
 END_TEST