mirror of
https://github.com/RIOT-OS/RIOT.git
synced 2024-12-29 04:50:03 +01:00
131 lines
4.1 KiB
C
131 lines
4.1 KiB
C
/*
|
|
* Copyright (C) 2014 René Kijewski <rene.kijewski@fu-berlin.de>
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
* License as published by the Free Software Foundation; either
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
#include "tests-ubjson.h"
|
|
|
|
typedef enum {
|
|
BEFORE_ARRAY_1 = __LINE__,
|
|
IN_ARRAY_1 = __LINE__,
|
|
|
|
BEFORE_ARRAY_2 = __LINE__,
|
|
IN_ARRAY_2 = __LINE__,
|
|
|
|
BEFORE_END = __LINE__,
|
|
} test_ubjson_empty_object_state_t;
|
|
|
|
typedef struct {
|
|
ubjson_cookie_t cookie;
|
|
test_ubjson_empty_object_state_t state;
|
|
} test_ubjson_empty_object_receiver_cookie_t;
|
|
|
|
static void test_ubjson_empty_object_receiver_callback_sub(
|
|
ubjson_cookie_t *restrict cookie,
|
|
ubjson_type_t type1, ssize_t content1,
|
|
ubjson_type_t type2, ssize_t content2,
|
|
ubjson_read_callback_result_t *result)
|
|
{
|
|
*result = UBJSON_ABORTED;
|
|
|
|
(void) content1, (void) type2, (void) content2;
|
|
|
|
test_ubjson_empty_object_receiver_cookie_t *state;
|
|
state = container_of(cookie, test_ubjson_empty_object_receiver_cookie_t, cookie);
|
|
|
|
switch (state->state) {
|
|
case BEFORE_ARRAY_1:
|
|
TEST_ASSERT_EQUAL_INT(UBJSON_ENTER_OBJECT, type1);
|
|
state->state = IN_ARRAY_1;
|
|
TEST_ASSERT_EQUAL_INT(UBJSON_OKAY, ubjson_read_object(cookie));
|
|
state->state = BEFORE_ARRAY_2;
|
|
break;
|
|
|
|
case IN_ARRAY_1:
|
|
TEST_FAIL("The empty object was not empty (1)");
|
|
break;
|
|
|
|
case BEFORE_ARRAY_2:
|
|
TEST_ASSERT_EQUAL_INT(UBJSON_ENTER_OBJECT, type1);
|
|
state->state = IN_ARRAY_2;
|
|
TEST_ASSERT_EQUAL_INT(UBJSON_OKAY, ubjson_read_object(cookie));
|
|
state->state = BEFORE_END;
|
|
break;
|
|
|
|
case IN_ARRAY_2:
|
|
TEST_FAIL("The empty object was not empty (2)");
|
|
break;
|
|
|
|
case BEFORE_END:
|
|
TEST_FAIL("Content after the end");
|
|
break;
|
|
|
|
default:
|
|
TEST_FAIL("The cookie was corrupted");
|
|
break;
|
|
}
|
|
|
|
*result = UBJSON_OKAY;
|
|
}
|
|
|
|
static ubjson_read_callback_result_t test_ubjson_empty_object_receiver_callback(
|
|
ubjson_cookie_t *restrict cookie,
|
|
ubjson_type_t type1, ssize_t content1,
|
|
ubjson_type_t type2, ssize_t content2)
|
|
{
|
|
ubjson_read_callback_result_t result;
|
|
test_ubjson_empty_object_receiver_callback_sub(cookie, type1, content1, type2, content2, &result);
|
|
return result;
|
|
}
|
|
|
|
#undef EMBUNIT_ERROR_RETURN
|
|
#define EMBUNIT_ERROR_RETURN
|
|
|
|
static void test_ubjson_empty_object_receiver(void)
|
|
{
|
|
test_ubjson_empty_object_receiver_cookie_t state;
|
|
state.state = BEFORE_ARRAY_1;
|
|
|
|
TEST_ASSERT_EQUAL_INT(UBJSON_OKAY,
|
|
ubjson_read(&state.cookie, test_ubjson_read_fun,
|
|
test_ubjson_empty_object_receiver_callback));
|
|
TEST_ASSERT_EQUAL_INT(BEFORE_ARRAY_2, state.state);
|
|
|
|
TEST_ASSERT_EQUAL_INT(UBJSON_OKAY,
|
|
ubjson_read(&state.cookie, test_ubjson_read_fun,
|
|
test_ubjson_empty_object_receiver_callback));
|
|
TEST_ASSERT_EQUAL_INT(BEFORE_END, state.state);
|
|
}
|
|
|
|
#undef EMBUNIT_ERROR_RETURN
|
|
#define EMBUNIT_ERROR_RETURN
|
|
|
|
static void test_ubjson_empty_object_sender(void)
|
|
{
|
|
ubjson_cookie_t cookie;
|
|
ubjson_write_init(&cookie, test_ubjson_write_fun);
|
|
|
|
TEST_ASSERT(ubjson_open_object(&cookie) > 0);
|
|
TEST_ASSERT(ubjson_close_object(&cookie) > 0);
|
|
TEST_ASSERT(ubjson_open_object_len(&cookie, 0) > 0);
|
|
}
|
|
|
|
void test_ubjson_empty_object(void)
|
|
{
|
|
test_ubjson_test(test_ubjson_empty_object_sender,
|
|
test_ubjson_empty_object_receiver);
|
|
}
|