TEST(sml_value, write_boolean) { sml_value *v = sml_value_init(); v->type = SML_TYPE_BOOLEAN; v->data.boolean = sml_boolean_init(SML_BOOLEAN_FALSE); sml_value_write(v, buf); expected_buf(buf, "4200", 2); }
TEST(sml_value, write_octet_string) { sml_value *v = sml_value_init(); v->type = SML_TYPE_OCTET_STRING; v->data.bytes = sml_octet_string_init((unsigned char *)"Hallo", 5); sml_value_write(v, buf); expected_buf(buf, "0648616C6C6F", 6); }
TEST(sml_value, write_integer16) { sml_value *v = sml_value_init(); v->type = SML_TYPE_INTEGER | SML_TYPE_NUMBER_16; v->data.int16 = sml_i16_init(-5); sml_value_write(v, buf); expected_buf(buf, "53FFFB", 3); }
TEST(sml_value, write_unsigned32) { sml_value *v = sml_value_init(); v->type = SML_TYPE_UNSIGNED | SML_TYPE_NUMBER_32; v->data.uint32 = sml_u32_init(42); sml_value_write(v, buf); expected_buf(buf, "650000002A", 5); }
TEST(sml_list, write_one_entry) { sml_list *l = sml_list_init(); l->obj_name = sml_octet_string_init((unsigned char *)"Hallo", 5); l->value = sml_value_init(); l->value->type = SML_TYPE_OCTET_STRING; l->value->data.bytes = sml_octet_string_init((unsigned char *)"Hallo", 5); sml_list_write(l, buf); expected_buf(buf, "71770648616C6C6F010101010648616C6C6F01", 19); }
sml_value *sml_value_parse(sml_buffer *buf) { if (sml_buf_optional_is_skipped(buf)) { return 0; } int max = 1; int type = sml_buf_get_next_type(buf); unsigned char byte = sml_buf_get_current_byte(buf); sml_value *value = sml_value_init(); value->type = type; switch (type) { case SML_TYPE_OCTET_STRING: value->data.bytes = sml_octet_string_parse(buf); break; case SML_TYPE_BOOLEAN: value->data.boolean = sml_boolean_parse(buf); break; case SML_TYPE_UNSIGNED: case SML_TYPE_INTEGER: // get maximal size, if not all bytes are used (example: only 6 bytes for a u64) while (max < ((byte & SML_LENGTH_FIELD) - 1)) { max <<= 1; } value->data.uint8 = sml_number_parse(buf, type, max); value->type |= max; break; default: buf->error = 1; break; } if (sml_buf_has_errors(buf)) { sml_value_free(value); return 0; } return value; }
TEST(sml_value, init) { sml_value *v = sml_value_init(); TEST_ASSERT_NOT_NULL(v); sml_value_free( v ); }