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
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/_build

11
.travis.yml Normal file
View File

@ -0,0 +1,11 @@
language: erlang
otp_release:
- R13B04
- R14B04
- R15B03
- R16B03
- 17.5
- 18.3
- 19.3
- 20.0

View File

@ -1,19 +1,18 @@
Copyright (c) 2009 Juan Jose Comellas
All rights reserved.
Copyright 2009 Juan Jose Comellas
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
- Neither the name of Juan Jose Comellas nor the names of its contributors may
be used to endorse or promote products derived from this software without
specific prior written permission.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED

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
`rebar.config` file in the following way:
```sh
```erlang
{deps,
[
{getopt, "1.0.1"}
{getopt, "1.0.2"}
]
}
```

View File

@ -1,10 +1,9 @@
%% -*- mode: Erlang; fill-column: 75; comment-column: 50; -*-
{application, getopt,
[{description, "Command-line options parser for Erlang"},
{vsn, "1.0.1"},
{modules, []},
{registered, []},
{maintainers, ["Juan Jose Comellas"]},
{licenses, ["BSD"]},
{links, [{"GitHub", "https://github.com/jcomellas/getopt"}]},
{applications, [kernel, stdlib]}]}.
{application,getopt,
[{description,"Command-line options parser for Erlang"},
{vsn,"1.0.2"},
{modules,[]},
{registered,[]},
{maintainers,["Juan Jose Comellas"]},
{licenses,["BSD"]},
{links,[{"GitHub","https://github.com/jcomellas/getopt"}]},
{applications,[kernel,stdlib]}]}.

View File

@ -149,12 +149,7 @@ parse(OptSpecList, OptAcc, ArgAcc, _ArgPos, []) ->
format_error(OptSpecList, {error, Reason}) ->
format_error(OptSpecList, Reason);
format_error(OptSpecList, {missing_required_option, Name}) ->
OptStr = case lists:keyfind(Name, 1, OptSpecList) of
{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,
OptStr = opt_to_list(lists:keyfind(Name, 1, OptSpecList)),
lists:flatten(["missing required option: ", OptStr]);
format_error(_OptSpecList, {invalid_option, 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)]);
format_error(_OptSpecList, {invalid_option_arg, 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}) ->
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
%% parsing the rest of the arguments recursively.

View File

@ -298,6 +298,19 @@ check_test_() ->
?_assertEqual({error, {missing_required_option, arg}}, check(OptSpecList, Opts))},
{"Parse arguments and check required options",
?_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",
?_assertEqual("missing required option: -a (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 invalid option argument error test 2",
?_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_() ->
@ -330,6 +357,7 @@ utf8_binary_test_() ->
Utf8 = unicode:characters_to_binary(Unicode),
io:setopts(standard_error, [{encoding, utf8}]),
OptSpecsWithDefault = [{utf8, undefined, "utf8", {utf8_binary, Utf8}, "UTF-8 arg"}],
UsageBin = unicode:characters_to_binary(getopt:usage_options(OptSpecsWithDefault)),
[{"Empty utf8_binary argument",
?_assertEqual({ok, {[{utf8, <<>>}], []}}, parse(OptSpecList, ["--utf8", ""]))},
{"Non empty utf8_binary argument",
@ -337,4 +365,4 @@ utf8_binary_test_() ->
{"Default utf8_binary argument",
?_assertEqual({ok, {[{utf8, Utf8}], []}}, parse(OptSpecsWithDefault, []))},
{"Default utf8_binary argument usage",
?_assert(is_list(string:find(getopt:usage_options(OptSpecsWithDefault), Unicode)))}].
?_assertEqual(1, length(binary:matches(UsageBin, Utf8)))}].