add attr_get/attr_set
This commit is contained in:
parent
724c740909
commit
f66de93483
6 changed files with 176 additions and 0 deletions
119
testsuite/test_attr.c
Normal file
119
testsuite/test_attr.c
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
#include <errno.h>
|
||||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
#include <unity/unity.h>
|
||||
|
||||
#include "rtti.h"
|
||||
|
||||
#define ATTR_ID (0)
|
||||
#define ATTR_NAME (1)
|
||||
|
||||
typedef struct {
|
||||
int id;
|
||||
char* name;
|
||||
} my_attrset_t;
|
||||
|
||||
static int my_attrset_init(meta_obj_t* obj, va_list ap)
|
||||
{
|
||||
my_attrset_t* attrs = RTTI_OBJ_TO_DATA(my_attrset_t, obj);
|
||||
|
||||
attrs->id = -1;
|
||||
attrs->name = NULL;
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static void my_attrset_destroy(meta_obj_t* obj)
|
||||
{
|
||||
/* do nothing */
|
||||
return;
|
||||
}
|
||||
|
||||
static int my_attrset_get(meta_obj_t* obj, void* attr, void** value)
|
||||
{
|
||||
my_attrset_t* attrs = RTTI_OBJ_TO_DATA(my_attrset_t, obj);
|
||||
|
||||
switch ((int)(long)attr) {
|
||||
case ATTR_ID:
|
||||
*value = (void*)(long)attrs->id;
|
||||
break;
|
||||
case ATTR_NAME:
|
||||
*value = (void*)attrs->name;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static int my_attrset_set(meta_obj_t* obj, void* attr, void* value)
|
||||
{
|
||||
my_attrset_t* attrs = RTTI_OBJ_TO_DATA(my_attrset_t, obj);
|
||||
|
||||
switch ((int)(long)attr) {
|
||||
case ATTR_ID:
|
||||
attrs->id = (int)(long)value;
|
||||
break;
|
||||
case ATTR_NAME:
|
||||
attrs->name = (char*)value;
|
||||
break;
|
||||
default:
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
static size_t my_attrset_datasize(va_list ap)
|
||||
{
|
||||
size_t sz = sizeof(my_attrset_t);
|
||||
|
||||
return sz;
|
||||
}
|
||||
|
||||
static typeinfo_t my_attrset_type
|
||||
= { .name = "my_attrset",
|
||||
.privateSize = 0,
|
||||
.dataSize = (datasize_fn_t)my_attrset_datasize,
|
||||
.init = (obj_init_fn_t)my_attrset_init,
|
||||
.destroy = (obj_destroy_fn_t)my_attrset_destroy,
|
||||
.interfaces = { .attrs = &(intf_attr_t) {
|
||||
.get = (attr_get_fn_t)my_attrset_get,
|
||||
.set = (attr_set_fn_t)my_attrset_set } } };
|
||||
|
||||
static void test_attr_setget(void)
|
||||
{
|
||||
var attrs = makeInstance(&my_attrset_type);
|
||||
void* id;
|
||||
char* name;
|
||||
int rc = 0;
|
||||
|
||||
TEST_ASSERT_TRUE(attrs != NULL);
|
||||
|
||||
rc = attr_set(attrs, (void*)(long)ATTR_ID, (void *)(long)1);
|
||||
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = attr_set(attrs, (void*)(long)ATTR_NAME, "tester");
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
rc = attr_get(attrs, (void*)(long)ATTR_ID, &id);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
TEST_ASSERT_TRUE((int)(long)id == 1);
|
||||
|
||||
rc = attr_get(attrs, (void*)(long)ATTR_NAME, (void**)&name);
|
||||
TEST_ASSERT_TRUE(rc >= 0);
|
||||
|
||||
TEST_ASSERT_TRUE((strcmp(name, "tester") == 0));
|
||||
|
||||
destroy(attrs);
|
||||
}
|
||||
|
||||
void test_attr(void)
|
||||
{
|
||||
printf("\n attr test\n\n");
|
||||
|
||||
RUN_TEST(test_attr_setget);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue