1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.doxia.module.markdown;
20
21 import com.vladsch.flexmark.html.renderer.LinkStatus;
22 import com.vladsch.flexmark.html.renderer.LinkType;
23 import com.vladsch.flexmark.html.renderer.ResolvedLink;
24 import org.junit.jupiter.api.Test;
25
26 import static org.junit.jupiter.api.Assertions.assertEquals;
27
28 public class FlexmarkDoxiaLinkResolverTest {
29 @Test
30 public void testResolveLink() {
31 FlexmarkDoxiaLinkResolver flexmarkDoxiaLinkResolver = new FlexmarkDoxiaLinkResolver(null);
32
33 checkLinkRewritten(flexmarkDoxiaLinkResolver, "doc.md", "doc.html");
34 checkLinkRewritten(flexmarkDoxiaLinkResolver, "doc.markdown", "doc.html");
35
36 checkLinkRewritten(flexmarkDoxiaLinkResolver, "doc.md#anchor", "doc.html#anchor");
37 checkLinkRewritten(flexmarkDoxiaLinkResolver, "doc.markdown#anchor", "doc.html#anchor");
38
39 checkLinkRewritten(flexmarkDoxiaLinkResolver, "./doc.md#anchor", "./doc.html#anchor");
40 checkLinkRewritten(flexmarkDoxiaLinkResolver, "./doc.markdown#anchor", "./doc.html#anchor");
41 checkLinkRewritten(flexmarkDoxiaLinkResolver, "./dir/doc.md#anchor", "./dir/doc.html#anchor");
42 checkLinkRewritten(flexmarkDoxiaLinkResolver, "./dir/doc.markdown#anchor", "./dir/doc.html#anchor");
43
44 checkLinkRewritten(flexmarkDoxiaLinkResolver, "../doc.md#anchor", "../doc.html#anchor");
45 checkLinkRewritten(flexmarkDoxiaLinkResolver, "../doc.markdown#anchor", "../doc.html#anchor");
46 checkLinkRewritten(flexmarkDoxiaLinkResolver, "../dir/doc.md#anchor", "../dir/doc.html#anchor");
47 checkLinkRewritten(flexmarkDoxiaLinkResolver, "../dir/doc.markdown#anchor", "../dir/doc.html#anchor");
48
49 checkLinkRewritten(flexmarkDoxiaLinkResolver, "./../doc.md#anchor", "./../doc.html#anchor");
50 checkLinkRewritten(flexmarkDoxiaLinkResolver, "./../doc.markdown#anchor", "./../doc.html#anchor");
51 checkLinkRewritten(flexmarkDoxiaLinkResolver, "./../dir/doc.md#anchor", "./../dir/doc.html#anchor");
52 checkLinkRewritten(flexmarkDoxiaLinkResolver, "./../dir/doc.markdown#anchor", "./../dir/doc.html#anchor");
53
54 checkLinkRewritten(flexmarkDoxiaLinkResolver, "../../doc.md#anchor", "../../doc.html#anchor");
55 checkLinkRewritten(flexmarkDoxiaLinkResolver, "../../doc.markdown#anchor", "../../doc.html#anchor");
56 checkLinkRewritten(flexmarkDoxiaLinkResolver, "../../dir/doc.md#anchor", "../../dir/doc.html#anchor");
57 checkLinkRewritten(flexmarkDoxiaLinkResolver, "../../dir/doc.markdown#anchor", "../../dir/doc.html#anchor");
58
59
60 checkLinkRewritten(flexmarkDoxiaLinkResolver, ":doc.md", ":doc.html");
61 checkLinkRewritten(flexmarkDoxiaLinkResolver, ":doc.markdown", ":doc.html");
62
63 checkLinkRewritten(flexmarkDoxiaLinkResolver, ":doc.md#anchor", ":doc.html#anchor");
64 checkLinkRewritten(flexmarkDoxiaLinkResolver, ":doc.markdown#anchor", ":doc.html#anchor");
65
66 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "doc.md", LinkType.LINK_REF);
67 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "doc.md", LinkType.IMAGE);
68 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "doc.md", LinkType.IMAGE_REF);
69 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "doc.markdown", LinkType.LINK_REF);
70 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "doc.markdown", LinkType.IMAGE);
71 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "doc.markdown", LinkType.IMAGE_REF);
72
73 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "http://doc.md", LinkType.LINK);
74 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "https://doc.md", LinkType.LINK);
75 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "ftp://doc.md", LinkType.LINK);
76 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "http://doc.markdown", LinkType.LINK);
77 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "https://doc.markdown", LinkType.LINK);
78 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "ftp://doc.markdown", LinkType.LINK);
79
80 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "docs.md.badformat", LinkType.LINK);
81 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "docs.markdown.badformat", LinkType.LINK);
82
83 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "docs.md#bad#format", LinkType.LINK);
84 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "docs.md#bad.format", LinkType.LINK);
85 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "docs.md.bad#format", LinkType.LINK);
86 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "docs.markdown#bad#format", LinkType.LINK);
87 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "docs.markdown#bad.format", LinkType.LINK);
88 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, "docs.markdown.bad#format", LinkType.LINK);
89
90 checkLinkLeftUnchanged(flexmarkDoxiaLinkResolver, ".../badpath/docs.md", LinkType.LINK);
91 }
92
93 private static void checkLinkLeftUnchanged(
94 FlexmarkDoxiaLinkResolver flexmarkDoxiaLinkResolver, String url, LinkType linkType) {
95 ResolvedLink originalLink = new ResolvedLink(linkType, url);
96 ResolvedLink rewrittenLink = flexmarkDoxiaLinkResolver.resolveLink(null, null, originalLink);
97
98 assertEquals(originalLink.getLinkType(), rewrittenLink.getLinkType());
99 assertEquals(originalLink.getUrl(), rewrittenLink.getUrl());
100 assertEquals(originalLink.getStatus(), rewrittenLink.getStatus());
101 }
102
103 private static void checkLinkRewritten(
104 FlexmarkDoxiaLinkResolver flexmarkDoxiaLinkResolver, String originalUrl, String expectedUrl) {
105 ResolvedLink originalLink = new ResolvedLink(LinkType.LINK, originalUrl);
106 ResolvedLink rewrittenLink = flexmarkDoxiaLinkResolver.resolveLink(null, null, originalLink);
107
108 assertEquals(originalLink.getLinkType(), rewrittenLink.getLinkType());
109 assertEquals(expectedUrl, rewrittenLink.getUrl());
110 assertEquals(LinkStatus.VALID, rewrittenLink.getStatus());
111 }
112 }