From: Roman Khabibov <roman.habibov@tarantool.org> To: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH 1/2] json: make error messages more readable Date: Fri, 9 Oct 2020 00:59:55 +0300 [thread overview] Message-ID: <20201008215956.93983-2-roman.habibov@tarantool.org> (raw) In-Reply-To: <20201008215956.93983-1-roman.habibov@tarantool.org> Print tokens themselves instead of token names "T_*" in the error messages. Part of #4339 --- test/app-tap/json.test.lua | 32 +++++++++++++++++++++++++- third_party/lua-cjson/lua_cjson.c | 38 +++++++++++++++---------------- 2 files changed, 50 insertions(+), 20 deletions(-) diff --git a/test/app-tap/json.test.lua b/test/app-tap/json.test.lua index fadfc74ec..6d511e686 100755 --- a/test/app-tap/json.test.lua +++ b/test/app-tap/json.test.lua @@ -22,7 +22,7 @@ end tap.test("json", function(test) local serializer = require('json') - test:plan(40) + test:plan(51) test:test("unsigned", common.test_unsigned, serializer) test:test("signed", common.test_signed, serializer) @@ -154,4 +154,34 @@ tap.test("json", function(test) _, err_msg = pcall(serializer.decode, '{"hello": "world",\n 100: 200}') test:ok(string.find(err_msg, 'line 2 at character 2') ~= nil, 'mistake on second line') + + -- + -- gh-4339: Make sure that tokens 'T_*' are absent in error + -- messages and a context is printed. + -- + _, err_msg = pcall(serializer.decode, '{{: "world"}') + test:ok(string.find(err_msg, '\'{\'') ~= nil, '"{" instead of T_OBJ_BEGIN') + _, err_msg = pcall(serializer.decode, '{"a": "world"}}') + test:ok(string.find(err_msg, '\'}\'') ~= nil, '"}" instead of T_OBJ_END') + _, err_msg = pcall(serializer.decode, '{[: "world"}') + test:ok(string.find(err_msg, '\'[\'', 1, true) ~= nil, + '"[" instead of T_ARR_BEGIN') + _, err_msg = pcall(serializer.decode, '{]: "world"}') + test:ok(string.find(err_msg, '\']\'', 1, true) ~= nil, + '"]" instead of T_ARR_END') + _, err_msg = pcall(serializer.decode, '{1: "world"}') + test:ok(string.find(err_msg, 'int') ~= nil, 'int instead of T_INT') + _, err_msg = pcall(serializer.decode, '{1.0: "world"}') + test:ok(string.find(err_msg, 'number') ~= nil, 'number instead of T_NUMBER') + _, err_msg = pcall(serializer.decode, '{true: "world"}') + test:ok(string.find(err_msg, 'boolean') ~= nil, + 'boolean instead of T_BOOLEAN') + _, err_msg = pcall(serializer.decode, '{null: "world"}') + test:ok(string.find(err_msg, 'null') ~= nil, 'null instead of T_NULL') + _, err_msg = pcall(serializer.decode, '{:: "world"}') + test:ok(string.find(err_msg, 'colon') ~= nil, 'colon instead of T_COLON') + _, err_msg = pcall(serializer.decode, '{,: "world"}') + test:ok(string.find(err_msg, 'comma') ~= nil, 'comma instead of T_COMMA') + _, err_msg = pcall(serializer.decode, '{') + test:ok(string.find(err_msg, 'end') ~= nil, 'end instead of T_END') end) diff --git a/third_party/lua-cjson/lua_cjson.c b/third_party/lua-cjson/lua_cjson.c index d4b89ce0d..33cf30577 100644 --- a/third_party/lua-cjson/lua_cjson.c +++ b/third_party/lua-cjson/lua_cjson.c @@ -75,23 +75,23 @@ typedef enum { } json_token_type_t; static const char *json_token_type_name[] = { - "T_OBJ_BEGIN", - "T_OBJ_END", - "T_ARR_BEGIN", - "T_ARR_END", - "T_STRING", - "T_UINT", - "T_INT", - "T_NUMBER", - "T_BOOLEAN", - "T_NULL", - "T_COLON", - "T_COMMA", - "T_END", - "T_WHITESPACE", - "T_LINEFEED", - "T_ERROR", - "T_UNKNOWN", + "'{'", + "'}'", + "'['", + "']'", + "string", + "unsigned int", + "int", + "number", + "boolean", + "null", + "colon", + "comma", + "end", + "whitespace", + "line feed", + "error", + "unknown symbol", NULL }; @@ -920,7 +920,7 @@ static void json_parse_object_context(lua_State *l, json_parse_t *json) } if (token.type != T_COMMA) - json_throw_parse_error(l, json, "comma or object end", &token); + json_throw_parse_error(l, json, "comma or '}'", &token); json_next_token(json, &token); } @@ -960,7 +960,7 @@ static void json_parse_array_context(lua_State *l, json_parse_t *json) } if (token.type != T_COMMA) - json_throw_parse_error(l, json, "comma or array end", &token); + json_throw_parse_error(l, json, "comma or ']'", &token); json_next_token(json, &token); } -- 2.24.3 (Apple Git-128)
next prev parent reply other threads:[~2020-10-08 21:59 UTC|newest] Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-08 21:59 [Tarantool-patches] [PATCH 0/2] Improve json error message Roman Khabibov 2020-10-08 21:59 ` Roman Khabibov [this message] 2020-10-12 8:52 ` [Tarantool-patches] [PATCH 1/2] json: make error messages more readable Leonid Vasiliev 2020-10-08 21:59 ` [Tarantool-patches] [PATCH 2/2] json: print context in error mesages Roman Khabibov 2020-10-12 9:20 ` Leonid Vasiliev 2020-11-03 9:53 ` roman 2020-11-09 21:21 ` Leonid Vasiliev 2020-10-12 8:51 ` [Tarantool-patches] [PATCH 0/2] Improve json error message Leonid Vasiliev 2020-11-03 10:01 ` roman 2020-11-09 21:22 ` Leonid Vasiliev 2020-11-05 15:44 ` roman 2020-11-12 14:03 ` Alexander V. Tikhonov 2020-11-26 9:46 ` Kirill Yukhin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20201008215956.93983-2-roman.habibov@tarantool.org \ --to=roman.habibov@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH 1/2] json: make error messages more readable' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox