X-Git-Url: https://git.draconx.ca/gitweb/gob-dx.git/blobdiff_plain/0c92ab0b40d0c819fe88edd88db5dbf4f609d6da..a26eff8ba11dcf9a6aa21e1537397bbbfb6a927e:/tests/general.at diff --git a/tests/general.at b/tests/general.at index fa465e5..d7be502 100644 --- a/tests/general.at +++ b/tests/general.at @@ -1,4 +1,4 @@ -dnl Copyright © 2019-2020 Nick Bowler +dnl Copyright © 2019-2021 Nick Bowler 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. @@ -22,7 +22,8 @@ AT_CLEANUP AT_SETUP([str.gob]) AT_DATA([main.c], -[[#include "str.h" +[[#include +#include "str.h" int main(void) { @@ -45,6 +46,7 @@ int main(void) str_gob=$abs_top_srcdir/t/str.gob AT_CHECK([gob2 "$str_gob"]) +AT_CHECK([$HAVE_GOBJECT_PRIVATES || exit 77]) TEST_COMPILE_GOBJECT([str.c], [0], [], [stderr]) mv stderr str_stderr @@ -61,7 +63,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 +73,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) { @@ -80,17 +84,18 @@ AT_DATA([test.gob], } ]]) AT_CHECK([gob2 test.gob]) +TEST_COMPILE_GOBJECT([test.c], [0], [], [ignore]) AT_DATA([main.c], -[[#include "test.h" +[[#include +#include "test.h" int main(void) { test_register_type(NULL); } ]]) - -TEST_COMPILE_GOBJECT([test.c], [0], [], [ignore]) TEST_COMPILE_GOBJECT([main.c], [0], [], [ignore]) + AT_CHECK([$CC $CFLAGS $LDFLAGS $LIBGOBJECT_LIBS -o main test.o main.o]) AT_CLEANUP @@ -100,8 +105,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 +122,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 +146,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 +158,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 ]) @@ -214,3 +209,91 @@ AT_CHECK([$AUTOCONF --force]) AT_CHECK([./configure], [1], [ignore], [ignore]) AT_CLEANUP + +AT_SETUP([private data members]) + +AT_DATA([test.gob], [[%ctop{ +#include +%} +class :Test from G:Object +{ + private int x = 42; + + public int get_x(G:Object *go) { return TEST(go)->_priv->x; } + public void set_x(G:Object *go, int val) { TEST(go)->_priv->x = val; } +} +]]) +AT_CHECK([gob2 test.gob]) +AT_CHECK([$HAVE_GOBJECT_PRIVATES || exit 77]) +TEST_COMPILE_GOBJECT([test.c], [0], [], [ignore]) + +AT_DATA([main.c], [[#include +#include +#include "test.h" + +int main(void) +{ + GObject *go = g_object_new(test_get_type(), NULL); + + printf("%d\n", test_get_x(go)); + printf("%d\n", (test_set_x(go, 123), test_get_x(go))); + + return 0; +} +]]) +TEST_COMPILE_GOBJECT([main.c], [0], [], [ignore]) + +AT_CHECK([$CC $CFLAGS $LDFLAGS $LIBGOBJECT_LIBS -o main \ + test.o main.o]) +AT_CHECK([./main], [0], [42 +123 +]) + +AT_CLEANUP + +AT_SETUP([private data members (dynamic)]) + +AT_DATA([test.gob], [[%ctop{ +#include +%} +class :Test from G:Object (dynamic) +{ + private int x = 54; + + public int get_x(G:Object *go) { return TEST(go)->_priv->x; } + public void set_x(G:Object *go, int val) { TEST(go)->_priv->x = val; } +} +]]) +AT_CHECK([gob2 test.gob]) +AT_CHECK([$HAVE_GOBJECT_PRIVATES || exit 77]) +TEST_COMPILE_GOBJECT([test.c], [0], [], [ignore]) + +TEST_TYPE_MODULE([:Test]) + +AT_DATA([main.c], [[#include +#include +#include "test.h" +#include "test-mod.h" + +int main(void) +{ + GObject *go; + + g_type_module_use(g_object_new(test_mod_get_type(), NULL)); + go = g_object_new(test_get_type(), NULL); + + printf("%d\n", test_get_x(go)); + printf("%d\n", (test_set_x(go, 123), test_get_x(go))); + + return 0; +} +]]) +TEST_COMPILE_GOBJECT([main.c], [0], [], [ignore]) + +AT_CHECK([$CC $CFLAGS $LDFLAGS $LIBGOBJECT_LIBS -o main \ + test.o test-mod.o main.o]) +AT_CHECK([./main], [0], [54 +123 +]) + +AT_CLEANUP