@ -0,0 +1,52 @@ | |||
-module(rebar_edoc_SUITE). | |||
-include_lib("common_test/include/ct.hrl"). | |||
-include_lib("eunit/include/eunit.hrl"). | |||
-compile(export_all). | |||
all() -> [multiapp]. | |||
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]. | |||
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")). | |||
file_content_matches(Path, Regex) -> | |||
case file:read_file(Path) of | |||
{ok, Bin} -> | |||
nomatch =/= re:run(Bin, Regex); | |||
{error, Reason} -> | |||
Reason | |||
end. |
@ -0,0 +1,16 @@ | |||
{application, bar1, | |||
[{description, "An OTP application"}, | |||
{vsn, "0.1.0"}, | |||
{registered, []}, | |||
{mod, { bar1_app, []}}, | |||
{applications, | |||
[kernel, | |||
stdlib | |||
]}, | |||
{env,[]}, | |||
{modules, []}, | |||
{maintainers, []}, | |||
{licenses, []}, | |||
{links, []} | |||
]}. |
@ -0,0 +1,9 @@ | |||
-module(bar1). | |||
-export([bar1/0]). | |||
-export_type([barer1/0]). | |||
-type barer1() :: string(). | |||
% @doc Bar1 bars the bar. | |||
-spec bar1() -> barer1(). | |||
bar1() -> "Barer1". |
@ -0,0 +1,26 @@ | |||
%%%------------------------------------------------------------------- | |||
%% @doc bar1 public API | |||
%% @end | |||
%%%------------------------------------------------------------------- | |||
-module(bar1_app). | |||
-behaviour(application). | |||
%% Application callbacks | |||
-export([start/2, stop/1]). | |||
%%==================================================================== | |||
%% API | |||
%%==================================================================== | |||
start(_StartType, _StartArgs) -> | |||
bar1_sup:start_link(). | |||
%%-------------------------------------------------------------------- | |||
stop(_State) -> | |||
ok. | |||
%%==================================================================== | |||
%% Internal functions | |||
%%==================================================================== |
@ -0,0 +1,35 @@ | |||
%%%------------------------------------------------------------------- | |||
%% @doc bar1 top level supervisor. | |||
%% @end | |||
%%%------------------------------------------------------------------- | |||
-module(bar1_sup). | |||
-behaviour(supervisor). | |||
%% API | |||
-export([start_link/0]). | |||
%% Supervisor callbacks | |||
-export([init/1]). | |||
-define(SERVER, ?MODULE). | |||
%%==================================================================== | |||
%% API functions | |||
%%==================================================================== | |||
start_link() -> | |||
supervisor:start_link({local, ?SERVER}, ?MODULE, []). | |||
%%==================================================================== | |||
%% Supervisor callbacks | |||
%%==================================================================== | |||
%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules} | |||
init([]) -> | |||
{ok, { {one_for_all, 0, 1}, []} }. | |||
%%==================================================================== | |||
%% Internal functions | |||
%%==================================================================== |
@ -0,0 +1,16 @@ | |||
{application, bar2, | |||
[{description, "An OTP application"}, | |||
{vsn, "0.1.0"}, | |||
{registered, []}, | |||
{mod, { bar2_app, []}}, | |||
{applications, | |||
[kernel, | |||
stdlib | |||
]}, | |||
{env,[]}, | |||
{modules, []}, | |||
{maintainers, []}, | |||
{licenses, []}, | |||
{links, []} | |||
]}. |
@ -0,0 +1,9 @@ | |||
-module(bar2). | |||
-export([bar2/0]). | |||
-export_type([barer2/0]). | |||
-type barer2() :: string(). | |||
% @doc Bar2 bars the bar2. | |||
-spec bar2() -> barer2(). | |||
bar2() -> "Barer2". |
@ -0,0 +1,26 @@ | |||
%%%------------------------------------------------------------------- | |||
%% @doc bar2 public API | |||
%% @end | |||
%%%------------------------------------------------------------------- | |||
-module(bar2_app). | |||
-behaviour(application). | |||
%% Application callbacks | |||
-export([start/2, stop/1]). | |||
%%==================================================================== | |||
%% API | |||
%%==================================================================== | |||
start(_StartType, _StartArgs) -> | |||
bar2_sup:start_link(). | |||
%%-------------------------------------------------------------------- | |||
stop(_State) -> | |||
ok. | |||
%%==================================================================== | |||
%% Internal functions | |||
%%==================================================================== |
@ -0,0 +1,35 @@ | |||
%%%------------------------------------------------------------------- | |||
%% @doc bar2 top level supervisor. | |||
%% @end | |||
%%%------------------------------------------------------------------- | |||
-module(bar2_sup). | |||
-behaviour(supervisor). | |||
%% API | |||
-export([start_link/0]). | |||
%% Supervisor callbacks | |||
-export([init/1]). | |||
-define(SERVER, ?MODULE). | |||
%%==================================================================== | |||
%% API functions | |||
%%==================================================================== | |||
start_link() -> | |||
supervisor:start_link({local, ?SERVER}, ?MODULE, []). | |||
%%==================================================================== | |||
%% Supervisor callbacks | |||
%%==================================================================== | |||
%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules} | |||
init([]) -> | |||
{ok, { {one_for_all, 0, 1}, []} }. | |||
%%==================================================================== | |||
%% Internal functions | |||
%%==================================================================== |
@ -0,0 +1,17 @@ | |||
{application, foo, | |||
[{description, "An OTP application"}, | |||
{vsn, "0.1.0"}, | |||
{registered, []}, | |||
{mod, { foo_app, []}}, | |||
{applications, | |||
[kernel, | |||
stdlib, | |||
bar1, bar2 | |||
]}, | |||
{env,[]}, | |||
{modules, []}, | |||
{maintainers, []}, | |||
{licenses, []}, | |||
{links, []} | |||
]}. |
@ -0,0 +1,19 @@ | |||
-module(foo). | |||
-export([foo/0, bar1/0, bar2/0]). | |||
-export_type([fooer/0]). | |||
-type fooer() :: string(). | |||
% @doc Foo function returns fooer. | |||
-spec foo() -> fooer(). | |||
foo() -> "fooer". | |||
% @doc Bar1 function returns barer1. | |||
-spec bar1() -> bar1:barer1(). | |||
bar1() -> bar1:bar1(). | |||
% @doc Bar2 functions returns barer2. | |||
-spec bar2() -> bar2:barer2(). | |||
bar2() -> bar2:bar2(). |
@ -0,0 +1,26 @@ | |||
%%%------------------------------------------------------------------- | |||
%% @doc foo public API | |||
%% @end | |||
%%%------------------------------------------------------------------- | |||
-module(foo_app). | |||
-behaviour(application). | |||
%% Application callbacks | |||
-export([start/2, stop/1]). | |||
%%==================================================================== | |||
%% API | |||
%%==================================================================== | |||
start(_StartType, _StartArgs) -> | |||
foo_sup:start_link(). | |||
%%-------------------------------------------------------------------- | |||
stop(_State) -> | |||
ok. | |||
%%==================================================================== | |||
%% Internal functions | |||
%%==================================================================== |
@ -0,0 +1,35 @@ | |||
%%%------------------------------------------------------------------- | |||
%% @doc foo top level supervisor. | |||
%% @end | |||
%%%------------------------------------------------------------------- | |||
-module(foo_sup). | |||
-behaviour(supervisor). | |||
%% API | |||
-export([start_link/0]). | |||
%% Supervisor callbacks | |||
-export([init/1]). | |||
-define(SERVER, ?MODULE). | |||
%%==================================================================== | |||
%% API functions | |||
%%==================================================================== | |||
start_link() -> | |||
supervisor:start_link({local, ?SERVER}, ?MODULE, []). | |||
%%==================================================================== | |||
%% Supervisor callbacks | |||
%%==================================================================== | |||
%% Child :: {Id,StartFunc,Restart,Shutdown,Type,Modules} | |||
init([]) -> | |||
{ok, { {one_for_all, 0, 1}, []} }. | |||
%%==================================================================== | |||
%% Internal functions | |||
%%==================================================================== |