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 53 54 55 56 57 58 59
|
defmodule ExDoc.Formatter.HTML.ErlangTest do
use ExUnit.Case
import TestHelper
@moduletag :otp_eep48
@moduletag :tmp_dir
test "smoke test", c do
erlc(c, :foo, ~S"""
%% @doc
%% foo module.
-module(foo).
-export([foo/1, bar/0]).
-export_type([t/0, t2/0]).
%% @doc
%% f/0 function.
-spec foo(t()) -> t().
foo(X) -> X.
-spec bar() -> baz.
bar() -> baz.
-type t() :: atom().
%% t/0 type.
-record(rec, {k1 :: any(), k2 :: any()}).
-type t2() :: #rec{k1 :: uri_string:uri_string(), k2 :: uri_string:uri_string() | undefined}.
""")
doc = generate_docs(c)
html = Floki.raw_html(doc)
assert html =~
~s|-spec</span> foo(<a href="#t:t/0">t</a>()) -> <a href="#t:t/0">t</a>().|
assert html =~
~s|-type</span> t() :: <a href="https://www.erlang.org/doc/apps/erts/erlang.html#t:atom/0">atom</a>().|
assert html =~
~s|-type</span> t2() :: #rec{k1 :: <a href="https://www.erlang.org/doc/apps/stdlib/uri_string.html#t:uri_string/0">uri_string:uri_string</a>(), k2 :: <a href="https://www.erlang.org/doc/apps/stdlib/uri_string.html#t:uri_string/0">uri_string:uri_string</a>() \| undefined}.|
end
defp generate_docs(c) do
config = [
version: "1.0.0",
project: "Foo",
formatter: "html",
output: Path.join(c.tmp_dir, "doc"),
source_beam: Path.join(c.tmp_dir, "ebin"),
extras: []
]
ExDoc.generate_docs(config[:project], config[:version], config)
[c.tmp_dir, "doc", "foo.html"] |> Path.join() |> File.read!() |> Floki.parse_document!()
end
end
|