View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one
3    * or more contributor license agreements.  See the NOTICE file
4    * distributed with this work for additional information
5    * regarding copyright ownership.  The ASF licenses this file
6    * to you under the Apache License, Version 2.0 (the
7    * "License"); you may not use this file except in compliance
8    * with the License.  You may obtain a copy of the License at
9    *
10   *   http://www.apache.org/licenses/LICENSE-2.0
11   *
12   * Unless required by applicable law or agreed to in writing,
13   * software distributed under the License is distributed on an
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
15   * KIND, either express or implied.  See the License for the
16   * specific language governing permissions and limitations
17   * under the License.
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          // these edge cases are still allowed
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 }