Current section
Files
Jump to
Current section
Files
lib/examples/e_documentation.ex
defmodule Examples.EDocumentation do
@moduledoc """
I am examples for GtBridge.Documentation, the module doc extractor.
"""
use ExExample
import ExUnit.Assertions
alias GtBridge.Documentation
def rerun?(_), do: true
############################################################
# Module-Level Examples #
############################################################
@spec for_enum() :: Documentation.t()
example for_enum do
doc = Documentation.for_module(Enum)
assert doc.query == {:module, Enum}
doc
end
@spec module_doc_view() :: map()
example module_doc_view do
doc = for_enum()
views = GtBridge.View.get_view_object(doc)
md_view = Enum.find(views, &(&1[:title] == "Module Doc"))
assert md_view != nil
assert md_view[:markdown] == true
assert is_binary(md_view[:string])
assert String.contains?(md_view[:string], "Enum")
md_view
end
@spec functions_view() :: map()
example functions_view do
doc = for_enum()
views = GtBridge.View.get_view_object(doc)
funs_view = Enum.find(views, &(&1[:title] == "Functions"))
assert funs_view != nil
assert funs_view[:itemsCount] > 0
funs_view
end
@spec no_docs_module() :: map()
example no_docs_module do
doc = Documentation.for_module(NoDocsTestModule)
views = GtBridge.View.get_view_object(doc)
md_view = Enum.find(views, &(&1[:title] == "Module Doc"))
assert md_view != nil
assert String.contains?(md_view[:string], "not available")
md_view
end
############################################################
# Function-Level Examples #
############################################################
@spec for_enum_map() :: Documentation.t()
example for_enum_map do
doc = Documentation.for_function(Enum, :map)
assert doc.query == {:function, Enum, :map}
doc
end
@spec for_enum_map_2() :: Documentation.t()
example for_enum_map_2 do
doc = Documentation.for_function(Enum, :map, 2)
assert doc.query == {:function, Enum, :map, 2}
doc
end
@spec function_doc_view() :: map()
example function_doc_view do
doc = for_enum_map_2()
views = GtBridge.View.get_view_object(doc)
md_view = Enum.find(views, &(&1[:title] == "Function Doc"))
assert md_view != nil
assert String.contains?(md_view[:string], "map")
md_view
end
@spec multi_arity_sections() :: map()
example multi_arity_sections do
doc = Documentation.for_function(Enum, :reduce)
views = GtBridge.View.get_view_object(doc)
md_view = Enum.find(views, &(&1[:title] == "Function Doc"))
assert md_view != nil
# reduce/2 and reduce/3 should be separate sections
assert String.contains?(md_view[:string], "__SECTION__")
md_view
end
############################################################
# Type-Level Examples #
############################################################
@spec types_view() :: map()
example types_view do
doc = for_enum()
views = GtBridge.View.get_view_object(doc)
types_view = Enum.find(views, &(&1[:title] == "Types"))
assert types_view != nil
assert types_view[:itemsCount] > 0
types_view
end
@spec type_doc_view() :: map()
example type_doc_view do
doc = Documentation.for_type(Enum, :t, 0)
views = GtBridge.View.get_view_object(doc)
md_view = Enum.find(views, &(&1[:title] == "Type Doc"))
assert md_view != nil
md_view
end
############################################################
# Sections Example #
############################################################
@spec to_sections() :: String.t()
example to_sections do
doc = for_enum()
sections = Documentation.to_sections(doc)
assert is_binary(sections)
assert String.contains?(sections, "__SECTION__")
parts = String.split(sections, "\n__SECTION__\n")
# First section is the module doc
assert String.starts_with?(hd(parts), "# Enum")
# Subsequent sections have ## headers
assert Enum.all?(tl(parts), &String.starts_with?(&1, "## "))
# Indented code blocks are converted to fenced
assert String.contains?(sections, "```elixir")
refute String.contains?(sections, " iex>")
sections
end
end