From f8aad1ff2db04f78707eeeef7f793c696894ffa1 Mon Sep 17 00:00:00 2001 From: Eksperimental Date: Sun, 24 Apr 2022 13:34:50 +0000 Subject: [PATCH] Use tmp_dir in template tests (#1561) A continuation of https://github.com/elixir-lang/ex_doc/pull/1557 --- test/ex_doc/formatter/html/templates_test.exs | 101 +++++++++--------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/test/ex_doc/formatter/html/templates_test.exs b/test/ex_doc/formatter/html/templates_test.exs index 536c21954..efbe68554 100644 --- a/test/ex_doc/formatter/html/templates_test.exs +++ b/test/ex_doc/formatter/html/templates_test.exs @@ -4,6 +4,8 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do alias ExDoc.Formatter.HTML alias ExDoc.Formatter.HTML.Templates + @moduletag :tmp_dir + @empty_nodes_map %{modules: [], exceptions: [], protocols: [], tasks: []} defp source_url do @@ -14,31 +16,30 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do "https://elixir-lang.org" end - defp doc_config(config \\ []) do + defp doc_config(context, config \\ []) do default = %ExDoc.Config{ project: "Elixir", version: "1.0.1", source_url_pattern: "#{source_url()}/blob/master/%{path}#L%{line}", homepage_url: homepage_url(), source_url: source_url(), - output: "test/tmp/html_templates" + output: context.tmp_dir <> "/html_templates" } struct(default, config) end - defp get_module_page(names, config \\ []) do - config = doc_config(config) + defp get_module_page(names, context, config \\ []) do + config = doc_config(context, config) mods = ExDoc.Retriever.docs_from_modules(names, config) [mod | _] = HTML.render_all(mods, ".html", config, []) Templates.module_page(mod, @empty_nodes_map, config) end - setup_all do - File.mkdir_p!("test/tmp/html_templates") - File.cp_r!("formatters/html", "test/tmp/html_templates") - File.touch!("test/tmp/html_templates/dist/sidebar_items-123456.js") - File.touch!("test/tmp/html_templates/dist/search_items-123456.js") + setup %{tmp_dir: tmp_dir} do + File.cp_r!("formatters/html", tmp_dir <> "/html_templates") + File.touch!(tmp_dir <> "/html_templates/dist/sidebar_items-123456.js") + File.touch!(tmp_dir <> "/html_templates/dist/search_items-123456.js") :ok end @@ -200,8 +201,8 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do end describe "sidebar" do - test "text links to homepage_url when set" do - content = Templates.sidebar_template(doc_config(), @empty_nodes_map) + test "text links to homepage_url when set", context do + content = Templates.sidebar_template(doc_config(context), @empty_nodes_map) assert content =~ ~r""" @@ -230,12 +231,12 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do """ end - test "enables nav link when module type have at least one element" do + test "enables nav link when module type have at least one element", context do names = [CompiledWithDocs, CompiledWithDocs.Nested] - modules = ExDoc.Retriever.docs_from_modules(names, doc_config()) + modules = ExDoc.Retriever.docs_from_modules(names, doc_config(context)) content = - Templates.sidebar_template(doc_config(), %{ + Templates.sidebar_template(doc_config(context), %{ modules: modules, exceptions: [], tasks: [] @@ -246,24 +247,24 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do refute content =~ ~r{
  • Mix Tasks
  • } end - test "display built with footer by proglang option" do - content = Templates.footer_template(doc_config(proglang: :erlang), nil) + test "display built with footer by proglang option", context do + content = Templates.footer_template(doc_config(context, proglang: :erlang), nil) assert content =~ ~r{Erlang programming language} - content = Templates.footer_template(doc_config(proglang: :elixir), nil) + content = Templates.footer_template(doc_config(context, proglang: :elixir), nil) assert content =~ ~r{Elixir programming language} - assert Templates.footer_template(doc_config(proglang: :elixir), nil) == - Templates.footer_template(doc_config(), nil) + assert Templates.footer_template(doc_config(context, proglang: :elixir), nil) == + Templates.footer_template(doc_config(context), nil) end - test "outputs listing for the given nodes" do + test "outputs listing for the given nodes", context do names = [CompiledWithDocs, CompiledWithDocs.Nested] - nodes = ExDoc.Retriever.docs_from_modules(names, doc_config()) + nodes = ExDoc.Retriever.docs_from_modules(names, doc_config(context)) content = create_sidebar_items(%{modules: nodes}, []) assert content =~ ~r("modules":\[\{.*"id":"CompiledWithDocs",.*"title":"CompiledWithDocs")ms @@ -273,11 +274,11 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do assert content =~ ~r(\{"anchor":"__struct__/0","id":"%CompiledWithDocs\{\}"\})ms end - test "outputs nodes grouped based on metadata" do + test "outputs nodes grouped based on metadata", context do nodes = ExDoc.Retriever.docs_from_modules( [CompiledWithDocs, CompiledWithDocs.Nested], - doc_config( + doc_config(context, groups_for_functions: [ "Example functions": &(&1[:purpose] == :example), Legacy: &is_binary(&1[:deprecated]) @@ -297,10 +298,10 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do assert content =~ ~r("key":"legacy".*"example_without_docs/0")ms end - test "outputs module groups for the given nodes" do + test "outputs module groups for the given nodes", context do names = [CompiledWithDocs, CompiledWithDocs.Nested] group_mapping = [groups_for_modules: [Group: [CompiledWithDocs]]] - nodes = ExDoc.Retriever.docs_from_modules(names, doc_config(group_mapping)) + nodes = ExDoc.Retriever.docs_from_modules(names, doc_config(context, group_mapping)) content = create_sidebar_items(%{modules: nodes}, []) assert content =~ ~r("group":"Group","id":"CompiledWithDocs",.*"title":"CompiledWithDocs")ms @@ -322,9 +323,9 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do ~s(sidebarNodes={"extras":[{"group":"","headers":[{"anchor":"foo","id":"Foo"}],"id":"","title":""}]}) end - test "builds sections out of moduledocs" do + test "builds sections out of moduledocs", context do names = [CompiledWithDocs, CompiledWithoutDocs, DuplicateHeadings] - config = doc_config() + config = doc_config(context) nodes = ExDoc.Retriever.docs_from_modules(names, config) nodes = HTML.render_all(nodes, ".html", config, []) @@ -360,8 +361,8 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do end describe "module_page" do - test "outputs the functions and docstrings" do - content = get_module_page([CompiledWithDocs]) + test "outputs the functions and docstrings", context do + content = get_module_page([CompiledWithDocs], context) # Title and headers assert content =~ ~r{CompiledWithDocs [^<]*} @@ -401,9 +402,9 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do ~r{\s*\s*Link to this function\s*}ms end - test "outputs function groups" do + test "outputs function groups", context do content = - get_module_page([CompiledWithDocs], + get_module_page([CompiledWithDocs], context, groups_for_functions: [ "Example functions": &(&1[:purpose] == :example), Legacy: &is_binary(&1[:deprecated]) @@ -418,8 +419,8 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do assert content =~ ~r{id="functions".*id="example_1/0"}ms end - test "outputs deprecation information" do - content = get_module_page([CompiledWithDocs]) + test "outputs deprecation information", context do + content = get_module_page([CompiledWithDocs], context) assert content =~ ~s{deprecated} @@ -428,8 +429,8 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do ~r{
    \s*This function is deprecated. Use something else instead.} end - test "outputs the types and function specs" do - content = get_module_page([TypesAndSpecs, TypesAndSpecs.Sub]) + test "outputs the types and function specs", context do + content = get_module_page([TypesAndSpecs, TypesAndSpecs.Sub], context) integer = ~s[integer()] public_html = @@ -454,27 +455,27 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do assert content =~ ~r{@opaque opaque} end - test "outputs summaries" do - content = get_module_page([CompiledWithDocs]) + test "outputs summaries", context do + content = get_module_page([CompiledWithDocs], context) assert content =~ ~r{
    \s*} end - test "contains links to summary sections when those exist" do - content = get_module_page([CompiledWithDocs, CompiledWithDocs.Nested]) + test "contains links to summary sections when those exist", context do + content = get_module_page([CompiledWithDocs, CompiledWithDocs.Nested], context) refute content =~ ~r{types} end - test "add hovers to

    tags" do - content = get_module_page([CompiledWithDocs]) + test "add hovers to

    tags", context do + content = get_module_page([CompiledWithDocs], context) assert content =~ ~r{

    .*.*.*.*Examples.*

    }ms end - test "do not output overlapping functions, causing duplicate IDs" do - content = get_module_page([OverlappingDefaults]) + test "do not output overlapping functions, causing duplicate IDs", context do + content = get_module_page([OverlappingDefaults], context) assert content =~ ~s{
    } assert content =~ ~s{
    } @@ -491,8 +492,8 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do ## BEHAVIOURS - test "outputs behavior and callbacks" do - content = get_module_page([CustomBehaviourOne]) + test "outputs behavior and callbacks", context do + content = get_module_page([CustomBehaviourOne], context) assert content =~ ~r{CustomBehaviourOne\s*behaviour\s*\(Elixir v1.0.1\)\s*} @@ -503,7 +504,7 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do assert content =~ ~s[hello(%URI{})] assert content =~ ~s[greet(arg1)] - content = get_module_page([CustomBehaviourTwo]) + content = get_module_page([CustomBehaviourTwo], context) assert content =~ ~r{CustomBehaviourTwo\s*behaviour\s*\(Elixir v1.0.1\)\s*} @@ -515,8 +516,8 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do ## PROTOCOLS - test "outputs the protocol type" do - content = get_module_page([CustomProtocol]) + test "outputs the protocol type", context do + content = get_module_page([CustomProtocol], context) assert content =~ ~r{CustomProtocol\s*protocol\s*\(Elixir v1.0.1\)\s*} @@ -524,8 +525,8 @@ defmodule ExDoc.Formatter.HTML.TemplatesTest do ## TASKS - test "outputs the task type" do - content = get_module_page([Mix.Tasks.TaskWithDocs]) + test "outputs the task type", context do + content = get_module_page([Mix.Tasks.TaskWithDocs], context) assert content =~ ~r{mix task_with_docs\s*\(Elixir v1.0.1\)\s*}