awtk/tests/ubjson_reader_test.cc
2023-06-07 09:48:55 +08:00

231 lines
6.1 KiB
C++

#include "gtest/gtest.h"
#include "tkc/buffer.h"
#include "ubjson/ubjson_writer.h"
#include "ubjson/ubjson_reader.h"
#define PREPARE_TEST() \
uint8_t buff[256]; \
value_t v; \
wbuffer_t wb; \
rbuffer_t rb; \
ubjson_writer_t ub; \
ubjson_reader_t ur; \
wbuffer_init(&wb, buff, sizeof(buff)); \
rbuffer_init(&rb, buff, sizeof(buff)); \
ubjson_writer_init(&ub, (ubjson_write_callback_t)wbuffer_write_binary, &wb); \
ubjson_reader_init(&ur, (ubjson_read_callback_t)rbuffer_read_binary, &rb);
TEST(UBJsonReader, null) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_null(&ub), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_POINTER, true);
ASSERT_EQ(value_pointer(&v) == NULL, true);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, noop) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_noop(&ub), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_POINTER, true);
ASSERT_EQ(value_pointer(&v) == NULL, true);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, true) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_true(&ub), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_BOOL, true);
ASSERT_EQ(value_bool(&v), TRUE);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, false) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_false(&ub), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_BOOL, true);
ASSERT_EQ(value_bool(&v), FALSE);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, array) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_array_begin(&ub), RET_OK);
ASSERT_EQ(ubjson_writer_write_array_end(&ub), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_TOKEN, true);
ASSERT_EQ(value_token(&v), UBJSON_MARKER_ARRAY_BEGIN);
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_TOKEN, true);
ASSERT_EQ(value_token(&v), UBJSON_MARKER_ARRAY_END);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, object) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_object_begin(&ub), RET_OK);
ASSERT_EQ(ubjson_writer_write_object_end(&ub), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_TOKEN, true);
ASSERT_EQ(value_token(&v), UBJSON_MARKER_OBJECT_BEGIN);
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_TOKEN, true);
ASSERT_EQ(value_token(&v), UBJSON_MARKER_OBJECT_END);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, int8) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_int8(&ub, 0x12), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_INT8, true);
ASSERT_EQ(value_int(&v), 0x12);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, char) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_char(&ub, 'a'), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_STRING, true);
ASSERT_STREQ(value_str(&v), "a");
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, int16) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_int16(&ub, 0x1122), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_INT16, true);
ASSERT_EQ(value_int(&v), 0x1122);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, int32) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_int32(&ub, 0x11223344), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_INT32, true);
ASSERT_EQ(value_int(&v), 0x11223344);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, int) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_int(&ub, 1000), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_INT16, true);
ASSERT_EQ(value_int(&v), 1000);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, int64) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_int64(&ub, 0x1122334455667788), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_INT64, true);
ASSERT_EQ(value_int64(&v), 0x1122334455667788);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, float) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_float32(&ub, 12), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_FLOAT32, true);
ASSERT_EQ(value_float(&v), 12);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, double) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_float64(&ub, 12), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_DOUBLE, true);
ASSERT_EQ(value_double(&v), 12);
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, string) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_str(&ub, "a"), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_STRING, true);
ASSERT_STREQ(value_str(&v), "a");
ubjson_reader_reset(&ur);
}
TEST(UBJsonReader, wstring) {
PREPARE_TEST();
ASSERT_EQ(ubjson_writer_write_wstr(&ub, L"abc"), RET_OK);
rb.capacity = wb.cursor;
ASSERT_EQ(ubjson_reader_read(&ur, &v), RET_OK);
ASSERT_EQ(v.type == VALUE_TYPE_WSTRING, true);
ASSERT_EQ(wcscmp(value_wstr(&v), L"abc"), 0);
ubjson_reader_reset(&ur);
}