[libpeas] Cleanup extension tests



commit 8449235a89c62b402941b1401631b91caf92bb18
Author: Garrett Regier <garrettregier gmail com>
Date:   Fri Dec 9 06:12:04 2011 -0800

    Cleanup extension tests

 tests/libpeas/extension-c.c               |   14 +-
 tests/libpeas/extension-gjs.c             |   12 +-
 tests/libpeas/extension-python.c          |   27 +--
 tests/libpeas/extension-seed.c            |   12 +-
 tests/libpeas/testing/testing-extension.c |  315 ++++++++++++++++-------------
 tests/libpeas/testing/testing-extension.h |   88 +-------
 6 files changed, 204 insertions(+), 264 deletions(-)
---
diff --git a/tests/libpeas/extension-c.c b/tests/libpeas/extension-c.c
index bfe6556..8ea9f9a 100644
--- a/tests/libpeas/extension-c.c
+++ b/tests/libpeas/extension-c.c
@@ -29,15 +29,11 @@
 #include "introspection/introspection-callable.h"
 
 static void
-test_extension_c_instance_refcount (PeasEngine *engine)
+test_extension_c_instance_refcount (PeasEngine     *engine,
+                                    PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
 
-  info = peas_engine_get_plugin_info (engine, "extension-c");
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_CALLABLE,
                                             NULL);
@@ -94,16 +90,16 @@ main (int   argc,
   g_type_init ();
 
   /* Only test the basics */
-  EXTENSION_TESTS_INIT (c);
+  testing_extension_basic ("c");
 
   /* We still need to add the callable tests
    * because of peas_extension_call()
    */
-  EXTENSION_TESTS_CALLABLE (c);
+  testing_extension_callable ("c");
 
   EXTENSION_TEST (c, "instance-refcount", instance_refcount);
   EXTENSION_TEST (c, "plugin-info", plugin_info);
   EXTENSION_TEST (c, "nonexistent", nonexistent);
 
-  return testing_run_tests ();
+  return testing_extension_run_tests ();
 }
diff --git a/tests/libpeas/extension-gjs.c b/tests/libpeas/extension-gjs.c
index 963a7e0..e57764d 100644
--- a/tests/libpeas/extension-gjs.c
+++ b/tests/libpeas/extension-gjs.c
@@ -31,18 +31,14 @@
 #include "introspection/introspection-callable.h"
 
 static void
-test_extension_gjs_plugin_info (PeasEngine *engine)
+test_extension_gjs_plugin_info (PeasEngine     *engine,
+                                PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   PeasExtensionGjs *gexten;
   jsval js_value;
   GValue gvalue = { 0 };
 
-  info = peas_engine_get_plugin_info (engine, "extension-gjs");
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_CALLABLE,
                                             NULL);
@@ -85,10 +81,10 @@ main (int   argc,
 
   g_type_init ();
 
-  EXTENSION_TESTS (gjs);
+  testing_extension_all ("gjs");
 
   EXTENSION_TEST (gjs, "plugin-info", plugin_info);
   EXTENSION_TEST (gjs, "nonexistent", nonexistent);
 
-  return testing_run_tests ();
+  return testing_extension_run_tests ();
 }
diff --git a/tests/libpeas/extension-python.c b/tests/libpeas/extension-python.c
index e40a5cf..0b577ad 100644
--- a/tests/libpeas/extension-python.c
+++ b/tests/libpeas/extension-python.c
@@ -32,16 +32,12 @@
 #include "introspection/introspection-callable.h"
 
 static void
-test_extension_python_instance_refcount (PeasEngine *engine)
+test_extension_python_instance_refcount (PeasEngine     *engine,
+                                         PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   PyObject *instance;
 
-  info = peas_engine_get_plugin_info (engine, "extension-python");
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_CALLABLE,
                                             NULL);
@@ -59,16 +55,13 @@ test_extension_python_instance_refcount (PeasEngine *engine)
 }
 
 static void
-test_extension_python_activatable_subject_refcount (PeasEngine *engine)
+test_extension_python_activatable_subject_refcount (PeasEngine     *engine,
+                                                    PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   GObject *object;
   PyObject *wrapper;
 
-  info = peas_engine_get_plugin_info (engine, "extension-python");
-  g_assert (peas_engine_load_plugin (engine, info));
-
   /* Create the 'object' property value, to be similar to a GtkWindow
    * instance: a sunk GInitiallyUnowned object. */
   object = g_object_new (G_TYPE_INITIALLY_UNOWNED, NULL);
@@ -103,17 +96,13 @@ test_extension_python_activatable_subject_refcount (PeasEngine *engine)
 }
 
 static void
-test_extension_python_plugin_info (PeasEngine *engine)
+test_extension_python_plugin_info (PeasEngine *engine,
+                                   PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   PyObject *instance;
   PyObject *plugin_info;
 
-  info = peas_engine_get_plugin_info (engine, "extension-python");
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_CALLABLE,
                                             NULL);
@@ -147,12 +136,12 @@ main (int   argc,
   g_test_init (&argc, &argv, NULL);
   g_type_init ();
 
-  EXTENSION_TESTS (python);
+  testing_extension_all ("python");
 
   EXTENSION_TEST (python, "instance-refcount", instance_refcount);
   EXTENSION_TEST (python, "activatable-subject-refcount", activatable_subject_refcount);
   EXTENSION_TEST (python, "plugin-info", plugin_info);
   EXTENSION_TEST (python, "nonexistent", nonexistent);
 
-  return testing_run_tests ();
+  return testing_extension_run_tests ();
 }
diff --git a/tests/libpeas/extension-seed.c b/tests/libpeas/extension-seed.c
index cd7923c..ceff7eb 100644
--- a/tests/libpeas/extension-seed.c
+++ b/tests/libpeas/extension-seed.c
@@ -31,18 +31,14 @@
 #include "introspection/introspection-callable.h"
 
 static void
-test_extension_seed_plugin_info (PeasEngine *engine)
+test_extension_seed_plugin_info (PeasEngine *engine,
+                                 PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   PeasExtensionSeed *sexten;
   SeedValue seed_value;
   GValue gvalue = { 0 };
 
-  info = peas_engine_get_plugin_info (engine, "extension-seed");
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_CALLABLE,
                                             NULL);
@@ -85,10 +81,10 @@ main (int   argc,
 
   g_type_init ();
 
-  EXTENSION_TESTS (seed);
+  testing_extension_all ("seed");
 
   EXTENSION_TEST (seed, "plugin-info", plugin_info);
   EXTENSION_TEST (seed, "nonexistent", nonexistent);
 
-  return testing_run_tests ();
+  return testing_extension_run_tests ();
 }
diff --git a/tests/libpeas/testing/testing-extension.c b/tests/libpeas/testing/testing-extension.c
index d2333b5..e14b391 100644
--- a/tests/libpeas/testing/testing-extension.c
+++ b/tests/libpeas/testing/testing-extension.c
@@ -39,78 +39,71 @@
 #include "introspection-properties.h"
 #include "introspection-unimplemented.h"
 
-static gchar *extension_plugin;
+typedef struct _TestFixture TestFixture;
 
-void
-testing_extension_set_plugin_ (const gchar *plugin)
-{
-  extension_plugin = (gchar *) plugin;
-}
+struct _TestFixture {
+  PeasEngine *engine;
+  PeasPluginInfo *info;
+};
 
-void
-testing_extension_test_setup_ (TestingExtensionFixture_ *fixture,
-                               gconstpointer             data)
+#define I_(s) (g_ptr_array_add (interned_strings, (s)), (const gchar *) (s))
+
+static GPtrArray *interned_strings = NULL;
+static const gchar *extension_plugin = NULL;
+
+static void
+test_setup (TestFixture    *fixture,
+            gconstpointer  data)
 {
   fixture->engine = testing_engine_new ();
+  fixture->info = peas_engine_get_plugin_info (fixture->engine,
+                                               extension_plugin);
 }
 
-void
-testing_extension_test_teardown_ (TestingExtensionFixture_ *fixture,
-                                  gconstpointer             data)
+static void
+test_teardown (TestFixture    *fixture,
+               gconstpointer  data)
 {
   testing_engine_free (fixture->engine);
 }
 
-void
-testing_extension_test_runner_  (TestingExtensionFixture_ *fixture,
-                                 gconstpointer             data)
+static void
+test_runner  (TestFixture   *fixture,
+              gconstpointer  data)
 {
-  ((void (*) (PeasEngine *engine)) data) (fixture->engine);
+  g_assert (fixture->info != NULL);
+  g_assert (peas_engine_load_plugin (fixture->engine, fixture->info));
+
+  ((void (*) (PeasEngine *, PeasPluginInfo *)) data) (fixture->engine,
+                                                      fixture->info);
 }
 
-void
-testing_extension_garbage_collect_ (PeasEngine *engine)
+static void
+test_extension_garbage_collect (PeasEngine     *engine,
+                                PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
-
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  /* See that we can collect the garbage when no plugins are loaded */
   peas_engine_garbage_collect (engine);
 
-  g_assert (peas_engine_load_plugin (engine, info));
-
+  /* Check that we can collect the garbage when no plugins are loaded */
+  g_assert (peas_engine_unload_plugin (engine, info));
   peas_engine_garbage_collect (engine);
 }
 
-void
-testing_extension_provides_valid_ (PeasEngine *engine)
+static void
+test_extension_provides_valid (PeasEngine     *engine,
+                               PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
-
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   g_assert (peas_engine_provides_extension (engine, info,
                                             INTROSPECTION_TYPE_CALLABLE));
 }
 
-void
-testing_extension_provides_invalid_ (PeasEngine *engine)
+static void
+test_extension_provides_invalid (PeasEngine     *engine,
+                                 PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
 
   testing_util_push_log_hook ("*assertion `G_TYPE_IS_INTERFACE (*)' failed");
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  /* Not loaded */
-  g_assert (!peas_engine_provides_extension (engine, info,
-                                             INTROSPECTION_TYPE_CALLABLE));
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   /* Invalid GType */
   peas_engine_provides_extension (engine, info, G_TYPE_INVALID);
 
@@ -122,18 +115,19 @@ testing_extension_provides_invalid_ (PeasEngine *engine)
   /* Does not implement this GType */
   g_assert (!peas_engine_provides_extension (engine, info,
                                              INTROSPECTION_TYPE_UNIMPLEMENTED));
+
+  /* Not loaded */
+  g_assert (peas_engine_unload_plugin (engine, info));
+  g_assert (!peas_engine_provides_extension (engine, info,
+                                             INTROSPECTION_TYPE_CALLABLE));
 }
 
-void
-testing_extension_create_valid_ (PeasEngine *engine)
+static void
+test_extension_create_valid (PeasEngine     *engine,
+                             PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_CALLABLE,
                                             NULL);
@@ -144,26 +138,16 @@ testing_extension_create_valid_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_create_invalid_ (PeasEngine *engine)
+static void
+test_extension_create_invalid (PeasEngine     *engine,
+                               PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
 
-  testing_util_push_log_hook ("*assertion `peas_plugin_info_is_loaded (*)' failed");
   testing_util_push_log_hook ("*assertion `G_TYPE_IS_INTERFACE (*)' failed");
   testing_util_push_log_hook ("*does not provide a 'IntrospectionUnimplemented' extension");
   testing_util_push_log_hook ("*type 'IntrospectionCallable' has no property named 'invalid-property'");
-
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  /* Not loaded */
-  extension = peas_engine_create_extension (engine, info,
-                                            INTROSPECTION_TYPE_CALLABLE,
-                                            NULL);
-  g_assert (!PEAS_IS_EXTENSION (extension));
-
-  g_assert (peas_engine_load_plugin (engine, info));
+  testing_util_push_log_hook ("*assertion `peas_plugin_info_is_loaded (*)' failed");
 
   /* Invalid GType */
   extension = peas_engine_create_extension (engine, info, G_TYPE_INVALID, NULL);
@@ -189,33 +173,36 @@ testing_extension_create_invalid_ (PeasEngine *engine)
   g_assert (!PEAS_IS_EXTENSION (extension));
 
   /* This cannot be tested in PyGI and Seed's log handler messes this up */
-  if (g_strcmp0 (extension_plugin, "extension-c") == 0 ||
-      g_strcmp0 (extension_plugin, "extension-python") == 0 ||
-      g_strcmp0 (extension_plugin, "extension-seed") == 0)
-    return;
-
-  testing_util_push_log_hook ("*cannot add *IntrospectionHasMissingPrerequisite* "
-                              "which does not conform to *IntrospectionCallable*");
-  testing_util_push_log_hook ("*Type *HasMissingPrerequisite* is invalid");
-  testing_util_push_log_hook ("*does not provide a *HasMissingPrerequisite* extension");
+  if (g_strcmp0 (extension_plugin, "extension-c") != 0 &&
+      g_strcmp0 (extension_plugin, "extension-python") != 0 &&
+      g_strcmp0 (extension_plugin, "extension-seed") != 0)
+    {
+      testing_util_push_log_hook ("*cannot add *IntrospectionHasMissingPrerequisite* "
+                                  "which does not conform to *IntrospectionCallable*");
+      testing_util_push_log_hook ("*Type *HasMissingPrerequisite* is invalid");
+      testing_util_push_log_hook ("*does not provide a *HasMissingPrerequisite* extension");
+
+      /* Missing Prerequisite */
+      extension = peas_engine_create_extension (engine, info,
+                                                INTROSPECTION_TYPE_HAS_MISSING_PREREQUISITE,
+                                                NULL);
+      g_assert (!PEAS_IS_EXTENSION (extension));
+    }
 
-  /* Missing Prerequisite */
+  /* Not loaded */
+  g_assert (peas_engine_unload_plugin (engine, info));
   extension = peas_engine_create_extension (engine, info,
-                                            INTROSPECTION_TYPE_HAS_MISSING_PREREQUISITE,
+                                            INTROSPECTION_TYPE_CALLABLE,
                                             NULL);
   g_assert (!PEAS_IS_EXTENSION (extension));
 }
 
-void
-testing_extension_create_with_prerequisite_ (PeasEngine *engine)
+static void
+test_extension_create_with_prerequisite (PeasEngine     *engine,
+                                         PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_HAS_PREREQUISITE,
                                             NULL);
@@ -226,13 +213,11 @@ testing_extension_create_with_prerequisite_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_reload_ (PeasEngine *engine)
+static void
+test_extension_reload (PeasEngine *engine,
+                       PeasPluginInfo *info)
 {
   gint i;
-  PeasPluginInfo *info;
-
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
 
   for (i = 0; i < 3; ++i)
     {
@@ -241,17 +226,13 @@ testing_extension_reload_ (PeasEngine *engine)
     }
 }
 
-void
-testing_extension_call_no_args_ (PeasEngine *engine)
+static void
+test_extension_call_no_args (PeasEngine     *engine,
+                             PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   IntrospectionCallable *callable;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             PEAS_TYPE_ACTIVATABLE,
                                             "object", NULL,
@@ -265,18 +246,14 @@ testing_extension_call_no_args_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_call_with_return_ (PeasEngine *engine)
+static void
+test_extension_call_with_return (PeasEngine     *engine,
+                                 PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   IntrospectionCallable *callable;
   const gchar *return_val = NULL;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             PEAS_TYPE_ACTIVATABLE,
                                             "object", NULL,
@@ -295,18 +272,14 @@ testing_extension_call_with_return_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_call_single_arg_ (PeasEngine *engine)
+static void
+test_extension_call_single_arg (PeasEngine     *engine,
+                                PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   IntrospectionCallable *callable;
   gboolean called = FALSE;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             PEAS_TYPE_ACTIVATABLE,
                                             "object", NULL,
@@ -325,19 +298,15 @@ testing_extension_call_single_arg_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_call_multi_args_ (PeasEngine *engine)
+static void
+test_extension_call_multi_args (PeasEngine     *engine,
+                                PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   IntrospectionCallable *callable;
   gint in, out, inout;
   gint inout_saved;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             PEAS_TYPE_ACTIVATABLE,
                                             "object", NULL,
@@ -357,17 +326,13 @@ testing_extension_call_multi_args_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_properties_construct_only_ (PeasEngine *engine)
+static void
+test_extension_properties_construct_only (PeasEngine     *engine,
+                                          PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   gchar *construct_only;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_PROPERTIES,
                                             "construct-only", "my-construct-only",
@@ -380,17 +345,13 @@ testing_extension_properties_construct_only_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_properties_read_only_ (PeasEngine *engine)
+static void
+test_extension_properties_read_only (PeasEngine     *engine,
+                                     PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   gchar *read_only;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_PROPERTIES,
                                             NULL);
@@ -402,16 +363,12 @@ testing_extension_properties_read_only_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_properties_write_only_ (PeasEngine *engine)
+static void
+test_extension_properties_write_only (PeasEngine     *engine,
+                                      PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_PROPERTIES,
                                             NULL);
@@ -421,17 +378,13 @@ testing_extension_properties_write_only_ (PeasEngine *engine)
   g_object_unref (extension);
 }
 
-void
-testing_extension_properties_readwrite_ (PeasEngine *engine)
+static void
+test_extension_properties_readwrite (PeasEngine     *engine,
+                                     PeasPluginInfo *info)
 {
-  PeasPluginInfo *info;
   PeasExtension *extension;
   gchar *readwrite;
 
-  info = peas_engine_get_plugin_info (engine, extension_plugin);
-
-  g_assert (peas_engine_load_plugin (engine, info));
-
   extension = peas_engine_create_extension (engine, info,
                                             INTROSPECTION_TYPE_PROPERTIES,
                                             NULL);
@@ -448,3 +401,77 @@ testing_extension_properties_readwrite_ (PeasEngine *engine)
 
   g_object_unref (extension);
 }
+
+#define _EXTENSION_TEST(loader, path, ftest) \
+  g_test_add (I_(g_strdup_printf ("/extension/%s/" path, loader)), \
+              TestFixture, \
+              (gpointer) test_extension_##ftest, \
+              test_setup, test_runner, test_teardown)
+
+void
+testing_extension_basic (const gchar *loader)
+{
+  PeasEngine *engine;
+
+  testing_init ();
+
+  interned_strings = g_ptr_array_new_with_free_func (g_free);
+  extension_plugin = I_(g_strdup_printf ("extension-%s", loader));
+
+  engine = testing_engine_new ();
+  peas_engine_enable_loader (engine, loader);
+  
+  /* Check that the loaders are created lazily */
+  g_assert (g_type_from_name ("PeasPluginLoader") == G_TYPE_INVALID);
+
+  testing_engine_free (engine);
+
+
+  _EXTENSION_TEST (loader, "garbage-collect", garbage_collect);
+
+  _EXTENSION_TEST (loader, "provides-valid", provides_valid);
+  _EXTENSION_TEST (loader, "provides-invalid", provides_invalid);
+
+  _EXTENSION_TEST (loader, "create-valid", create_valid);
+  _EXTENSION_TEST (loader, "create-invalid", create_invalid);
+  _EXTENSION_TEST (loader, "create-with-prerequisite", create_with_prerequisite);
+
+  _EXTENSION_TEST (loader, "reload", reload);
+}
+
+void
+testing_extension_callable (const gchar *loader)
+{
+  _EXTENSION_TEST (loader, "call-no-args", call_no_args);
+  _EXTENSION_TEST (loader, "call-with-return", call_with_return);
+  _EXTENSION_TEST (loader, "call-single-arg", call_single_arg);
+  _EXTENSION_TEST (loader, "call-multi-args", call_multi_args);
+}
+
+void
+testing_extension_properties (const gchar *loader)
+{
+  _EXTENSION_TEST (loader, "properties-construct-only", properties_construct_only);
+  _EXTENSION_TEST (loader, "properties-read-only", properties_read_only);
+  _EXTENSION_TEST (loader, "properties-write-only", properties_write_only);
+  _EXTENSION_TEST (loader, "properties-readwrite", properties_readwrite);
+}
+
+void
+testing_extension_add (const gchar *path,
+                       gpointer     func)
+{
+  g_test_add (path, TestFixture, func, test_setup, test_runner, test_teardown);
+}
+
+int
+testing_extension_run_tests (void)
+{
+  int retval;
+
+  retval = testing_run_tests ();
+
+  g_ptr_array_unref (interned_strings);
+
+  return retval;
+}
diff --git a/tests/libpeas/testing/testing-extension.h b/tests/libpeas/testing/testing-extension.h
index 11a7980..84097ea 100644
--- a/tests/libpeas/testing/testing-extension.h
+++ b/tests/libpeas/testing/testing-extension.h
@@ -28,87 +28,23 @@
 
 G_BEGIN_DECLS
 
-typedef struct _TestingExtensionFixture_ TestingExtensionFixture_;
+void testing_extension_basic      (const gchar *loader);
+void testing_extension_callable   (const gchar *loader);
+void testing_extension_properties (const gchar *loader);
+void testing_extension_add        (const gchar *path,
+                                   gpointer     func);
 
-struct _TestingExtensionFixture_ {
-  PeasEngine *engine;
-};
+int testing_extension_run_tests   (void);
 
-void testing_extension_set_plugin_    (const gchar              *plugin);
-
-void testing_extension_test_setup_    (TestingExtensionFixture_ *fixture,
-                                       gconstpointer             data);
-void testing_extension_test_teardown_ (TestingExtensionFixture_ *fixture,
-                                       gconstpointer             data);
-void testing_extension_test_runner_   (TestingExtensionFixture_ *fixture,
-                                       gconstpointer             data);
-
-void testing_extension_garbage_collect_           (PeasEngine *engine);
-void testing_extension_provides_valid_            (PeasEngine *engine);
-void testing_extension_provides_invalid_          (PeasEngine *engine);
-void testing_extension_create_valid_              (PeasEngine *engine);
-void testing_extension_create_invalid_            (PeasEngine *engine);
-void testing_extension_create_with_prerequisite_  (PeasEngine *engine);
-void testing_extension_reload_                    (PeasEngine *engine);
-void testing_extension_call_no_args_              (PeasEngine *engine);
-void testing_extension_call_with_return_          (PeasEngine *engine);
-void testing_extension_call_single_arg_           (PeasEngine *engine);
-void testing_extension_call_multi_args_           (PeasEngine *engine);
-void testing_extension_properties_construct_only_ (PeasEngine *engine);
-void testing_extension_properties_read_only_      (PeasEngine *engine);
-void testing_extension_properties_write_only_     (PeasEngine *engine);
-void testing_extension_properties_readwrite_      (PeasEngine *engine);
-
-#define _EXTENSION_TEST(loader, path, ftest) \
-  g_test_add ("/extension/" #loader "/" path, TestingExtensionFixture_, \
-              (gpointer) testing_extension_##ftest##_, \
-              testing_extension_test_setup_, \
-              testing_extension_test_runner_, \
-              testing_extension_test_teardown_)
-
-/* This also tests that loaders are loaded lazily */
-#define EXTENSION_TESTS_INIT(loader) \
-  testing_init (); \
-  peas_engine_enable_loader (peas_engine_get_default (), #loader); \
-  g_assert (g_type_from_name ("PeasPluginLoader") == G_TYPE_INVALID); \
-  g_object_unref (peas_engine_get_default ()); \
-  testing_extension_set_plugin_ ("extension-" #loader); \
-\
-  _EXTENSION_TEST (loader, "garbage-collect", garbage_collect); \
-\
-  _EXTENSION_TEST (loader, "provides-valid", provides_valid); \
-  _EXTENSION_TEST (loader, "provides-invalid", provides_invalid); \
-\
-  _EXTENSION_TEST (loader, "create-valid", create_valid); \
-  _EXTENSION_TEST (loader, "create-invalid", create_invalid); \
-  _EXTENSION_TEST (loader, "create-with-prerequisite", create_with_prerequisite); \
-\
-  _EXTENSION_TEST (loader, "reload", reload)
-
-#define EXTENSION_TESTS_CALLABLE(loader) \
-  _EXTENSION_TEST (loader, "call-no-args", call_no_args); \
-  _EXTENSION_TEST (loader, "call-with-return", call_with_return); \
-  _EXTENSION_TEST (loader, "call-single-arg", call_single_arg); \
-  _EXTENSION_TEST (loader, "call-multi-args", call_multi_args)
-
-#define EXTENSION_TESTS_PROPERTIES(loader) \
-  _EXTENSION_TEST (loader, "properties-construct-only", properties_construct_only); \
-  _EXTENSION_TEST (loader, "properties-read-only", properties_read_only); \
-  _EXTENSION_TEST (loader, "properties-write-only", properties_write_only); \
-  _EXTENSION_TEST (loader, "properties-readwrite", properties_readwrite)
-
-#define EXTENSION_TESTS(loader) \
-  EXTENSION_TESTS_INIT (loader); \
-  EXTENSION_TESTS_CALLABLE (loader); \
-  EXTENSION_TESTS_PROPERTIES (loader)
+#define testing_extension_all(loader) \
+  testing_extension_basic (loader); \
+  testing_extension_callable (loader); \
+  testing_extension_properties (loader)
 
 /* This macro is there to add loader-specific tests. */
 #define EXTENSION_TEST(loader, path, func) \
-  g_test_add ("/extension/" #loader "/" path, TestingExtensionFixture_, \
-              (gpointer) test_extension_##loader##_##func, \
-              testing_extension_test_setup_, \
-              testing_extension_test_runner_, \
-              testing_extension_test_teardown_)
+  testing_extension_add ("/extension/" #loader "/" path, \
+                         (gpointer) test_extension_##loader##_##func)
 
 G_END_DECLS
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]