summaryrefslogtreecommitdiff
path: root/test/rebar_edoc_SUITE.erl
blob: fded2b0ace41d01d3baad9e6733b792951a17ad2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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.