fail("Test failure in fixture");
}
-
static SRunner *fixture_sr;
void setup_fixture (void)
Suite *fixture_s;
fixture_s = suite_create("Fix Sub");
- tc = tcase_create("Core");
+ tc = tcase_create("Fix Sub");
tcase_add_unchecked_fixture(tc, fixture_sub_setup, NULL);
suite_add_tcase (fixture_s, tc);
fixture_sr = srunner_create(fixture_s);
fail_unless(strcmp(srstat, exp) == 0,
"SRunner stat string incorrect with setup failure");
+ free(srstat);
}
END_TEST
{
TestResult **tra;
char *trm;
- const char *trmexp = "check_check_fixture.c:14:S:Core:unchecked_setup:0: Test failure in fixture";
+ const char *trmexp = "check_check_fixture.c:14:S:Fix Sub:unchecked_setup:0: Test failure in fixture";
tra = srunner_failures(fixture_sr);
trm = tr_str(tra[0]);
+ free(tra);
if (strstr(trm, trmexp) == 0) {
snprintf(errm, sizeof(errm),
fail (errm);
}
-
+ free(trm);
}
END_TEST
-
-int testval = 1;
+int testval_up;
+int testval_down;
static void sub_ch_setup_norm (void)
{
- testval = 2;
+ testval_up += 2;
}
static void sub_ch_teardown_norm(void)
{
- testval = 10;
+ testval_down += 2;
}
START_TEST(test_sub_ch_setup_norm)
{
- if (testval == 1)
+ if (testval_up == 1)
fail("Setup not run correctly");
- else if (testval > 2)
+ else if (testval_up > 3)
fail("Test side-effects persist across runs");
- testval++;
+ testval_up++;
}
END_TEST
SRunner *sr;
s = suite_create("Fixture Norm Sub");
- tc = tcase_create("Core");
+ tc = tcase_create("Fixture Norm Sub");
sr = srunner_create(s);
suite_add_tcase(s, tc);
tcase_add_test(tc,test_sub_ch_setup_norm);
fail_unless(srunner_ntests_failed(sr) == 0,
"Checked setup not being run correctly");
-
srunner_free(sr);
}
END_TEST
static void setup_sub_fail (void)
{
- fail("Failed setup");
+ fail("Failed setup"); /* check_check_fixture.c:127 */
}
static void teardown_sub_fail (void)
char *trm;
s = suite_create("Setup Fail");
- tc = tcase_create("Core");
+ tc = tcase_create("Setup Fail");
suite_add_tcase(s, tc);
tcase_add_test(tc,test_sub_fail);
tcase_add_checked_fixture(tc,setup_sub_fail, NULL);
trm = tr_str(srunner_failures(sr)[0]);
-
+ /* Search for check_check_fixture.c:127 if this fails. */
if (strstr(trm,
- "check_check_fixture.c:127:S:Core:test_sub_fail:0: Failed setup")
+ "check_check_fixture.c:127:S:Setup Fail:test_sub_fail:0: Failed setup")
== 0) {
snprintf(errm, sizeof(errm),
"Bad failed checked setup tr msg (%s)", trm);
Suite *s;
SRunner *sr;
- s = suite_create("Setup Fail");
- tc = tcase_create("Core");
+ s = suite_create("Setup Fail Nofork");
+ tc = tcase_create("Setup Fail Nofork");
suite_add_tcase(s, tc);
tcase_add_test(tc, test_sub_fail);
tcase_add_checked_fixture(tc, setup_sub_fail, NULL);
Suite *s;
SRunner *sr;
- s = suite_create("Setup Fail");
- tc = tcase_create("Core");
+ s = suite_create("Setup Fail Nofork 2");
+ tc = tcase_create("Setup Fail Nofork 2");
suite_add_tcase(s, tc);
tcase_add_test(tc, test_sub_fail);
tcase_add_checked_fixture(tc, sub_ch_setup_norm, NULL);
Suite *s;
SRunner *sr;
- s = suite_create("Setup Fail");
- tc = tcase_create("Core");
+ s = suite_create("Setup Pass Multiple fixtures");
+ tc = tcase_create("Setup Pass Multiple fixtures");
suite_add_tcase(s, tc);
tcase_add_test(tc, test_sub_pass);
- tcase_add_checked_fixture(tc, sub_ch_setup_norm, NULL);
- tcase_add_checked_fixture(tc, sub_ch_setup_norm, NULL);
- tcase_add_checked_fixture(tc, sub_ch_setup_norm, NULL);
+ tcase_add_checked_fixture(tc, sub_ch_setup_norm, sub_ch_teardown_norm);
+ tcase_add_checked_fixture(tc, sub_ch_setup_norm, sub_ch_teardown_norm);
+ tcase_add_checked_fixture(tc, sub_ch_setup_norm, sub_ch_teardown_norm);
sr = srunner_create(s);
srunner_set_fork_status(sr, CK_NOFORK);
+ testval_up = 1;
+ testval_down = 1;
srunner_run_all(sr, CK_SILENT);
+ fail_unless(testval_up == 7, "Multiple setups failed");
+ fail_unless(testval_down == 7, "Multiple teardowns failed");
fail_unless (srunner_ntests_run(sr) == 1,
"Test run counts not correct for checked setup failure");
char *strstat;
char *trm;
- s = suite_create("Setup Fail");
- tc = tcase_create("Core");
+ s = suite_create("Setup Sig");
+ tc = tcase_create("Setup Sig");
suite_add_tcase(s, tc);
tcase_add_test(tc,test_sub_fail);
tcase_add_checked_fixture(tc,setup_sub_signal, NULL);
trm = tr_str(srunner_failures(sr)[0]);
if (strstr(trm,
- "check_check_fixture.c:137:S:Core:test_sub_fail:0: "
+ "check_check_fixture.c:137:S:Setup Sig:test_sub_fail:0: "
"(after this point) Received signal 8")
== 0) {
snprintf(errm, sizeof(errm),
}
END_TEST
+static void sub_ch_setup_dual_1(void)
+{
+ fail_unless(testval_up == 1, "Wrong start value");
+ testval_up += 2;
+}
+
+static void sub_ch_setup_dual_2(void)
+{
+ fail_unless(testval_up == 3, "First setup failed");
+ testval_up += 3;
+}
+
+START_TEST(test_sub_two_setups)
+{
+ fail_unless(testval_up == 6, "Multiple setups failed");
+}
+END_TEST
+
+START_TEST(test_ch_setup_two_setups_fork)
+{
+ TCase *tc;
+ Suite *s;
+ SRunner *sr;
+
+ s = suite_create("Fixture Two setups");
+ tc = tcase_create("Fixture Two setups");
+ sr = srunner_create(s);
+ suite_add_tcase(s, tc);
+ tcase_add_test(tc,test_sub_two_setups);
+ tcase_add_checked_fixture(tc,sub_ch_setup_dual_1,NULL);
+ tcase_add_checked_fixture(tc,sub_ch_setup_dual_2,NULL);
+ testval_up = 1;
+ srunner_run_all(sr, CK_SILENT);
+
+ fail_unless(srunner_ntests_failed(sr) == 0,
+ "Problem with several setups");
+
+ srunner_free(sr);
+}
+END_TEST
+
START_TEST(test_ch_teardown_fail)
{
TCase *tc;
char *trm;
s = suite_create("Teardown Fail");
- tc = tcase_create("Core");
+ tc = tcase_create("Teardown Fail");
suite_add_tcase(s, tc);
tcase_add_test(tc,test_sub_pass);
tcase_add_checked_fixture(tc,NULL, teardown_sub_fail);
trm = tr_str(srunner_failures(sr)[0]);
if (strstr(trm,
- "check_check_fixture.c:132:S:Core:test_sub_pass:0: Failed teardown")
+ "check_check_fixture.c:132:S:Teardown Fail:test_sub_pass:0: Failed teardown")
== 0) {
snprintf(errm, sizeof(errm),
"Bad failed checked teardown tr msg (%s)", trm);
char *trm;
s = suite_create("Teardown Sig");
- tc = tcase_create("Core");
+ tc = tcase_create("Teardown Sig");
suite_add_tcase(s, tc);
tcase_add_test(tc,test_sub_pass);
tcase_add_checked_fixture(tc,NULL, teardown_sub_signal);
trm = tr_str(srunner_failures(sr)[0]);
if (strstr(trm,
- "check_check_fixture.c:143:S:Core:test_sub_pass:0: "
+ "check_check_fixture.c:143:S:Teardown Sig:test_sub_pass:0: "
"(after this point) Received signal 8")
== 0) {
snprintf(errm, sizeof(errm),
}
END_TEST
+/* Teardowns are run in reverse order */
+static void sub_ch_teardown_dual_1(void)
+{
+ fail_unless(testval_down == 6, "Second teardown failed");
+}
+
+static void sub_ch_teardown_dual_2(void)
+{
+ fail_unless(testval_down == 3, "First teardown failed");
+ testval_down += 3;
+}
+
+START_TEST(test_sub_two_teardowns)
+{
+ testval_down += 2;
+}
+END_TEST
+
+START_TEST(test_ch_teardown_two_teardowns_fork)
+{
+ TCase *tc;
+ Suite *s;
+ SRunner *sr;
+ int nr_of_failures;
+ char errm[1024] = {0};
+
+ s = suite_create("Fixture Two teardowns");
+ tc = tcase_create("Fixture Two teardowns");
+ sr = srunner_create(s);
+ suite_add_tcase(s, tc);
+ tcase_add_test(tc,test_sub_two_teardowns);
+ tcase_add_checked_fixture(tc,NULL,sub_ch_teardown_dual_1);
+ tcase_add_checked_fixture(tc,NULL,sub_ch_teardown_dual_2);
+ testval_down = 1;
+ srunner_run_all(sr, CK_SILENT);
+
+ nr_of_failures = srunner_ntests_failed(sr);
+ if (nr_of_failures > 0) {
+ TestResult **tra = srunner_failures(sr);
+ int i;
+
+ for (i = 0; i < nr_of_failures; i++) {
+ char *trm = tr_str(tra[i]);
+ if (strlen(errm) + strlen(trm) > 1022) {
+ break;
+ }
+ strcat(errm, trm);
+ strcat(errm, "\n");
+ free(trm);
+ }
+ free(tra);
+ }
+ fail_unless(nr_of_failures == 0, "Problem with several teardowns\n %s",
+ errm);
+
+ srunner_free(sr);
+}
+END_TEST
+
Suite *make_fixture_suite (void)
{
tcase_add_test(tc,test_ch_setup_fail_nofork_2);
tcase_add_test(tc,test_ch_setup_pass_nofork);
tcase_add_test(tc,test_ch_setup_sig);
+ tcase_add_test(tc,test_ch_setup_two_setups_fork);
tcase_add_test(tc,test_ch_teardown_fail);
tcase_add_test(tc,test_ch_teardown_sig);
+ tcase_add_test(tc,test_ch_teardown_two_teardowns_fork);
return s;
}