|
-module(rebar_edoc_SUITE).
|
|
-include_lib("common_test/include/ct.hrl").
|
|
-include_lib("eunit/include/eunit.hrl").
|
|
-compile(export_all).
|
|
|
|
all() -> [multiapp, multiapp_macros, error_survival].
|
|
|
|
init_per_testcase(multiapp, Config) ->
|
|
application:load(rebar),
|
|
DataDir = ?config(data_dir, Config),
|
|
PrivDir = ?config(priv_dir, Config),
|
|
Name = rebar_test_utils:create_random_name("multiapp"),
|
|
AppsDir = filename:join([PrivDir, rebar_test_utils:create_random_name(Name)]),
|
|
ec_file:copy(filename:join([DataDir, "foo"]), AppsDir, [recursive]),
|
|
Verbosity = rebar3:log_level(),
|
|
rebar_log:init(command_line, Verbosity),
|
|
State = rebar_state:new([{base_dir, filename:join([AppsDir, "_build"])}
|
|
,{root_dir, AppsDir}]),
|
|
[{apps, AppsDir}, {state, State}, {name, Name} | Config];
|
|
init_per_testcase(multiapp_macros, Config) ->
|
|
application:load(rebar),
|
|
DataDir = ?config(data_dir, Config),
|
|
PrivDir = ?config(priv_dir, Config),
|
|
Name = rebar_test_utils:create_random_name("multiapp_macros"),
|
|
AppsDir = filename:join([PrivDir, rebar_test_utils:create_random_name(Name)]),
|
|
ec_file:copy(filename:join([DataDir, "foo"]), AppsDir, [recursive]),
|
|
ok = ec_file:remove(filename:join([AppsDir, "apps", "foo"]), [recursive]),
|
|
Verbosity = rebar3:log_level(),
|
|
rebar_log:init(command_line, Verbosity),
|
|
State = rebar_state:new([{base_dir, filename:join([AppsDir, "_build"])}
|
|
,{root_dir, AppsDir}]),
|
|
[{apps, AppsDir}, {state, State}, {name, Name} | Config];
|
|
init_per_testcase(error_survival, Config) ->
|
|
application:load(rebar),
|
|
DataDir = ?config(data_dir, Config),
|
|
PrivDir = ?config(priv_dir, Config),
|
|
Name = rebar_test_utils:create_random_name("error_survival"),
|
|
AppsDir = filename:join([PrivDir, rebar_test_utils:create_random_name(Name)]),
|
|
ec_file:copy(filename:join([DataDir, "bad"]), AppsDir, [recursive]),
|
|
Verbosity = rebar3:log_level(),
|
|
rebar_log:init(command_line, Verbosity),
|
|
State = rebar_state:new([{base_dir, filename:join([AppsDir, "_build"])}
|
|
,{root_dir, AppsDir}]),
|
|
[{apps, AppsDir}, {state, State}, {name, Name} | Config].
|
|
|
|
end_per_testcase(_, Config) ->
|
|
Config.
|
|
|
|
multiapp(Config) ->
|
|
%% With an empty config (no `dir'), links are being processed
|
|
RebarConfig = [],
|
|
rebar_test_utils:run_and_check(Config, RebarConfig, ["edoc"], {ok, []}),
|
|
%% validate that all doc entries are generated and links work
|
|
AppsDir = ?config(apps, Config),
|
|
ct:pal("AppsDir: ~s", [AppsDir]),
|
|
?assert(file_content_matches(
|
|
filename:join([AppsDir, "apps", "bar1", "doc", "bar1.html"]),
|
|
"barer1")),
|
|
?assert(file_content_matches(
|
|
filename:join([AppsDir, "apps", "bar2", "doc", "bar2.html"]),
|
|
"barer2")),
|
|
%% Links are in place for types
|
|
?assert(file_content_matches(
|
|
filename:join([AppsDir, "apps", "foo", "doc", "foo.html"]),
|
|
"barer1")),
|
|
?assert(file_content_matches(
|
|
filename:join([AppsDir, "apps", "foo", "doc", "foo.html"]),
|
|
"apps/bar1/doc/bar1.html")),
|
|
%% Options such from rebar.config in the app themselves are
|
|
%% respected
|
|
?assert(file_content_matches(
|
|
filename:join([AppsDir, "apps", "foo", "doc", "overview-summary.html"]),
|
|
"foo_custom_title"
|
|
)),
|
|
ok.
|
|
|
|
multiapp_macros(Config) ->
|
|
RebarConfig = [{edoc_opts, [
|
|
preprocess,
|
|
{macros, [{m1, x1}, {m2, x2}]},
|
|
{def, [{d1, "1"}, {d2, "1"}]}
|
|
]}],
|
|
AppConfig = {edoc_opts, [
|
|
{preprocess, true},
|
|
{macros, [{m2, f2}, {m3, f3}]},
|
|
{def, [{d2, "2"}, {d3, "2"}]}
|
|
]},
|
|
DebugModule = "
|
|
-module(debug).
|
|
-ifndef(m1). -define(m1,z1). -endif.
|
|
-ifndef(m2). -define(m2,z2). -endif.
|
|
-ifndef(m3). -define(m3,z3). -endif.
|
|
-export([?m1 /0, ?m2 /0, ?m3 /0]).
|
|
|
|
%% @doc
|
|
%% d1:{@d1}
|
|
%% d2:{@d2}
|
|
%% d3:{@d3}
|
|
%% @end
|
|
?m1 () -> ok.
|
|
?m2 () -> ok.
|
|
?m3 () -> ok.
|
|
",
|
|
AppsDir = ?config(apps, Config),
|
|
ct:pal("AppsDir: ~s", [AppsDir]),
|
|
ok = file:write_file(filename:join([AppsDir, "apps", "bar1", "rebar.config"]),
|
|
io_lib:format("~p.~n", [AppConfig])),
|
|
ok = file:write_file(filename:join([AppsDir, "apps", "bar1", "src", "debug.erl"]),
|
|
DebugModule),
|
|
rebar_test_utils:run_and_check(Config, RebarConfig, ["edoc"], {ok, []}),
|
|
DocFile = filename:join([AppsDir, "apps", "bar1", "doc", "debug.html"]),
|
|
?assert(file_content_matches(DocFile, "d1:1")), % config layered
|
|
?assert(file_content_matches(DocFile, "d2:2")),
|
|
?assert(file_content_matches(DocFile, "d3:2")),
|
|
?assert(file_content_matches(DocFile, "x1/0")), % elided in config drop
|
|
?assert(file_content_matches(DocFile, "f2/0")),
|
|
?assert(file_content_matches(DocFile, "f3/0")),
|
|
ok.
|
|
|
|
error_survival(Config) ->
|
|
RebarConfig = [],
|
|
rebar_test_utils:run_and_check(
|
|
Config, RebarConfig, ["edoc"],
|
|
{error,{rebar_prv_edoc,{app_failed,"bad_bar2"}}}
|
|
),
|
|
ok.
|
|
|
|
|
|
file_content_matches(Path, Regex) ->
|
|
case file:read_file(Path) of
|
|
{ok, Bin} ->
|
|
nomatch =/= re:run(Bin, Regex);
|
|
{error, Reason} ->
|
|
Reason
|
|
end.
|