@@ -259,7 +259,9 @@ defmodule ExDoc.Language.ElixirTest do
259259
260260 test "extras" do
261261 opts = [
262+ file: "guides/current.md" ,
262263 extras: % {
264+ "guide/Foo Bar.md" => "foo-bar" ,
263265 "Foo Bar.md" => "foo-bar" ,
264266 "Bar Baz.livemd" => "bar-baz" ,
265267 "Bar Baz.cheatmd" => "bar-baz"
@@ -286,6 +288,45 @@ defmodule ExDoc.Language.ElixirTest do
286288 assert autolink_doc ( "[Foo](#baz)" , opts ) == ~s| <a href="#baz">Foo</a>|
287289 end
288290
291+ test "path-qualified extra links use the extra source path" do
292+ opts = [
293+ file: "guides/current.md" ,
294+ extras: % { "guides/Foo Bar.md" => "foo-bar" , "Foo Bar.md" => "legacy-foo" }
295+ ]
296+
297+ assert autolink_doc ( "[Foo](./Foo Bar.md)" , opts ) ==
298+ ~s| <a href="foo-bar.html">Foo</a>|
299+
300+ assert autolink_doc ( "[Foo](../guides/Foo Bar.md)" , opts ) ==
301+ ~s| <a href="foo-bar.html">Foo</a>|
302+
303+ assert autolink_doc ( "[Foo](/guides/Foo Bar.md)" , opts ) ==
304+ ~s| <a href="foo-bar.html">Foo</a>|
305+ end
306+
307+ test "bare filename extra links use legacy lookup" do
308+ opts = [
309+ file: "guides/current.md" ,
310+ extras: % { "guides/Foo Bar.md" => "relative-foo" , "Foo Bar.md" => "legacy-foo" }
311+ ]
312+
313+ assert autolink_doc ( "[Foo](Foo Bar.md)" , opts ) ==
314+ ~s| <a href="legacy-foo.html">Foo</a>|
315+ end
316+
317+ test "extras with bad directories warn instead of silently matching by basename" do
318+ opts = [
319+ warnings: :send ,
320+ file: "guides/current.md" ,
321+ extras: % { "guide/Foo Bar.md" => "foo-bar" , "Foo Bar.md" => "foo-bar" }
322+ ]
323+
324+ assert warn ( fn ->
325+ assert autolink_doc ( "[Foo](/bad_dir/Foo Bar.md)" , opts ) ==
326+ ~s| <a href="/bad_dir/Foo Bar.md">Foo</a>|
327+ end ) =~ ~s| documentation references file "/bad_dir/Foo Bar.md" but it does not exist|
328+ end
329+
289330 test "special case links" do
290331 assert autolink_doc ( "`//2`" ) ==
291332 ~s| <a href="https://hexdocs.pm/elixir/Kernel.html#//2"><code class="inline">//2</code></a>|
0 commit comments