From ee1d01180583f7a4940bce0d1bda85c8379b6b4b Mon Sep 17 00:00:00 2001 From: Nick Bowler Date: Sat, 8 Feb 2020 10:51:25 -0500 Subject: [PATCH] Minor testsuite cleanup. In the interface tests we have a macro to generate the GTypeModule for a dynamic type, let's make that usable for the dynamic type registration test as well. --- tests/general.at | 32 ++++++++++---------------------- tests/interface.at | 29 ++--------------------------- testsuite.at | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 45 insertions(+), 49 deletions(-) diff --git a/tests/general.at b/tests/general.at index 97b59da..6643d4d 100644 --- a/tests/general.at +++ b/tests/general.at @@ -115,31 +115,20 @@ class :Test from G:Object (dynamic) } } ]]) +AT_CHECK([gob2 test.gob]) +TEST_COMPILE_GOBJECT([test.c], [0], [], [ignore]) -AT_DATA([mod.gob], -[[%{ -#include "test.h" -%} -class :Mod from G:Type:Module -{ - override (G:Type:Module) gboolean load(G:Type:Module *m) - { - test_register_type(m); - return TRUE; - } -} -]]) +TEST_TYPE_MODULE([:Test]) AT_DATA([main.c], [[#include -#include "mod.h" #include "test.h" +#include "test-mod.h" void devnull(const char *a, GLogLevelFlags b, const char *c, gpointer d) { } int main(void) { - GTypeModule *m = g_object_new(mod_get_type(), NULL); guint handler; Test *t; @@ -150,7 +139,9 @@ int main(void) return EXIT_FAILURE; g_log_remove_handler("GLib-GObject", handler); - g_type_module_use(m); + /* Register dynamic type */ + g_type_module_use(g_object_new(test_mod_get_type(), NULL)); + /* should work now */ t = g_object_new(test_get_type(), "s", "Hello, World", (char *)NULL); if (!t) @@ -160,13 +151,10 @@ int main(void) return EXIT_SUCCESS; } ]]) - -AT_CHECK([gob2 mod.gob]) -AT_CHECK([gob2 test.gob]) -TEST_COMPILE_GOBJECT([mod.c], [0], [], [ignore]) -TEST_COMPILE_GOBJECT([test.c], [0], [], [ignore]) TEST_COMPILE_GOBJECT([main.c], [0], [], [ignore]) -AT_CHECK([$CC $CFLAGS $LDFLAGS $LIBGOBJECT_LIBS -o main mod.o test.o main.o]) + +AT_CHECK([$CC $CFLAGS $LDFLAGS $LIBGOBJECT_LIBS -o main \ + test.o test-mod.o main.o]) AT_CHECK([./main], [0], [Hello, World ]) diff --git a/tests/interface.at b/tests/interface.at index 9c368b6..e750bc4 100644 --- a/tests/interface.at +++ b/tests/interface.at @@ -3,31 +3,6 @@ dnl License GPLv2+: GNU General Public License version 2 or any later version. dnl This is free software: you are free to change and redistribute it. dnl There is NO WARRANTY, to the extent permitted by law. -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], m4_translit([[$1]], [:A-Z], [_a-z]), - m4_translit([[$1]], [:A-Z], [-a-z]))]) - -m4_define([TEST_TYPE_MODULE_], -[AT_KEYWORDS([dynamic])dnl - -AT_DATA([$3-mod.gob], [[%{ -#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])]) - dnl Create the Test:Fooable interface with the following interface method: dnl dnl int foo(G:Object *obj); @@ -41,8 +16,8 @@ TEST_COMPILE_GOBJECT([test-fooable.c], [0], [], [ignore])]) dnl TEST_FOOABLE_IMPL(Class:Name, Parent:Class, foo_body) dnl TEST_FOOABLE_IMPL_DYN(Class:Name, Parent:Class, foo_body) m4_define([TEST_FOOABLE_IMPL], - [TEST_FOOABLE_IMPL_([$1], m4_translit([[$1]], [:A-Z], [-a-z]), - [$2], m4_translit([[$2]], [:A-Z], [-a-z]), + [TEST_FOOABLE_IMPL_([$1], TEST_CLASSNAME_REPLACE_SEP([$1], [-]), + [$2], TEST_CLASSNAME_REPLACE_SEP([$2], [-]), [$3], [$4])]) m4_define([TEST_FOOABLE_IMPL_DYN], diff --git a/testsuite.at b/testsuite.at index 52dbd98..b28fd93 100644 --- a/testsuite.at +++ b/testsuite.at @@ -16,6 +16,39 @@ dnl Same as TEST_COMPILE_GOBJECT, except that the C++ compiler is used. m4_define([TEST_COMPILEXX_GOBJECT], [AT_CHECK([$HAVE_GOBJECT || exit 77 $CXX $CPPFLAGS $CXXFLAGS $LIBGOBJECT_CFLAGS -c $1], m4_shift($@))]) +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], [[%{ +#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])]) + AT_INIT AT_COLOR_TESTS -- 2.43.0