Extend the tests for plugins to show how to handle interface opening

from plugins themself.
This commit is contained in:
Christian Thaeter 2008-11-07 03:59:43 +01:00
parent 52a4f7743a
commit 85bde6ddb1
4 changed files with 96 additions and 23 deletions

View file

@ -26,4 +26,12 @@ out: Bye World!
return: 0
END
TEST "C plugin test, nested" plugin_examplepluginc_nested <<END
out: Hallo Welt!
out: Hello World!
out: Bye World!
out: Tschuess Welt!
return: 0
END
unset LUMIERA_PLUGIN_PATH

View file

@ -3,39 +3,64 @@
#include "hello_interface.h"
#include "lumiera/interfacedescriptor.h"
int myopen(void)
LUMIERA_PLUGIN_INTERFACEHANDLE;
LumieraInterface
myopen (LumieraInterface self, LumieraInterface interfaces)
{
printf("opened\n");
return 0;
LUMIERA_PLUGIN_STORE_INTERFACEHANDLE (interfaces);
fprintf (stderr, "opened %p global interfaces %p\n", self, interfaces);
return self;
}
int myclose(void)
void
myclose (LumieraInterface self)
{
printf("closed\n");
return 0;
fprintf (stderr, "closed %p\n", self);
}
void hallo(void)
void hallo (void)
{
printf("Hallo Welt!\n");
printf ("Hallo Welt!\n");
}
void tschuess(const char* m)
void tschuess (const char* m)
{
printf("Tschuess %s\n", m);
printf ("Tschuess %s\n", m);
}
void hello(void)
void hello (void)
{
printf("Hello World!\n");
printf ("Hello World!\n");
}
void bye(const char* m)
void bye (const char* m)
{
printf("Bye %s\n", m);
printf ("Bye %s\n", m);
}
void yeahbabe (void)
{
LUMIERA_INTERFACE_HANDLE (lumieraorg_testhello, 0) german =
LUMIERA_INTERFACE_OPEN (lumieraorg_testhello, 0, 0, lumieraorg_hello_german);
LUMIERA_INTERFACE_HANDLE (lumieraorg_testhello, 0) english =
LUMIERA_INTERFACE_OPEN (lumieraorg_testhello, 0, 0, lumieraorg_hello_english);
german->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)
)
)

View file

@ -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)),
);

View file

@ -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