LONGBOW_TEST_CASE(parc_JSONArray, parcJSONArray_BuildString) { PARCJSONArray *array = parcJSONArray_Create(); PARCJSONValue *expected = parcJSONValue_CreateFromInteger(10); parcJSONArray_AddValue(array, expected); PARCBufferComposer *composer = parcBufferComposer_Create(); parcJSONArray_BuildString(array, composer, false); PARCBuffer *tempBuffer = parcBufferComposer_ProduceBuffer(composer); parcBufferComposer_Release(&composer); char *result = parcBuffer_ToString(tempBuffer); parcBuffer_Release(&tempBuffer); assertTrue(strlen(result) > 0, "Expected non-empty string result"); parcMemory_Deallocate((void **) &result); composer = parcBufferComposer_Create(); parcJSONArray_BuildString(array, composer, true); tempBuffer = parcBufferComposer_ProduceBuffer(composer); parcBufferComposer_Release(&composer); result = parcBuffer_ToString(tempBuffer); parcBuffer_Release(&tempBuffer); assertTrue(strlen(result) > 0, "Expected non-empty string result"); parcMemory_Deallocate((void **) &result); parcJSONValue_Release(&expected); parcJSONArray_Release(&array); }
PARCBufferComposer * parcJSONValue_BuildString(const PARCJSONValue *value, PARCBufferComposer *composer, bool compact) { parcJSONValue_OptionalAssertValid(value); if (value->type == PARCJSONValueType_Boolean) { parcBufferComposer_PutString(composer, value->value.boolean ? "true" : "false"); } else if (value->type == PARCJSONValueType_String) { _buildStringString(value, composer, compact); } else if (value->type == PARCJSONValueType_Number) { _buildStringNumber(value, composer); } else if (value->type == PARCJSONValueType_Array) { parcJSONArray_BuildString(value->value.array, composer, compact); } else if (value->type == PARCJSONValueType_JSON) { parcJSON_BuildString(value->value.object, composer, compact); } else if (value->type == PARCJSONValueType_Null) { parcBufferComposer_PutString(composer, "null"); } else { trapIllegalValue(value->type, "Unknown value type: %d", value->type); } return composer; }