Compare commits

..

11 Commits

Author SHA1 Message Date
Juan Jose Comellas 838e67fa8d Merge pull request #49 from suprematic/fix-tests-erlang-18
Fix tests for Erlang < 20
2021-02-15 19:53:19 -03:00
Simon Skorokhodov 8b328c666b Fix tests for Erlang < 20 2021-01-18 10:47:26 +01:00
Juan Jose Comellas 1c963cecd7 Bump version to 1.0.2 2020-08-29 11:22:23 -03:00
Juan Jose Comellas fa37a75d8c Merge pull request #46 from lukebakken/lrb-use-standard-license-text
Use the standard 3-clause BSD license text
2020-08-18 23:59:43 -03:00
Luke Bakken 105004ce3a Use the standard 3-clause BSD license text
I copied the text from here:

https://opensource.org/licenses/BSD-3-Clause

This resolves an issue we are having with getting RabbitMQ dependency
licenses discovered by the "LicenseFinder" tool:

https://github.com/pivotal/LicenseFinder/issues/768
2020-08-18 09:08:10 -07:00
Juan Jose Comellas 13676822ad Merge pull request #45 from szTheory/patch-1
README erlang syntax highlighting fix
2020-03-04 19:04:15 +01:00
szTheory 7003ec0e4b README erlang syntax highlighting fix 2020-03-04 16:26:07 +00:00
Juan Jose Comellas 784b0ea877 Merge pull request #42 from suprematic/master
Format "missing option argument" error
2018-03-24 20:48:59 -03:00
Simon Skorokhodov fe997f2f6f extend format_error/2 to handle missing_option_arg 2018-03-17 18:46:13 +01:00
Juan Jose Comellas 8e87599e1c Merge pull request #41 from puzza007/travisci
Travis CI
2018-03-07 16:46:47 -03:00
Paul Oliver 41564e7b47 Travis CI 2018-03-08 07:55:58 +13:00
7 changed files with 77 additions and 32 deletions
+1
View File
@@ -0,0 +1 @@
/_build
+11
View File
@@ -0,0 +1,11 @@
language: erlang
otp_release:
- R13B04
- R14B04
- R15B03
- R16B03
- 17.5
- 18.3
- 19.3
- 20.0
+7 -8
View File
@@ -1,18 +1,17 @@
Copyright (c) 2009 Juan Jose Comellas Copyright 2009 Juan Jose Comellas
All rights reserved.
Redistribution and use in source and binary forms, with or without modification, Redistribution and use in source and binary forms, with or without
are permitted provided that the following conditions are met: modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this 1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer. list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, 2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution. and/or other materials provided with the distribution.
- Neither the name of Juan Jose Comellas nor the names of its contributors may 3. Neither the name of the copyright holder nor the names of its contributors
be used to endorse or promote products derived from this software without may be used to endorse or promote products derived from this software without
specific prior written permission. specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+2 -2
View File
@@ -24,10 +24,10 @@ To build the (very) limited documentation run `rebar edoc`.
To use getopt in your project you can just add it as a dependency in your To use getopt in your project you can just add it as a dependency in your
`rebar.config` file in the following way: `rebar.config` file in the following way:
```sh ```erlang
{deps, {deps,
[ [
{getopt, "1.0.1"} {getopt, "1.0.2"}
] ]
} }
``` ```
+1 -2
View File
@@ -1,7 +1,6 @@
%% -*- mode: Erlang; fill-column: 75; comment-column: 50; -*-
{application,getopt, {application,getopt,
[{description,"Command-line options parser for Erlang"}, [{description,"Command-line options parser for Erlang"},
{vsn, "1.0.1"}, {vsn,"1.0.2"},
{modules,[]}, {modules,[]},
{registered,[]}, {registered,[]},
{maintainers,["Juan Jose Comellas"]}, {maintainers,["Juan Jose Comellas"]},
+13 -6
View File
@@ -149,12 +149,7 @@ parse(OptSpecList, OptAcc, ArgAcc, _ArgPos, []) ->
format_error(OptSpecList, {error, Reason}) -> format_error(OptSpecList, {error, Reason}) ->
format_error(OptSpecList, Reason); format_error(OptSpecList, Reason);
format_error(OptSpecList, {missing_required_option, Name}) -> format_error(OptSpecList, {missing_required_option, Name}) ->
OptStr = case lists:keyfind(Name, 1, OptSpecList) of OptStr = opt_to_list(lists:keyfind(Name, 1, OptSpecList)),
{Name, undefined, undefined, _Type, _Help} -> ["<", to_string(Name), ">"];
{_Name, undefined, Long, _Type, _Help} -> ["--", Long];
{_Name, Short, undefined, _Type, _Help} -> ["-", Short];
{_Name, Short, Long, _Type, _Help} -> ["-", Short, " (", Long, ")"]
end,
lists:flatten(["missing required option: ", OptStr]); lists:flatten(["missing required option: ", OptStr]);
format_error(_OptSpecList, {invalid_option, OptStr}) -> format_error(_OptSpecList, {invalid_option, OptStr}) ->
lists:flatten(["invalid option: ", to_string(OptStr)]); lists:flatten(["invalid option: ", to_string(OptStr)]);
@@ -162,9 +157,21 @@ format_error(_OptSpecList, {invalid_option_arg, {Name, Arg}}) ->
lists:flatten(["option \'", to_string(Name) ++ "\' has invalid argument: ", to_string(Arg)]); lists:flatten(["option \'", to_string(Name) ++ "\' has invalid argument: ", to_string(Arg)]);
format_error(_OptSpecList, {invalid_option_arg, OptStr}) -> format_error(_OptSpecList, {invalid_option_arg, OptStr}) ->
lists:flatten(["invalid option argument: ", to_string(OptStr)]); lists:flatten(["invalid option argument: ", to_string(OptStr)]);
format_error(OptSpecList, {missing_option_arg, Name}) ->
OptStr = opt_to_list(lists:keyfind(Name, 1, OptSpecList)),
lists:flatten(["missing option argument: ", OptStr, " <", to_string(Name), $>]);
format_error(_OptSpecList, {Reason, Data}) -> format_error(_OptSpecList, {Reason, Data}) ->
lists:flatten([to_string(Reason), " ", to_string(Data)]). lists:flatten([to_string(Reason), " ", to_string(Data)]).
opt_to_list({Name, undefined, undefined, _Type, _Help}) ->
[$<, to_string(Name), $>];
opt_to_list({_Name, undefined, Long, _Type, _Help}) ->
[$-, $-, Long];
opt_to_list({_Name, Short, undefined, _Type, _Help}) ->
[$-, Short];
opt_to_list({_Name, Short, Long, _Type, _Help}) ->
[$-, Short, $\s, $(, Long, $)].
%% @doc Parse a long option, add it to the option accumulator and continue %% @doc Parse a long option, add it to the option accumulator and continue
%% parsing the rest of the arguments recursively. %% parsing the rest of the arguments recursively.
+30 -2
View File
@@ -298,6 +298,19 @@ check_test_() ->
?_assertEqual({error, {missing_required_option, arg}}, check(OptSpecList, Opts))}, ?_assertEqual({error, {missing_required_option, arg}}, check(OptSpecList, Opts))},
{"Parse arguments and check required options", {"Parse arguments and check required options",
?_assertEqual({error, {missing_required_option, arg}}, parse_and_check(OptSpecList, ""))}, ?_assertEqual({error, {missing_required_option, arg}}, parse_and_check(OptSpecList, ""))},
{"Parse arguments and check required option args",
?_assertEqual({error, {missing_option_arg, arg}},
parse_and_check(OptSpecList, "-a"))}].
format_error_test_() ->
OptSpecList =
[
{ arg, $a, "arg", string, "Required arg"},
{ short, $s, undefined, string, "short option"},
{ long, undefined, "long", string, "long option"},
{ other, undefined, undefined, string, "task"}
],
[
{"Format missing option error test 1", {"Format missing option error test 1",
?_assertEqual("missing required option: -a (arg)", ?_assertEqual("missing required option: -a (arg)",
format_error(OptSpecList, {error, {missing_required_option, arg}}))}, format_error(OptSpecList, {error, {missing_required_option, arg}}))},
@@ -321,7 +334,21 @@ check_test_() ->
format_error(OptSpecList, {error, {invalid_option_arg, "arg_value"}}))}, format_error(OptSpecList, {error, {invalid_option_arg, "arg_value"}}))},
{"Format invalid option argument error test 2", {"Format invalid option argument error test 2",
?_assertEqual("option 'verbose' has invalid argument: 100", ?_assertEqual("option 'verbose' has invalid argument: 100",
format_error(OptSpecList, {error, {invalid_option_arg, {verbose, "100"}}}))} format_error(OptSpecList, {error, {invalid_option_arg, {verbose, "100"}}}))},
{"Format missing option argument error test 1",
?_assertEqual("missing option argument: -a (arg) <arg>",
format_error(OptSpecList, {error, {missing_option_arg, arg}}))},
{"Format missing option argument error test 2",
?_assertEqual("missing option argument: -a (arg) <arg>",
format_error(OptSpecList, {missing_option_arg, arg}))},
{"Format missing option argument error test 3",
?_assertEqual("missing option argument: -s <short>",
format_error(OptSpecList, {missing_option_arg, short}))},
{"Format missing option argument error test 4",
?_assertEqual("missing option argument: --long <long>",
format_error(OptSpecList, {missing_option_arg, long}))},
{"Format missing option argument error test 5",
?_assertError(_, format_error(OptSpecList, {missing_option_arg, unknown}))}
]. ].
utf8_binary_test_() -> utf8_binary_test_() ->
@@ -330,6 +357,7 @@ utf8_binary_test_() ->
Utf8 = unicode:characters_to_binary(Unicode), Utf8 = unicode:characters_to_binary(Unicode),
io:setopts(standard_error, [{encoding, utf8}]), io:setopts(standard_error, [{encoding, utf8}]),
OptSpecsWithDefault = [{utf8, undefined, "utf8", {utf8_binary, Utf8}, "UTF-8 arg"}], OptSpecsWithDefault = [{utf8, undefined, "utf8", {utf8_binary, Utf8}, "UTF-8 arg"}],
UsageBin = unicode:characters_to_binary(getopt:usage_options(OptSpecsWithDefault)),
[{"Empty utf8_binary argument", [{"Empty utf8_binary argument",
?_assertEqual({ok, {[{utf8, <<>>}], []}}, parse(OptSpecList, ["--utf8", ""]))}, ?_assertEqual({ok, {[{utf8, <<>>}], []}}, parse(OptSpecList, ["--utf8", ""]))},
{"Non empty utf8_binary argument", {"Non empty utf8_binary argument",
@@ -337,4 +365,4 @@ utf8_binary_test_() ->
{"Default utf8_binary argument", {"Default utf8_binary argument",
?_assertEqual({ok, {[{utf8, Utf8}], []}}, parse(OptSpecsWithDefault, []))}, ?_assertEqual({ok, {[{utf8, Utf8}], []}}, parse(OptSpecsWithDefault, []))},
{"Default utf8_binary argument usage", {"Default utf8_binary argument usage",
?_assert(is_list(string:find(getopt:usage_options(OptSpecsWithDefault), Unicode)))}]. ?_assertEqual(1, length(binary:matches(UsageBin, Utf8)))}].