Skip to content

Commit 985184b

Browse files
Added tests for the Init functionality
Signed-off-by: Athish Pranav D <[email protected]>
1 parent 96493f5 commit 985184b

File tree

3 files changed

+53
-7
lines changed

3 files changed

+53
-7
lines changed

include/msgpack/object.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,9 @@ typedef struct msgpack_object_kv {
9797
msgpack_object val;
9898
} msgpack_object_kv;
9999

100+
MSGPACK_DLLEXPORT
101+
bool msgpack_object_init(msgpack_object* d, int type, void* data, size_t size);
102+
100103
#if !defined(_KERNEL_MODE)
101104
MSGPACK_DLLEXPORT
102105
void msgpack_object_print(FILE* out, msgpack_object o);

src/objectc.c

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -125,9 +125,8 @@ int msgpack_pack_object(msgpack_packer* pk, msgpack_object d)
125125
}
126126
}
127127

128-
int msgpack_object_init(msgpack_object* d, void *data, size_t size, int type)
128+
bool msgpack_object_init(msgpack_object* d, int type, void* data, size_t size)
129129
{
130-
d->type = type;
131130
switch (type) {
132131
case MSGPACK_OBJECT_STR:
133132
{
@@ -149,19 +148,18 @@ int msgpack_object_init(msgpack_object* d, void *data, size_t size, int type)
149148
}
150149
case MSGPACK_OBJECT_MAP:
151150
{
152-
d->via.map.ptr = (msgpack_object_kv *) data;
151+
d->via.map.ptr = (msgpack_object_kv *)data;
153152
d->via.map.size = size;
154153
break;
155154
}
156155
default:
157156
{
158157
// Other types are not supported and need to be initialized manually.
159-
d->type = MSGPACK_OBJECT_NIL;
160-
return -1;
158+
return false;
161159
}
162160
}
163-
return 0;
164-
161+
d->type = type;
162+
return true;
165163
}
166164

167165
#if !defined(_KERNEL_MODE)

test/msgpack_c.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1612,6 +1612,51 @@ TEST(MSGPACKC, object_bin_print_buffer_overflow) {
16121612
EXPECT_STREQ("\"test\"", buffer);
16131613
}
16141614

1615+
TEST(MSGPACKC, init_msgpack_obj_string) {
1616+
msgpack_object obj;
1617+
char buffer[] = "test";
1618+
msgpack_object_init(&obj, MSGPACK_OBJECT_STR, (void *)buffer, strlen(buffer));
1619+
EXPECT_EQ(MSGPACK_OBJECT_STR, obj.type);
1620+
EXPECT_STREQ(buffer, obj.via.str.ptr);
1621+
}
1622+
1623+
TEST(MSGPACKC, init_msgpack_obj_bin) {
1624+
msgpack_object obj;
1625+
char buffer[] = "test";
1626+
msgpack_object_init(&obj, MSGPACK_OBJECT_BIN, (void *)buffer, strlen(buffer));
1627+
EXPECT_EQ(MSGPACK_OBJECT_BIN, obj.type);
1628+
EXPECT_STREQ(buffer, obj.via.bin.ptr);
1629+
}
1630+
1631+
TEST(MSGPACKC, init_msgpack_obj_array) {
1632+
msgpack_object obj;
1633+
char buffer[][7] = {"test_1", "test_2", "test_3", "test_4"};
1634+
size_t buffer_size = 4;
1635+
msgpack_object array[buffer_size];
1636+
for(size_t i = 0; i < buffer_size; i++) {
1637+
msgpack_object_init(&array[i], MSGPACK_OBJECT_STR, (void *)buffer[i], strlen(buffer[i]));
1638+
}
1639+
msgpack_object_init(&obj, MSGPACK_OBJECT_ARRAY, (void *)array, buffer_size);
1640+
EXPECT_EQ(MSGPACK_OBJECT_ARRAY, obj.type);
1641+
for(size_t i = 0; i < buffer_size; i++) {
1642+
EXPECT_STREQ(buffer[i], obj.via.array.ptr[i].via.str.ptr);
1643+
}
1644+
}
1645+
1646+
TEST(MSGPACKC, init_msgpack_obj_map) {
1647+
msgpack_object obj;
1648+
char key_str[] = "test_key";
1649+
char value_str[] = "test_value";
1650+
msgpack_object key,value;
1651+
msgpack_object_init(&key, MSGPACK_OBJECT_STR, (void *)key_str, strlen(key_str));
1652+
msgpack_object_init(&value, MSGPACK_OBJECT_STR, (void *)value_str, strlen(value_str));
1653+
msgpack_object_kv map = { key, value };
1654+
msgpack_object_init(&obj, MSGPACK_OBJECT_MAP, (void *)&map, 1);
1655+
EXPECT_EQ(MSGPACK_OBJECT_MAP, obj.type);
1656+
EXPECT_STREQ(key_str, obj.via.map.ptr->key.via.str.ptr);
1657+
EXPECT_STREQ(value_str, obj.via.map.ptr->val.via.str.ptr);
1658+
}
1659+
16151660
/* test for vrefbuffer */
16161661
#define GEN_TEST_VREFBUFFER_PREPARE(...) \
16171662
msgpack_vrefbuffer vbuf; \

0 commit comments

Comments
 (0)