diff --git a/src/lua/argparse.lua b/src/lua/argparse.lua index 1471d58460970f50260f2317772ae1545dc57c1b..8dae388b1e82ec7fac9d8cbfabcaa380cf987413 100644 --- a/src/lua/argparse.lua +++ b/src/lua/argparse.lua @@ -20,14 +20,21 @@ local function result_set_add(t_out, key, val) end end +local function err_bad_parameter_value(name, got, expected) + if type(got) ~= 'string' then + got = 'nothing' + else + got = string.format('"%s"', got) + end + error(string.format('Bad value for parameter "%s". Expected %s, got %s', + name, expected, got)) +end + local function convert_parameter_simple(name, convert_from, convert_to) if convert_to == 'number' then local converted = tonumber(convert_from) if converted == nil then - error( - ('Bad value for parameter %s. expected type %s, got "%s"') - :format(name, convert_to, convert_from) - ) + return err_bad_parameter_value(name, convert_from, convert_to) end return converted elseif convert_to == 'boolean' then @@ -41,20 +48,14 @@ local function convert_parameter_simple(name, convert_from, convert_to) if convert_from == '1' or convert_from == 'true' then return true end - error( - ('Bad input for parameter "%s". Expected boolean, got "%s"') - :format(name, convert_from) - ) + return err_bad_parameter_value(name, convert_from, convert_to) elseif convert_to == 'string' then if type(convert_from) ~= 'string' then - error( - ('Bad input for parameter "%s". Expected string, got "%s"') - :format(name, convert_from) - ) + return err_bad_parameter_value(name, convert_from, convert_to) end else error( - ('Bad convertion format "%s" provided for %s') + ('Bad conversion format "%s" provided for %s') :format(convert_to, name) ) end diff --git a/test/app/argparse.result b/test/app/argparse.result index d57693bc2661b3efe77b12c5114044ae71a4f5ad..04f0439996a34025491345ec1a807ff7e39bab01 100644 --- a/test/app/argparse.result +++ b/test/app/argparse.result @@ -137,12 +137,12 @@ argparse({'--verh=42'}, {'verh'}) ... argparse({'--verh=42'}, {{'verh', 'boolean'}}) --- -- error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "verh". Expected +- error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "verh". Expected boolean, got "42"' ... argparse({'--verh=42'}, {{'verh', 'boolean+'}}) --- -- error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "verh". Expected +- error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "verh". Expected boolean, got "42"' ... argparse({'--verh=42'}, {'niz'}) diff --git a/test/app/gh-4076-argparse-wrong-bool-handling.result b/test/app/gh-4076-argparse-wrong-bool-handling.result index 91895b9ed986db9eadd72d7674c16b6730420fec..fd933a37dc7f7f63c9d7678dda78d68e023142bf 100644 --- a/test/app/gh-4076-argparse-wrong-bool-handling.result +++ b/test/app/gh-4076-argparse-wrong-bool-handling.result @@ -48,10 +48,36 @@ args = {'--flag1', 'abc'} | ... argparse(args, params) | --- - | - error: 'builtin/internal.argparse.lua:<line>"]: Bad input for parameter "flag1". Expected + | - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "flag1". Expected | boolean, got "abc"' | ... +-- +-- When parameter value was omitted, it was replaced internally +-- with boolean true, and sometimes was showed in error messages. +-- Now it is 'nothing'. +-- +params = {} + | --- + | ... +params[1] = {'value', 'number'} + | --- + | ... +argparse({'--value'}, params) + | --- + | - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "value". Expected + | number, got nothing' + | ... + +params[1][2] = 'string' + | --- + | ... +argparse({'--value'}, params) + | --- + | - error: 'builtin/internal.argparse.lua:<line>"]: Bad value for parameter "value". Expected + | string, got nothing' + | ... + test_run:cmd("clear filter") | --- | - true diff --git a/test/app/gh-4076-argparse-wrong-bool-handling.test.lua b/test/app/gh-4076-argparse-wrong-bool-handling.test.lua index abd6c6927a115fdbf86ba0e8201e908abad0ffa6..a8ee5e67037473309a0d334e1a37fb21bd1910f4 100644 --- a/test/app/gh-4076-argparse-wrong-bool-handling.test.lua +++ b/test/app/gh-4076-argparse-wrong-bool-handling.test.lua @@ -17,4 +17,16 @@ argparse(args, params) args = {'--flag1', 'abc'} argparse(args, params) +-- +-- When parameter value was omitted, it was replaced internally +-- with boolean true, and sometimes was showed in error messages. +-- Now it is 'nothing'. +-- +params = {} +params[1] = {'value', 'number'} +argparse({'--value'}, params) + +params[1][2] = 'string' +argparse({'--value'}, params) + test_run:cmd("clear filter")