+dnl TEST_CLASSNAME_REPLACE_SEP(Class:Name, separator)
+dnl
+dnl Convert the components of Class:Name to lower case, and join them
+dnl together with the given separator. The result is a quoted string.
+m4_define([TEST_CLASSNAME_REPLACE_SEP],
+ [m4_join([$2], m4_unquote(m4_split(m4_tolower([$1]), [:])))])
+
+dnl TEST_TYPE_MODULE(Class:Name)
+dnl Create a GTypeModule (Class:Name:Mod) which registers the dynamic
+dnl type indiciated by Class:Name.
+m4_define([TEST_TYPE_MODULE],
+[TEST_TYPE_MODULE_([$1],
+ TEST_CLASSNAME_REPLACE_SEP([$1], [_]),
+ TEST_CLASSNAME_REPLACE_SEP([$1], [-]))])
+
+m4_define([TEST_TYPE_MODULE_],
+[AT_KEYWORDS([dynamic])dnl
+
+AT_DATA([$3-mod.gob], [[%ctop{
+#include <config.h>
+%}
+%{
+#include "$3.h"
+%}
+class $1:Mod from G:Type:Module
+{
+ override (G:Type:Module) gboolean load(G:Type:Module *m)
+ {
+ $2_register_type(m);
+ return TRUE;
+ }
+}
+]])
+AT_CHECK([gob2 $3-mod.gob])
+TEST_COMPILE_GOBJECT([$3-mod.c], [0], [], [ignore])])
+