Extend the tests for plugins to show how to handle interface opening
from plugins themself.
This commit is contained in:
parent
52a4f7743a
commit
85bde6ddb1
4 changed files with 96 additions and 23 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
)
|
||||
)
|
||||
|
|
|
|||
|
|
@ -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)),
|
||||
);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue