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 *);
}
+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)
{
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;
+}
START_TEST(test_ch_teardown_fail)
{
+ /*
TCase *tc;
Suite *s;
SRunner *sr;
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,
CtxMsg cmsg;
LocMsg lmsg;
FailMsg fmsg;
- TestResult *tr;
+ RcvMsg *rmsg;
cmsg.ctx = CK_CTX_TEST;
lmsg.file = "abc123.c";
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
int filedes[2];
LocMsg lmsg;
FailMsg fmsg;
- TestResult *tr;
+ RcvMsg *rmsg;
lmsg.file = "abc123.c";
lmsg.line = 10;
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
{
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
int filedes[2];
CtxMsg cmsg;
LocMsg lmsg;
- TestResult *tr;
+ RcvMsg *rmsg;
cmsg.ctx = CK_CTX_SETUP;
lmsg.line = 5;
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