From 85bde6ddb14aac210fe390a152a598b04b9280aa Mon Sep 17 00:00:00 2001 From: Christian Thaeter Date: Fri, 7 Nov 2008 03:59:43 +0100 Subject: [PATCH] Extend the tests for plugins to show how to handle interface opening from plugins themself. --- tests/31plugin.tests | 8 ++++ tests/lumiera/example_plugin.c | 69 ++++++++++++++++++++++++--------- tests/lumiera/hello_interface.h | 10 +++++ tests/lumiera/test-interfaces.c | 32 ++++++++++++--- 4 files changed, 96 insertions(+), 23 deletions(-) diff --git a/tests/31plugin.tests b/tests/31plugin.tests index 776f79da6..4f17e1339 100644 --- a/tests/31plugin.tests +++ b/tests/31plugin.tests @@ -26,4 +26,12 @@ out: Bye World! return: 0 END +TEST "C plugin test, nested" plugin_examplepluginc_nested <hello (); + english->hello (); + english->goodbye ("World!"); + german->goodbye ("Welt!"); + + + LUMIERA_INTERFACE_CLOSE (german); + LUMIERA_INTERFACE_CLOSE (english); +} + + + LUMIERA_INTERFACE_INSTANCE (lumieraorg_interfacedescriptor, 0, lumieraorg_exampleplugin_descriptor, NULL, NULL, NULL, @@ -107,8 +132,8 @@ LUMIERA_EXPORT( LUMIERA_INTERFACE_DEFINE (lumieraorg_testhello, 0, lumieraorg_hello_german, LUMIERA_INTERFACE_REF (lumieraorg_interfacedescriptor, 0, lumieraorg_exampleplugin_descriptor), - NULL, - NULL, + myopen, + myclose, LUMIERA_INTERFACE_MAP (hello, "\167\012\306\023\031\151\006\362\026\003\125\017\170\022\100\333", hallo), LUMIERA_INTERFACE_MAP (goodbye, "\324\267\214\166\340\213\155\053\157\125\064\264\167\235\020\223", @@ -117,11 +142,19 @@ LUMIERA_EXPORT( LUMIERA_INTERFACE_DEFINE (lumieraorg_testhello, 0, lumieraorg_hello_english, LUMIERA_INTERFACE_REF (lumieraorg_interfacedescriptor, 0, lumieraorg_exampleplugin_descriptor), - NULL, - NULL, + myopen, + myclose, LUMIERA_INTERFACE_MAP (hello, "\326\247\370\247\032\103\223\357\262\007\356\042\051\330\073\116", hello), LUMIERA_INTERFACE_MAP (goodbye, "\365\141\371\047\101\230\050\106\071\231\022\235\325\112\354\241", bye) + ), + LUMIERA_INTERFACE_DEFINE (lumieraorg_testtest, 0, + lumieraorg_test_both, + LUMIERA_INTERFACE_REF (lumieraorg_interfacedescriptor, 0, lumieraorg_exampleplugin_descriptor), + myopen, + myclose, + LUMIERA_INTERFACE_MAP (testit, "\101\060\122\277\370\023\164\257\347\247\164\325\157\266\323\370", + yeahbabe) ) ) diff --git a/tests/lumiera/hello_interface.h b/tests/lumiera/hello_interface.h index 4ccf02b88..9cb25246f 100644 --- a/tests/lumiera/hello_interface.h +++ b/tests/lumiera/hello_interface.h @@ -1,6 +1,16 @@ #include "lumiera/interface.h" +/* + one interface which can greet in different languages +*/ LUMIERA_INTERFACE_DECLARE (lumieraorg_testhello, 0, LUMIERA_INTERFACE_SLOT (void, hello, (void)), LUMIERA_INTERFACE_SLOT (void, goodbye, (const char*)), ); + +/* + and now one which will be used to test if interfaces can open and call each other +*/ +LUMIERA_INTERFACE_DECLARE (lumieraorg_testtest, 0, + LUMIERA_INTERFACE_SLOT (void, testit, (void)), +); diff --git a/tests/lumiera/test-interfaces.c b/tests/lumiera/test-interfaces.c index 488fe5ea4..e2dcafae2 100644 --- a/tests/lumiera/test-interfaces.c +++ b/tests/lumiera/test-interfaces.c @@ -58,8 +58,9 @@ testfunc (const char* message) LumieraInterface -testacquire (LumieraInterface self) +testacquire (LumieraInterface self, LumieraInterface interface) { + (void) interface; printf ("Acquire %s_%d_%s\n", self->interface, self->version, self->name); return self; } @@ -165,8 +166,9 @@ static LUMIERA_INTERFACE_HANDLE(lumieraorg_testexample_void, 0) one_keeps_two; static LUMIERA_INTERFACE_HANDLE(lumieraorg_testexample_void, 0) one_keeps_three; LumieraInterface -testacquire_one (LumieraInterface self) +testacquire_one (LumieraInterface self, LumieraInterface interface) { + (void) interface; TRACE (tests, "Acquire one %s_%d_%s", self->interface, self->version, self->name); one_keeps_two = LUMIERA_INTERFACE_OPEN (lumieraorg_testexample_void, 0, 0, lumieraorg_dependencytest_two); one_keeps_three = LUMIERA_INTERFACE_OPEN (lumieraorg_testexample_void, 0, 0, lumieraorg_dependencytest_three); @@ -185,8 +187,9 @@ static LUMIERA_INTERFACE_HANDLE(lumieraorg_testexample_void, 0) two_keeps_one; static LUMIERA_INTERFACE_HANDLE(lumieraorg_testexample_void, 0) two_keeps_four; LumieraInterface -testacquire_two (LumieraInterface self) +testacquire_two (LumieraInterface self, LumieraInterface interface) { + (void) interface; TRACE (tests, "Acquire two %s_%d_%s", self->interface, self->version, self->name); two_keeps_one = LUMIERA_INTERFACE_OPEN (lumieraorg_testexample_void, 0, 0, lumieraorg_dependencytest_one); two_keeps_four = LUMIERA_INTERFACE_OPEN (lumieraorg_testexample_void, 0, 0, lumieraorg_dependencytest_four); @@ -205,8 +208,9 @@ static LUMIERA_INTERFACE_HANDLE(lumieraorg_testexample_void, 0) three_keeps_two; static LUMIERA_INTERFACE_HANDLE(lumieraorg_testexample_void, 0) three_keeps_four; LumieraInterface -testacquire_three (LumieraInterface self) +testacquire_three (LumieraInterface self, LumieraInterface interface) { + (void) interface; TRACE (tests, "Acquire three %s_%d_%s", self->interface, self->version, self->name); three_keeps_two = LUMIERA_INTERFACE_OPEN (lumieraorg_testexample_void, 0, 0, lumieraorg_dependencytest_two); three_keeps_four = LUMIERA_INTERFACE_OPEN (lumieraorg_testexample_void, 0, 0, lumieraorg_dependencytest_four); @@ -226,8 +230,9 @@ static LUMIERA_INTERFACE_HANDLE(lumieraorg_testexample_void, 0) four_keeps_two; static LUMIERA_INTERFACE_HANDLE(lumieraorg_testexample_void, 0) four_keeps_three; LumieraInterface -testacquire_four (LumieraInterface self) +testacquire_four (LumieraInterface self, LumieraInterface interface) { + (void) interface; TRACE (tests, "Acquire four %s_%d_%s", self->interface, self->version, self->name); four_keeps_one = LUMIERA_INTERFACE_OPEN (lumieraorg_testexample_void, 0, 0, lumieraorg_dependencytest_one); four_keeps_two = LUMIERA_INTERFACE_OPEN (lumieraorg_testexample_void, 0, 0, lumieraorg_dependencytest_two); @@ -514,6 +519,23 @@ TEST ("plugin_examplepluginc") lumiera_config_destroy (); } +TEST ("plugin_examplepluginc_nested") +{ + lumiera_config_init ("./"); + lumiera_interfaceregistry_init (); + lumiera_plugin_discover (lumiera_plugin_load, lumiera_plugin_register); + + LUMIERA_INTERFACE_HANDLE(lumieraorg_testtest, 0) test = + LUMIERA_INTERFACE_OPEN (lumieraorg_testtest, 0, 0, lumieraorg_test_both); + + test->testit (); + + LUMIERA_INTERFACE_CLOSE (test); + + lumiera_interfaceregistry_destroy (); + lumiera_config_destroy (); +} + TESTS_END