| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128 |
- #include "testBase.h"
- void testEqualityBoolEdgeCases(void)
- {
- // NULL 输入
- TEST_ASSERT_FALSE_MESSAGE(RyanJsonIsBool(NULL), "RyanJsonIsBool(NULL) 应返回 false");
- // 类型混淆测试
- RyanJson_t num = RyanJsonCreateInt("num", 123);
- TEST_ASSERT_FALSE_MESSAGE(RyanJsonIsBool(num), "RyanJsonIsBool(Int) 应返回 false");
- RyanJsonDelete(num);
- RyanJson_t str = RyanJsonCreateString("str", "true");
- TEST_ASSERT_FALSE_MESSAGE(RyanJsonIsBool(str), "RyanJsonIsBool(String) 应返回 false");
- RyanJsonDelete(str);
- RyanJson_t obj = RyanJsonCreateObject();
- TEST_ASSERT_FALSE_MESSAGE(RyanJsonIsBool(obj), "RyanJsonIsBool(Object) 应返回 false");
- RyanJsonDelete(obj);
- RyanJson_t arr = RyanJsonCreateArray();
- TEST_ASSERT_FALSE_MESSAGE(RyanJsonIsBool(arr), "RyanJsonIsBool(Array) 应返回 false");
- RyanJsonDelete(arr);
- RyanJson_t nullNode = RyanJsonCreateNull("null");
- TEST_ASSERT_FALSE_MESSAGE(RyanJsonIsBool(nullNode), "RyanJsonIsBool(Null) 应返回 false");
- RyanJsonDelete(nullNode);
- }
- /**
- * @brief boolValue 基础一致性测试
- */
- static void testEqualityBoolBasic(void)
- {
- // 测试 true
- {
- const char *jsonBoolStr = "{\"bool\":true}";
- RyanJson_t jsonRoot = RyanJsonParse(jsonBoolStr);
- TEST_ASSERT_NOT_NULL_MESSAGE(jsonRoot, "解析包含 true 的 Json 失败");
- TEST_ASSERT_TRUE_MESSAGE(RyanJsonIsBool(RyanJsonGetObjectToKey(jsonRoot, "bool")), "字段 'bool' 不是布尔类型");
- TEST_ASSERT_EQUAL_INT_MESSAGE(RyanJsonTrue, RyanJsonGetBoolValue(RyanJsonGetObjectToKey(jsonRoot, "bool")),
- "字段 'bool' 的值不是 true");
- // 往返校验(序列化 -> 解析 -> 再验证)
- char *serializedStr = RyanJsonPrint(jsonRoot, 64, RyanJsonFalse, NULL);
- RyanJsonDelete(jsonRoot);
- RyanJson_t roundtripJson = RyanJsonParse(serializedStr);
- RyanJsonFree(serializedStr);
- TEST_ASSERT_NOT_NULL_MESSAGE(roundtripJson, "往返测试:重新解析失败");
- TEST_ASSERT_TRUE_MESSAGE(RyanJsonIsBool(RyanJsonGetObjectToKey(roundtripJson, "bool")), "往返测试:字段 'bool' 类型错误");
- TEST_ASSERT_EQUAL_INT_MESSAGE(RyanJsonTrue, RyanJsonGetBoolValue(RyanJsonGetObjectToKey(roundtripJson, "bool")),
- "往返测试:字段 'bool' 的值错误");
- RyanJsonDelete(roundtripJson);
- }
- // 测试 false
- {
- const char *jsonBoolStr = "{\"bool\":false}";
- RyanJson_t jsonRoot = RyanJsonParse(jsonBoolStr);
- TEST_ASSERT_NOT_NULL_MESSAGE(jsonRoot, "解析包含 false 的 Json 失败");
- TEST_ASSERT_TRUE_MESSAGE(RyanJsonIsBool(RyanJsonGetObjectToKey(jsonRoot, "bool")), "字段 'bool' 不是布尔类型");
- TEST_ASSERT_EQUAL_INT_MESSAGE(RyanJsonFalse, RyanJsonGetBoolValue(RyanJsonGetObjectToKey(jsonRoot, "bool")),
- "字段 'bool' 的值不是 false");
- // 往返测试
- char *serializedStr = RyanJsonPrint(jsonRoot, 64, RyanJsonFalse, NULL);
- RyanJsonDelete(jsonRoot);
- RyanJson_t roundtripJson = RyanJsonParse(serializedStr);
- RyanJsonFree(serializedStr);
- TEST_ASSERT_NOT_NULL_MESSAGE(roundtripJson, "往返测试:重新解析失败");
- TEST_ASSERT_TRUE_MESSAGE(RyanJsonIsBool(RyanJsonGetObjectToKey(roundtripJson, "bool")), "往返测试:字段 'bool' 类型错误");
- TEST_ASSERT_EQUAL_INT_MESSAGE(RyanJsonFalse, RyanJsonGetBoolValue(RyanJsonGetObjectToKey(roundtripJson, "bool")),
- "往返测试:字段 'bool' 的值错误");
- RyanJsonDelete(roundtripJson);
- }
- }
- /**
- * @brief 布尔数组一致性测试
- */
- static void testEqualityBoolArray(void)
- {
- const char *jsonArrayStr = "[true, false, true, false]";
- RyanJson_t jsonRoot = RyanJsonParse(jsonArrayStr);
- TEST_ASSERT_NOT_NULL_MESSAGE(jsonRoot, "解析布尔数组失败");
- TEST_ASSERT_EQUAL_INT_MESSAGE(4, RyanJsonGetArraySize(jsonRoot), "数组大小不正确");
- RyanJsonBool_e expected[] = {RyanJsonTrue, RyanJsonFalse, RyanJsonTrue, RyanJsonFalse};
- int32_t idx = 0;
- RyanJson_t item = NULL;
- RyanJsonArrayForEach(jsonRoot, item)
- {
- TEST_ASSERT_TRUE_MESSAGE(RyanJsonIsBool(item), "数组元素不是布尔类型");
- TEST_ASSERT_EQUAL_INT_MESSAGE(expected[idx], RyanJsonGetBoolValue(item), "数组元素值不匹配");
- idx++;
- }
- // 往返测试
- char *serializedStr = RyanJsonPrint(jsonRoot, 64, RyanJsonFalse, NULL);
- RyanJsonDelete(jsonRoot);
- RyanJson_t roundtripJson = RyanJsonParse(serializedStr);
- RyanJsonFree(serializedStr);
- TEST_ASSERT_NOT_NULL_MESSAGE(roundtripJson, "往返测试:重新解析数组失败");
- TEST_ASSERT_EQUAL_INT_MESSAGE(4, RyanJsonGetArraySize(roundtripJson), "往返测试:数组大小不正确");
- idx = 0;
- RyanJsonArrayForEach(roundtripJson, item)
- {
- TEST_ASSERT_TRUE_MESSAGE(RyanJsonIsBool(item), "往返测试:数组元素不是布尔类型");
- TEST_ASSERT_EQUAL_INT_MESSAGE(expected[idx], RyanJsonGetBoolValue(item), "往返测试:数组元素值不匹配");
- idx++;
- }
- RyanJsonDelete(roundtripJson);
- }
- void testEqualityBoolRunner(void)
- {
- UnitySetTestFile(__FILE__);
- RUN_TEST(testEqualityBoolEdgeCases);
- RUN_TEST(testEqualityBoolBasic);
- RUN_TEST(testEqualityBoolArray);
- }
|