]> granicus.if.org Git - check/commitdiff
Added tests for several setup and teardown functions.
authorhugo303 <hugo303@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Mon, 31 Oct 2005 12:29:12 +0000 (12:29 +0000)
committerhugo303 <hugo303@64e312b2-a51f-0410-8e61-82d0ca0eb02a>
Mon, 31 Oct 2005 12:29:12 +0000 (12:29 +0000)
git-svn-id: svn+ssh://svn.code.sf.net/p/check/code/trunk@256 64e312b2-a51f-0410-8e61-82d0ca0eb02a

check/tests/check_check_fixture.c

index 66d66cb8f01d5f074d3dddbdf93b1316d4a016b1..fb6c9e8bda8f26a384c692cff5c537480d767d26 100644 (file)
@@ -14,7 +14,6 @@ static void fixture_sub_setup (void)
   fail("Test failure in fixture");
 }
 
-
 static SRunner *fixture_sr;
 
 void setup_fixture (void)
@@ -23,7 +22,7 @@ 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);
@@ -54,6 +53,7 @@ START_TEST(test_print_counts)
 
   fail_unless(strcmp(srstat, exp) == 0,
              "SRunner stat string incorrect with setup failure");
+  free(srstat);
 }
 END_TEST
 
@@ -61,10 +61,11 @@ START_TEST(test_setup_failure_msg)
 {
   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),
@@ -72,30 +73,30 @@ START_TEST(test_setup_failure_msg)
     
     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
 
@@ -106,7 +107,7 @@ START_TEST(test_ch_setup)
   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);
@@ -117,14 +118,13 @@ START_TEST(test_ch_setup)
   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)
@@ -165,7 +165,7 @@ START_TEST(test_ch_setup_fail)
   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);
@@ -185,9 +185,9 @@ START_TEST(test_ch_setup_fail)
 
 
   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);
@@ -203,8 +203,8 @@ START_TEST(test_ch_setup_fail_nofork)
   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);
@@ -225,8 +225,8 @@ START_TEST(test_ch_setup_fail_nofork_2)
   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);
@@ -248,16 +248,20 @@ START_TEST(test_ch_setup_pass_nofork)
   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");
@@ -274,8 +278,8 @@ START_TEST(test_ch_setup_sig)
   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);
@@ -297,7 +301,7 @@ START_TEST(test_ch_setup_sig)
   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),
@@ -308,6 +312,47 @@ START_TEST(test_ch_setup_sig)
 }
 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;
@@ -317,7 +362,7 @@ START_TEST(test_ch_teardown_fail)
   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);
@@ -339,7 +384,7 @@ START_TEST(test_ch_teardown_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);
@@ -359,7 +404,7 @@ START_TEST(test_ch_teardown_sig)
   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);
@@ -381,7 +426,7 @@ START_TEST(test_ch_teardown_sig)
   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),
@@ -393,6 +438,65 @@ START_TEST(test_ch_teardown_sig)
 }
 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)
 {
 
@@ -412,7 +516,9 @@ 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;
 }