diff --git a/src/parser_impl.c b/src/parser_impl.c index d4275ba0..d9908ebb 100644 --- a/src/parser_impl.c +++ b/src/parser_impl.c @@ -192,7 +192,7 @@ parser_error_t json_matchToken(const parsed_json_t *parsedJson, return PARSER_UNEXPECTED_TYPE; } - if (token.end < token.start || strlen(expectedValue) != (size_t) (token.end - token.start)) { + if (token.end < token.start || strlen(expectedValue) != (size_t)(token.end - token.start)) { return PARSER_UNEXPECTED_VALUE; } @@ -211,7 +211,7 @@ parser_error_t json_matchNull(const parsed_json_t *parsedJson, uint16_t tokenIdx return PARSER_UNEXPECTED_TYPE; } - if (token.end < token.start || 4 != (size_t) (token.end - token.start)) { + if (token.end < token.start || 4 != (size_t)(token.end - token.start)) { return PARSER_UNEXPECTED_VALUE; } @@ -228,30 +228,25 @@ parser_error_t json_matchKeyValue(const parsed_json_t *parsedJson, jsmntype_t jsonType, uint16_t *valueTokenIdx) { CHECK_PARSER_ERR(json_validateToken(parsedJson, tokenIdx)) - - if (!(tokenIdx + 4 < parsedJson->numberOfTokens)) { - // we need this token and 4 more - return PARSER_JSON_INVALID_TOKEN_IDX; - } - if (parsedJson->tokens[tokenIdx].type != JSMN_OBJECT) { - return PARSER_UNEXPECTED_TYPE; + return PARSER_JSON_INVALID; } - if (parsedJson->tokens[tokenIdx].size != 2) { - return PARSER_UNEXPECTED_NUMBER_ITEMS; + uint16_t objectElements = 0; + CHECK_PARSER_ERR(object_get_element_count(parsedJson, tokenIdx, &objectElements)); + if (objectElements != 2) { + return PARSER_JSON_INVALID; } + uint16_t keyTokenIdx = 0; + CHECK_PARSER_ERR(object_get_value(parsedJson, tokenIdx, "type", &keyTokenIdx)); + CHECK_PARSER_ERR(object_get_value(parsedJson, tokenIdx, "value", valueTokenIdx)); + // Type key/value - CHECK_PARSER_ERR(json_matchToken(parsedJson, tokenIdx + 1, (char *) "type")) - CHECK_PARSER_ERR(json_matchToken(parsedJson, tokenIdx + 2, expectedType)) - CHECK_PARSER_ERR(json_matchToken(parsedJson, tokenIdx + 3, (char *) "value")) - if (parsedJson->tokens[tokenIdx + 4].type != jsonType) { - return PARSER_UNEXPECTED_NUMBER_ITEMS; + CHECK_PARSER_ERR(json_matchToken(parsedJson, keyTokenIdx, expectedType)) + if (parsedJson->tokens[*valueTokenIdx].type != jsonType) { + return PARSER_JSON_INVALID; } - - *valueTokenIdx = tokenIdx + 4; - return PARSER_OK; } @@ -262,35 +257,37 @@ parser_error_t json_matchOptionalKeyValue(const parsed_json_t *parsedJson, jsmntype_t jsonType, uint16_t *valueTokenIdx) { CHECK_PARSER_ERR(json_validateToken(parsedJson, tokenIdx)) - - if (!(tokenIdx + 4 < parsedJson->numberOfTokens)) { - // we need this token and 4 more. - return PARSER_JSON_INVALID_TOKEN_IDX; - } - if (parsedJson->tokens[tokenIdx].type != JSMN_OBJECT) { - return PARSER_UNEXPECTED_TYPE; + return PARSER_JSON_INVALID; } - if (parsedJson->tokens[tokenIdx].size != 2) { - return PARSER_UNEXPECTED_NUMBER_ITEMS; + uint16_t objectElements = 0; + CHECK_PARSER_ERR(object_get_element_count(parsedJson, tokenIdx, &objectElements)); + if (objectElements != 2) { + return PARSER_JSON_INVALID; } - // Type key/value - CHECK_PARSER_ERR(json_matchToken(parsedJson, tokenIdx + 1, (char *) "type")) - CHECK_PARSER_ERR(json_matchToken(parsedJson, tokenIdx + 2, (char *) "Optional")) - CHECK_PARSER_ERR(json_matchToken(parsedJson, tokenIdx + 3, (char *) "value")) - if (parsedJson->tokens[tokenIdx + 4].type == JSMN_PRIMITIVE) { // optional null - CHECK_PARSER_ERR(json_matchNull(parsedJson, tokenIdx + 4)) + uint16_t innerKeyTokenIdx = 0; + uint16_t innerValueTokenIdx = 0; + CHECK_PARSER_ERR(object_get_value(parsedJson, tokenIdx, "type", &innerKeyTokenIdx)); + CHECK_PARSER_ERR(object_get_value(parsedJson, tokenIdx, "value", &innerValueTokenIdx)); + CHECK_PARSER_ERR(json_matchToken(parsedJson, innerKeyTokenIdx, (char *) "Optional")) + + if (parsedJson->tokens[innerValueTokenIdx].type == JSMN_PRIMITIVE) { // optional null + CHECK_PARSER_ERR(json_matchNull(parsedJson, innerValueTokenIdx)) *valueTokenIdx = JSON_MATCH_VALUE_IDX_NONE; return PARSER_OK; } - if (parsedJson->tokens[tokenIdx + 4].type == JSMN_OBJECT) { // optional not not null - return json_matchKeyValue(parsedJson, tokenIdx + 4, expectedType, jsonType, valueTokenIdx); + if (parsedJson->tokens[innerValueTokenIdx].type == JSMN_OBJECT) { // optional not null + return json_matchKeyValue(parsedJson, + innerValueTokenIdx, + expectedType, + jsonType, + valueTokenIdx); } - return PARSER_UNEXPECTED_VALUE; + return PARSER_JSON_INVALID; } parser_error_t json_matchArbitraryKeyValue(const parsed_json_t *parsedJson, @@ -587,7 +584,7 @@ parser_error_t _countArgumentItems(const flow_argument_list_t *v, void checkAddressUsedInTx() { addressUsedInTx = 0; uint16_t authCount = parser_tx_obj.authorizers.authorizer_count; - for (uint16_t i = 0; i < (uint16_t) (authCount + 2); i++) { //+2 for proposer and payer + for (uint16_t i = 0; i < (uint16_t)(authCount + 2); i++) { //+2 for proposer and payer parser_context_t *ctx = &parser_tx_obj.payer.ctx; if (i == authCount) ctx = &parser_tx_obj.proposalKeyAddress.ctx; if (i < authCount) ctx = &parser_tx_obj.authorizers.authorizer[i].ctx; diff --git a/unit-tests/parser.c b/unit-tests/parser.c index 5d0af257..d7f8ba06 100644 --- a/unit-tests/parser.c +++ b/unit-tests/parser.c @@ -1,18 +1,18 @@ /******************************************************************************* -* (c) 2020 Zondax GmbH -* -* Licensed under the Apache License, Version 2.0 (the "License"); -* you may not use this file except in compliance with the License. -* You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -********************************************************************************/ + * (c) 2020 Zondax GmbH + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + ********************************************************************************/ #include #include @@ -26,20 +26,64 @@ #include "json/json_parser.h" #include "parser_tx.h" -const char * token2 = "{\"type\":\"Optional\",\"value\":null}"; -const char* token3 = "{\"type\":\"Optional\",\"value\":{\"type\":\"UFix64\",\"value\":\"545.77\"}}"; - -const char* token4 = "{\"type\":\"Optional\",\"value\":{\"type\": \"Array\",\"value\":" - "[{\"type\":\"String\",\"value\":\"f845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}]}}"; -const char* token5 = "{\"type\":\"Optional\",\"value\":{\"type\": \"Array\",\"value\":" - "[{\"type\":\"String\",\"value\":\"e845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}," - "{\"type\":\"String\",\"value\":\"d845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}]}}"; -const char* token6 = "{\"type\":\"UFix64\",\"value\":\"545.77\"}"; -const char* token7 = "{\"type\": \"Array\",\"value\":" - "[{\"type\":\"String\",\"value\":\"e845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}," - "{\"type\":\"String\",\"value\":\"d845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}]}"; +const char *token2 = "{\"type\":\"Optional\",\"value\":null}"; +const char *token3 = "{\"type\":\"Optional\",\"value\":{\"type\":\"UFix64\",\"value\":\"545.77\"}}"; + +const char *token4 = + "{\"type\":\"Optional\",\"value\":{\"type\": \"Array\",\"value\":" + "[{\"type\":\"String\",\"value\":" + "\"f845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}]}}"; +const char *token5 = + "{\"type\":\"Optional\",\"value\":{\"type\": \"Array\",\"value\":" + "[{\"type\":\"String\",\"value\":" + "\"e845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}," + "{\"type\":\"String\",\"value\":" + "\"d845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}]}}"; +const char *token6 = "{\"type\":\"UFix64\",\"value\":\"545.77\"}"; +const char *token7 = + "{\"type\": \"Array\",\"value\":" + "[{\"type\":\"String\",\"value\":" + "\"e845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}," + "{\"type\":\"String\",\"value\":" + "\"d845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}]}"; + +const char *token2b = "{\"value\":null,\"type\":\"Optional\"}"; +const char *token3b = + "{\"value\":{\"value\":\"545.77\",\"type\":\"UFix64\"},\"type\":\"Optional\"}"; + +const char *token4b = + "{\"value\":{\"type\": \"Array\",\"value\":" + "[{\"value\":" + "\"f845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\",\"type\":\"String\"}]}," + "\"type\":\"Optional\"}"; +const char *token5b = + "{\"value\":{\"type\": \"Array\",\"value\":" + "[{\"value\":" + "\"e845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\",\"type\":\"String\"}," + "{\"value\":" + "\"d845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\",\"type\":\"String\"}]}," + "\"type\":\"Optional\"}"; +const char *token6b = "{\"value\":\"545.77\",\"type\":\"UFix64\"}"; +const char *token7b = + "{\"value\":" + "[{\"type\":\"String\",\"value\":" + "\"e845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}," + "{\"type\":\"String\",\"value\":" + "\"d845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb29feaeb4559fdb71a97e2fd0438565310e87670035d83bc10fe67" + "fe314dba5363c81654595d64884b1ecad1512a64e65e020164\"}]," + "\"type\": \"Array\"}"; flow_argument_list_t arg_list; +flow_argument_list_t arg_list_b; void createArgList() { const parser_context_t context0; @@ -49,66 +93,129 @@ void createArgList() { const parser_context_t context5 = {(const uint8_t *) token5, strlen(token5), 0}; const parser_context_t context6 = {(const uint8_t *) token6, strlen(token6), 0}; const parser_context_t context7 = {(const uint8_t *) token7, strlen(token7), 0}; - flow_argument_list_t new_arg_list = {context0, {context2, context3, context4, context5, context6, context7}, 6}; + flow_argument_list_t new_arg_list = { + context0, + {context2, context3, context4, context5, context6, context7}, + 6}; memcpy(&arg_list, &new_arg_list, sizeof(arg_list)); -} + const parser_context_t context0b; + const parser_context_t context2b = {(const uint8_t *) token2b, strlen(token2b), 0}; + const parser_context_t context3b = {(const uint8_t *) token3b, strlen(token3b), 0}; + const parser_context_t context4b = {(const uint8_t *) token4b, strlen(token4b), 0}; + const parser_context_t context5b = {(const uint8_t *) token5b, strlen(token5b), 0}; + const parser_context_t context6b = {(const uint8_t *) token6b, strlen(token6b), 0}; + const parser_context_t context7b = {(const uint8_t *) token7b, strlen(token7b), 0}; + flow_argument_list_t new_arg_list_b = { + context0b, + {context2b, context3b, context4b, context5b, context6b, context7b}, + 6}; + memcpy(&arg_list_b, &new_arg_list_b, sizeof(arg_list_b)); +} static void test_printArgument(void **state) { char outValBuf[40]; uint8_t pageCountVar = 0; char ufix64[] = "UFix64"; - parser_error_t err = parser_printArgument(&arg_list, 4, ufix64, JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + parser_error_t err = + parser_printArgument(&arg_list, 4, ufix64, JSMN_STRING, outValBuf, 40, 0, &pageCountVar); assert_int_equal(err, PARSER_OK); - assert_string_equal (outValBuf, "545.77"); + assert_string_equal(outValBuf, "545.77"); + assert_int_equal(pageCountVar, 1); + + err = + parser_printArgument(&arg_list_b, 4, ufix64, JSMN_STRING, outValBuf, 40, 0, &pageCountVar); + assert_int_equal(err, PARSER_OK); + assert_string_equal(outValBuf, "545.77"); assert_int_equal(pageCountVar, 1); char optional[] = "Optional"; - err = parser_printArgument(&arg_list, 4, optional, JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + err = + parser_printArgument(&arg_list, 4, optional, JSMN_STRING, outValBuf, 40, 0, &pageCountVar); assert_int_equal(err, PARSER_UNEXPECTED_VALUE); - err = parser_printArgument(&arg_list, 0, optional, JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); - assert_int_equal(err, PARSER_UNEXPECTED_NUMBER_ITEMS); + err = + parser_printArgument(&arg_list, 0, optional, JSMN_STRING, outValBuf, 40, 0, &pageCountVar); + assert_int_equal(err, PARSER_JSON_INVALID); } static void test_printArgumentArray(void **state) { char outValBuf[40]; uint8_t pageCountVar = 0; - parser_error_t err = parser_printArgumentArray(&arg_list, 5, 0, "String", JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + parser_error_t err = parser_printArgumentArray(&arg_list, + 5, + 0, + "String", + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_OK); assert_int_equal(pageCountVar, 4); - assert_string_equal (outValBuf, "e845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb"); + assert_string_equal(outValBuf, "e845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb"); pageCountVar = 0; - err = parser_printArgumentArray(&arg_list, 5, 0, "String", JSMN_STRING, - outValBuf, 40, 1, &pageCountVar); + err = parser_printArgumentArray(&arg_list, + 5, + 0, + "String", + JSMN_STRING, + outValBuf, + 40, + 1, + &pageCountVar); assert_int_equal(err, PARSER_OK); assert_int_equal(pageCountVar, 4); - assert_string_equal (outValBuf, "29feaeb4559fdb71a97e2fd0438565310e87670"); + assert_string_equal(outValBuf, "29feaeb4559fdb71a97e2fd0438565310e87670"); pageCountVar = 0; - err = parser_printArgumentArray(&arg_list, 5, 1, "String", JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + err = parser_printArgumentArray(&arg_list, + 5, + 1, + "String", + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_OK); assert_int_equal(pageCountVar, 4); - assert_string_equal (outValBuf, "d845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb"); - - err = parser_printArgumentArray(&arg_list, 5, 2, "String", JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + assert_string_equal(outValBuf, "d845b8406e4f43f79d3c1d8cacb3d5f3e7aeedb"); + + err = parser_printArgumentArray(&arg_list, + 5, + 2, + "String", + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_UNEXPECTED_NUMBER_ITEMS); - err = parser_printArgumentArray(&arg_list, 5, 1, "String", JSMN_STRING, - outValBuf, 40, 6, &pageCountVar); + err = parser_printArgumentArray(&arg_list, + 5, + 1, + "String", + JSMN_STRING, + outValBuf, + 40, + 6, + &pageCountVar); assert_int_equal(err, PARSER_DISPLAY_PAGE_OUT_OF_RANGE); - err = parser_printArgumentArray(&arg_list, 2, 0, "String", JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + err = parser_printArgumentArray(&arg_list, + 2, + 0, + "String", + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_UNEXPECTED_VALUE); } @@ -117,70 +224,130 @@ static void test_printOptionalArgument(void **state) { uint8_t pageCountVar = 0; char ufix64[] = "UFix64"; - parser_error_t err = parser_printOptionalArgument(&arg_list, 0, ufix64, JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + parser_error_t err = parser_printOptionalArgument(&arg_list, + 0, + ufix64, + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); + assert_int_equal(err, PARSER_OK); + assert_int_equal(pageCountVar, 1); + assert_string_equal(outValBuf, "None"); + + err = parser_printOptionalArgument(&arg_list, + 1, + ufix64, + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_OK); + assert_string_equal(outValBuf, "545.77"); assert_int_equal(pageCountVar, 1); - assert_string_equal (outValBuf, "None"); - err = parser_printOptionalArgument(&arg_list, 1, ufix64, JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + err = parser_printOptionalArgument(&arg_list_b, + 0, + ufix64, + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_OK); - assert_string_equal (outValBuf, "545.77"); + assert_int_equal(pageCountVar, 1); + assert_string_equal(outValBuf, "None"); + + err = parser_printOptionalArgument(&arg_list_b, + 1, + ufix64, + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); + assert_int_equal(err, PARSER_OK); + assert_string_equal(outValBuf, "545.77"); assert_int_equal(pageCountVar, 1); - err = parser_printOptionalArgument(&arg_list, 4, ufix64, JSMN_STRING, - outValBuf, 40, 0, &pageCountVar); + err = parser_printOptionalArgument(&arg_list, + 4, + ufix64, + JSMN_STRING, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_UNEXPECTED_VALUE); } - static void test_printArbitraryArgument(void **state) { char outKeyBuf[20]; char outValBuf[40]; uint8_t pageCountVar = 0; - parser_error_t err = parser_printArbitraryArgument(&arg_list, 0, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); + parser_error_t err = + parser_printArbitraryArgument(&arg_list, 0, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); assert_int_equal(err, PARSER_OK); assert_int_equal(pageCountVar, 1); - assert_string_equal (outKeyBuf, "1: Optional"); - assert_string_equal (outValBuf, "null"); + assert_string_equal(outKeyBuf, "1: Optional"); + assert_string_equal(outValBuf, "null"); pageCountVar = 0; - err = parser_printArbitraryArgument(&arg_list, 1, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); + err = parser_printArbitraryArgument(&arg_list_b, + 1, + outKeyBuf, + 40, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_OK); assert_int_equal(pageCountVar, 1); - assert_string_equal (outKeyBuf, "2: Optional"); - assert_string_equal (outValBuf, "{\"type\":\"UFix64\",\"value\":\"545.77\"}"); + assert_string_equal(outKeyBuf, "2: Optional"); + assert_string_equal(outValBuf, "{\"value\":\"545.77\",\"type\":\"UFix64\"}"); pageCountVar = 0; - err = parser_printArbitraryArgument(&arg_list, 2, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); + err = + parser_printArbitraryArgument(&arg_list, 2, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); assert_int_equal(err, PARSER_OK); - assert_string_equal (outKeyBuf, "3: Optional"); - assert_string_equal (outValBuf, "{\"type\": \"Array\",\"value\":[{\"type\":\"Stri"); + assert_string_equal(outKeyBuf, "3: Optional"); + assert_string_equal(outValBuf, "{\"type\": \"Array\",\"value\":[{\"type\":\"Stri"); - err = parser_printArbitraryArgument(&arg_list, 2, outKeyBuf, 40, outValBuf, 40, 1, &pageCountVar); + err = + parser_printArbitraryArgument(&arg_list, 2, outKeyBuf, 40, outValBuf, 40, 1, &pageCountVar); assert_int_equal(err, PARSER_OK); - assert_string_equal (outKeyBuf, "3: Optional"); - assert_string_equal (outValBuf, "ng\",\"value\":\"f845b8406e4f43f79d3c1d8cac"); + assert_string_equal(outKeyBuf, "3: Optional"); + assert_string_equal(outValBuf, "ng\",\"value\":\"f845b8406e4f43f79d3c1d8cac"); pageCountVar = 0; - err = parser_printArbitraryArgument(&arg_list, 3, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); + err = + parser_printArbitraryArgument(&arg_list, 3, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); assert_int_equal(err, PARSER_OK); - assert_string_equal (outKeyBuf, "4: Optional"); - assert_string_equal (outValBuf, ""); + assert_string_equal(outKeyBuf, "4: Optional"); + assert_string_equal(outValBuf, ""); pageCountVar = 0; - err = parser_printArbitraryArgument(&arg_list, 4, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); + err = + parser_printArbitraryArgument(&arg_list, 4, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); assert_int_equal(err, PARSER_OK); - assert_string_equal (outKeyBuf, "5: UFix64"); - assert_string_equal (outValBuf, "545.77"); + assert_string_equal(outKeyBuf, "5: UFix64"); + assert_string_equal(outValBuf, "545.77"); pageCountVar = 0; - err = parser_printArbitraryArgument(&arg_list, 5, outKeyBuf, 40, outValBuf, 40, 0, &pageCountVar); + err = parser_printArbitraryArgument(&arg_list_b, + 5, + outKeyBuf, + 40, + outValBuf, + 40, + 0, + &pageCountVar); assert_int_equal(err, PARSER_OK); - assert_string_equal (outKeyBuf, "6: Array"); - assert_string_equal (outValBuf, ""); + assert_string_equal(outKeyBuf, "6: Array"); + assert_string_equal(outValBuf, ""); } int main() {