From 00a7d8d6e6125c171c46190bdb40ecaa08347cca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Mon, 31 Oct 2016 19:30:26 +0200 Subject: Add a check for mandatory name section for man pages --- src/asciideck_to_manpage.erl | 9 +++++++++ test/man_SUITE.erl | 29 +++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 test/man_SUITE.erl diff --git a/src/asciideck_to_manpage.erl b/src/asciideck_to_manpage.erl index 47eb932..fffd250 100644 --- a/src/asciideck_to_manpage.erl +++ b/src/asciideck_to_manpage.erl @@ -33,6 +33,7 @@ translate(AST, Opts) -> end. translate_man([{title, #{level := 0}, Title0, _Ann}|AST], Opts) -> + ensure_name_section(AST), [Title, << Section:1/binary, _/bits >>] = binary:split(Title0, <<"(">>), Extra1 = maps:get(extra1, Opts, today()), Extra2 = maps:get(extra2, Opts, ""), @@ -44,6 +45,14 @@ translate_man([{title, #{level := 0}, Title0, _Ann}|AST], Opts) -> man(AST, []) ]}. +ensure_name_section([{title, #{level := 1}, Title, _}|_]) -> + case string:to_lower(string:strip(binary_to_list(Title))) of + "name" -> ok; + _ -> error(badarg) + end; +ensure_name_section(_) -> + error(badarg). + today() -> {{Y, M, D}, _} = calendar:universal_time(), io_lib:format("~b-~2.10.0b-~2.10.0b", [Y, M, D]). diff --git a/test/man_SUITE.erl b/test/man_SUITE.erl new file mode 100644 index 0000000..30eec4f --- /dev/null +++ b/test/man_SUITE.erl @@ -0,0 +1,29 @@ +%% Copyright (c) 2016, Loïc Hoguin +%% +%% Permission to use, copy, modify, and/or distribute this software for any +%% purpose with or without fee is hereby granted, provided that the above +%% copyright notice and this permission notice appear in all copies. +%% +%% THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +%% WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +%% MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +%% ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +%% WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +%% ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +%% OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +-module(man_SUITE). +-compile(export_all). + +-import(ct_helper, [doc/1]). + +all() -> + ct_helper:all(?MODULE). + +%% @todo We should try to see if it accepts all valid AST. +%% @todo Test all options. + +missing_name_section(_) -> + AST = asciideck:parse("= missing_name(3)\n\n== Not name\n\nFail!"), + {'EXIT', _} = (catch asciideck:to_manpage(AST)), + ok. -- cgit v1.2.3