X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/00ae41703c606f0ea98febed8f67435f875f7e6f..9e15b38133dbce39d340806433ea84f995753717:/tests/general.at diff --git a/tests/general.at b/tests/general.at index 4001942..7b03f4e 100644 --- a/tests/general.at +++ b/tests/general.at @@ -22,7 +22,8 @@ AT_CLEANUP AT_SETUP([str.gob]) AT_DATA([main.c], -[[#include "str.h" +[[#include +#include "str.h" int main(void) { @@ -61,7 +62,7 @@ exec 3<&- AT_CHECK([test x"$total" = x"2"]) TEST_COMPILE_GOBJECT([main.c], [0], [], [stderr]) -AT_CHECK([awk -NF : '$1 == "main.c" && $2 == "15" { exit 42 }' stderr], [42]) +AT_CHECK([awk -NF : '$1 == "main.c" && $2 == "16" { exit 42 }' stderr], [42]) AT_CHECK([$CC $CFLAGS $LDFLAGS $LIBGOBJECT_LIBS -o main str.o main.o]) @@ -71,8 +72,10 @@ dnl Check that dynamic types are accepted and compile OK... AT_SETUP([dynamic types]) AT_KEYWORDS([dynamic]) -AT_DATA([test.gob], -[[class :Test from G:Object (dynamic) +AT_DATA([test.gob], [[%ctop{ +#include +%} +class :Test from G:Object (dynamic) { public void test(void) { @@ -82,7 +85,8 @@ AT_DATA([test.gob], AT_CHECK([gob2 test.gob]) AT_DATA([main.c], -[[#include "test.h" +[[#include +#include "test.h" int main(void) { test_register_type(NULL); @@ -100,8 +104,10 @@ dnl dynamic type after registration. AT_SETUP([dynamic type registration]) AT_KEYWORDS([dynamic runtime]) -AT_DATA([test.gob], -[[%{ +AT_DATA([test.gob], [[%ctop{ +#include +%} +%{ #include %} class :Test from G:Object (dynamic) @@ -115,31 +121,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 #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 +145,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,109 +157,11 @@ 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([./main], [0], [Hello, World -]) - -AT_CLEANUP - -dnl Dynamic types: check that we can call interface methods of dynamic types. -AT_SETUP([dynamic interface implementation]) -AT_KEYWORDS([dynamic runtime interface]) - -AT_DATA([iface.h], -[[#define IF_TYPE_TEST if_test_get_type() - -typedef struct IFTestIface { - GTypeInterface parent; - - void (*test)(GObject *obj); -} IFTestIface; - -GType if_test_get_type(void); -]]) - -AT_DATA([test.gob], -[[%{ -#include -#include "iface.h" -%} - -class :Test from G:Object (dynamic) - (interface IF:Test) -{ - private const char *s = { "Hello, World!" }; - interface IF:Test private void test(G:Object *o) - { - Self *self = SELF(o); - printf("%s\n", self->_priv->s); - } -} -]]) - -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; - } -} -]]) - -AT_DATA([main.c], -[[#include "test.h" -#include "mod.h" -#include "iface.h" - -GType if_test_get_type(void) -{ - static GType type = 0; - if (type == 0) { - static const GTypeInfo info = { - sizeof (IFTestIface), - NULL, - NULL, - }; - - type = g_type_register_static(G_TYPE_INTERFACE, "IFTest", &info, 0); - } - return type; -} - -int main(void) -{ - GTypeModule *m = g_object_new(TYPE_MOD, NULL); - GObject *t; - - g_type_module_use(m); - t = g_object_new(TYPE_TEST, NULL); - - g_return_val_if_fail(G_TYPE_CHECK_INSTANCE_TYPE(t, IF_TYPE_TEST), - EXIT_FAILURE); - G_TYPE_INSTANCE_GET_INTERFACE(t, IF_TYPE_TEST, IFTestIface)->test(t); - 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([./main], [0], [Hello, World! +AT_CHECK([$CC $CFLAGS $LDFLAGS $LIBGOBJECT_LIBS -o main \ + test.o test-mod.o main.o]) +AT_CHECK([./main], [0], [Hello, World ]) AT_CLEANUP