Implemented support for testpaths.
authorTim Janik <timj@src.gnome.org>
Tue, 20 Nov 2007 15:00:29 +0000 (15:00 +0000)
committerTim Janik <timj@src.gnome.org>
Tue, 20 Nov 2007 15:00:29 +0000 (15:00 +0000)
* gtestframework.c: implemented g_test_add_vtable() and g_test_add_func().

* tests/testing.c: use g_test_add() and g_test_add_func() to majorly simplify main().

svn path=/trunk/; revision=5883

glib/gtestframework.c
glib/tests/testing.c

index 86a7347..96b23df 100644 (file)
@@ -322,6 +322,56 @@ g_test_create_case (const char     *test_name,
   return tc;
 }
 
+void
+g_test_add_vtable (const char     *testpath,
+                   gsize           data_size,
+                   void          (*data_setup)    (void),
+                   void          (*fixture_test_func) (void),
+                   void          (*data_teardown) (void))
+{
+  gchar **segments;
+  guint ui;
+  GTestSuite *suite;
+
+  g_return_if_fail (testpath != NULL);
+  g_return_if_fail (testpath[0] == '/');
+  g_return_if_fail (fixture_test_func != NULL);
+
+  suite = g_test_get_root();
+  segments = g_strsplit (testpath, "/", -1);
+  for (ui = 0; segments[ui] != NULL; ui++)
+    {
+      const char *seg = segments[ui];
+      gboolean islast = segments[ui + 1] == NULL;
+      if (islast && !seg[0])
+        g_error ("invalid test case path: %s", testpath);
+      else if (!seg[0])
+        continue;       // initial or duplicate slash
+      else if (!islast)
+        {
+          GTestSuite *csuite = g_test_create_suite (seg);
+          g_test_suite_add_suite (suite, csuite);
+          suite = csuite;
+        }
+      else /* islast */
+        {
+          GTestCase *tc = g_test_create_case (seg, data_size, data_setup, fixture_test_func, data_teardown);
+          g_test_suite_add (suite, tc);
+        }
+    }
+  g_strfreev (segments);
+}
+
+void
+g_test_add_func (const char     *testpath,
+                 void          (*test_func) (void))
+{
+  g_return_if_fail (testpath != NULL);
+  g_return_if_fail (testpath[0] == '/');
+  g_return_if_fail (test_func != NULL);
+  g_test_add_vtable (testpath, 0, NULL, test_func, NULL);
+}
+
 GTestSuite*
 g_test_create_suite (const char *suite_name)
 {
index 17f4644..a3e6a1f 100644 (file)
@@ -152,35 +152,15 @@ int
 main (int   argc,
       char *argv[])
 {
-  GTestCase *tc;
   g_test_init (&argc, &argv, NULL);
-  GTestSuite *rootsuite = g_test_create_suite ("top");
-  GTestSuite *miscsuite = g_test_create_suite ("misc");
-  g_test_suite_add_suite (rootsuite, miscsuite);
-  GTestSuite *forksuite = g_test_create_suite ("fork");
-  g_test_suite_add_suite (rootsuite, forksuite);
-  GTestSuite *randsuite = g_test_create_suite ("rand");
-  g_test_suite_add_suite (rootsuite, randsuite);
 
-  tc = g_test_create_case ("fail assertion", 0, NULL, test_fork_fail, NULL);
-  g_test_suite_add (forksuite, tc);
-  tc = g_test_create_case ("patterns", 0, NULL, test_fork_patterns, NULL);
-  g_test_suite_add (forksuite, tc);
-  tc = g_test_create_case ("timeout", 0, NULL, test_fork_timeout, NULL);
-  g_test_suite_add (forksuite, tc);
+  g_test_add_func ("/random-generator/rand-1", test_rand1);
+  g_test_add_func ("/random-generator/rand-2", test_rand2);
+  g_test_add_func ("/misc/assertions", test_assertions);
+  g_test_add ("/misc/primetoul", Fixturetest, fixturetest_setup, fixturetest_test, fixturetest_teardown);
+  g_test_add_func ("/forking/fail assertion", test_fork_fail);
+  g_test_add_func ("/forking/patterns", test_fork_patterns);
+  g_test_add_func ("/forking/timeout", test_fork_timeout);
 
-  tc = g_test_create_case ("rand-1", 0, NULL, test_rand1, NULL);
-  g_test_suite_add (randsuite, tc);
-  tc = g_test_create_case ("rand-2", 0, NULL, test_rand2, NULL);
-  g_test_suite_add (randsuite, tc);
-
-  tc = g_test_create_case ("assertions", 0, NULL, test_assertions, NULL);
-  g_test_suite_add (miscsuite, tc);
-  tc = g_test_create_case ("primetoul", sizeof (Fixturetest),
-                           (void(*)(void)) fixturetest_setup,
-                           (void(*)(void)) fixturetest_test,
-                           (void(*)(void)) fixturetest_teardown);
-  g_test_suite_add (miscsuite, tc);
-
-  return g_test_run_suite (rootsuite);
+  return g_test_run();
 }