#include #include #include #include static FILE* tmp = nullptr; static char buffer[256]; static Json json; void setUp() { tmp = tmpfile(); TEST_ASSERT_NOT_NULL(tmp); json = json_init(tmp, MINIFIED); } void tearDown() { json_free(&json); if (tmp) { fclose(tmp); tmp = nullptr; } } void test_json_object_empty() { json_begin_object(&json); { } json_end_object(&json); fflush(tmp); rewind(tmp); auto n = fread(buffer, 1, sizeof(buffer) - 1, tmp); buffer[n] = '\0'; TEST_ASSERT_EQUAL_STRING("{}", buffer); } void test_json_object_string_field() { json_begin_object(&json); { json_add_object_field(&json, "field"); json_add_string(&json, "string"); } json_end_object(&json); fflush(tmp); rewind(tmp); auto n = fread(buffer, 1, sizeof(buffer) - 1, tmp); buffer[n] = '\0'; TEST_ASSERT_EQUAL_STRING("{\"field\":\"string\"}", buffer); } void test_json_object_long_field() { json_begin_object(&json); { json_add_object_field(&json, "field"); json_add_long(&json, 42); } json_end_object(&json); fflush(tmp); rewind(tmp); auto n = fread(buffer, 1, sizeof(buffer) - 1, tmp); buffer[n] = '\0'; TEST_ASSERT_EQUAL_STRING("{\"field\":42}", buffer); } void test_json_object_double_field() { json_begin_object(&json); { json_add_object_field(&json, "field"); json_add_double(&json, 3.14); } json_end_object(&json); fflush(tmp); rewind(tmp); auto n = fread(buffer, 1, sizeof(buffer) - 1, tmp); buffer[n] = '\0'; TEST_ASSERT_EQUAL_STRING("{\"field\":3.14}", buffer); } void test_json_object_bool_field() { json_begin_object(&json); { json_add_object_field(&json, "field"); json_add_bool(&json, true); } json_end_object(&json); fflush(tmp); rewind(tmp); auto n = fread(buffer, 1, sizeof(buffer) - 1, tmp); buffer[n] = '\0'; TEST_ASSERT_EQUAL_STRING("{\"field\":true}", buffer); } void test_json_object_null_field() { json_begin_object(&json); { json_add_object_field(&json, "field"); json_add_null(&json); } json_end_object(&json); fflush(tmp); rewind(tmp); auto n = fread(buffer, 1, sizeof(buffer) - 1, tmp); buffer[n] = '\0'; TEST_ASSERT_EQUAL_STRING("{\"field\":null}", buffer); } void test_json_object_multiple_fields() { json_begin_object(&json); { json_add_object_field(&json, "string field"); json_add_string(&json, "string"); json_add_object_field(&json, "long field"); json_add_long(&json, 42); json_add_object_field(&json, "double field"); json_add_double(&json, 3.14); json_add_object_field(&json, "bool field"); json_add_bool(&json, true); json_add_object_field(&json, "null field"); json_add_null(&json); } json_end_object(&json); fflush(tmp); rewind(tmp); auto n = fread(buffer, 1, sizeof(buffer) - 1, tmp); buffer[n] = '\0'; TEST_ASSERT_EQUAL_STRING("{\"string field\":\"string\",\"long field\":42,\"double field\":3.14,\"bool field\":true,\"null field\":null}", buffer); } void test_json_object_nested_field() { json_begin_object(&json); { json_add_object_field(&json, "field"); json_begin_object(&json); { } json_end_object(&json); } json_end_object(&json); fflush(tmp); rewind(tmp); auto n = fread(buffer, 1, sizeof(buffer) - 1, tmp); buffer[n] = '\0'; TEST_ASSERT_EQUAL_STRING("{\"field\":{}}", buffer); } int main() { UNITY_BEGIN(); { RUN_TEST(test_json_object_empty); RUN_TEST(test_json_object_string_field); RUN_TEST(test_json_object_long_field); RUN_TEST(test_json_object_double_field); RUN_TEST(test_json_object_bool_field); RUN_TEST(test_json_object_null_field); RUN_TEST(test_json_object_multiple_fields); RUN_TEST(test_json_object_nested_field); } return UNITY_END(); }