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.plugins.javadoc;
20  
21  import java.io.StringReader;
22  
23  import com.thoughtworks.qdox.JavaProjectBuilder;
24  import com.thoughtworks.qdox.model.JavaClass;
25  import com.thoughtworks.qdox.model.JavaSource;
26  import org.junit.Test;
27  
28  import static org.assertj.core.api.Assertions.assertThat;
29  
30  public class AbstractFixJavadocMojoTest {
31      private JavaSource getJavaSource(String source) {
32          return new JavaProjectBuilder().addSource(new StringReader(source));
33      }
34  
35      @Test
36      public void testReplaceLinkTags_noLinkTag() {
37          String comment = "/** @see ConnectException */";
38          String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class NoLinkTag {}";
39  
40          JavaClass clazz = getJavaSource(source).getClassByName("NoLinkTag");
41  
42          String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
43  
44          assertThat(newComment).isEqualTo("/** @see ConnectException */");
45      }
46  
47      @Test
48      public void testReplaceLinkTags_oneLinkTag() {
49          String comment = "/** {@link ConnectException} */";
50          String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class OneLinkTag {}";
51  
52          JavaClass clazz = getJavaSource(source).getClassByName("OneLinkTag");
53  
54          String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
55          assertThat(newComment).isEqualTo("/** {@link java.net.ConnectException} */");
56      }
57  
58      @Test
59      public void testReplaceLinkTags_missingEndBrace() {
60          String comment = "/** {@link ConnectException */";
61          String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class MissingEndBrace {}";
62  
63          JavaClass clazz = getJavaSource(source).getClassByName("MissingEndBrace");
64  
65          String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
66          assertThat(newComment).isEqualTo("/** {@link ConnectException */");
67      }
68  
69      @Test
70      public void testReplaceLinkTags_spacesAfterLinkTag() {
71          String comment = "/** {@link     ConnectException} */";
72          String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class SpacesAfterLinkTag {}";
73  
74          JavaClass clazz = getJavaSource(source).getClassByName("SpacesAfterLinkTag");
75  
76          String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
77          assertThat(newComment).isEqualTo("/** {@link java.net.ConnectException} */");
78      }
79  
80      @Test
81      public void testReplaceLinkTags_spacesAfterClassName() {
82          String comment = "/** {@link ConnectException       } */";
83          String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class SpacesAfterClassName {}";
84  
85          JavaClass clazz = getJavaSource(source).getClassByName("SpacesAfterClassName");
86  
87          String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
88          assertThat(newComment).isEqualTo("/** {@link java.net.ConnectException} */");
89      }
90  
91      @Test
92      public void testReplaceLinkTags_spacesAfterMethod() {
93          String comment = "/** {@link ConnectException#getMessage()       } */";
94          String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class SpacesAfterMethod {}";
95  
96          JavaClass clazz = getJavaSource(source).getClassByName("SpacesAfterMethod");
97  
98          String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
99          assertThat(newComment).isEqualTo("/** {@link java.net.ConnectException#getMessage()} */");
100     }
101 
102     @Test
103     public void testReplaceLinkTags_containingHash() {
104         String comment = "/** {@link ConnectException#getMessage()} */";
105         String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class ContainingHashes {}";
106 
107         JavaClass clazz = getJavaSource(source).getClassByName("ContainingHashes");
108 
109         String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
110         assertThat(newComment).isEqualTo("/** {@link java.net.ConnectException#getMessage()} */");
111     }
112 
113     @Test
114     public void testReplaceLinkTags_followedByHash() {
115         String comment = "/** {@link ConnectException} ##important## */";
116         String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class FollowedByHash {}";
117 
118         JavaClass clazz = getJavaSource(source).getClassByName("FollowedByHash");
119 
120         String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
121         assertThat(newComment).isEqualTo("/** {@link java.net.ConnectException} ##important## */");
122     }
123 
124     @Test
125     public void testReplaceLinkTags_twoLinks() {
126         String comment = "/** Use {@link ConnectException} instead of {@link Exception} */";
127         String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class TwoLinks {}";
128 
129         JavaClass clazz = getJavaSource(source).getClassByName("TwoLinks");
130 
131         String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
132         assertThat(newComment)
133                 .isEqualTo("/** Use {@link java.net.ConnectException} instead of {@link java.lang.Exception} */");
134     }
135 
136     @Test
137     public void testReplaceLinkTags_OnlyAnchor() {
138         String comment = "/** There's a {@link #getClass()} but no setClass() */";
139         String source = "import java.net.ConnectException;\n" + comment + "\n" + "public class OnlyAnchor {}";
140 
141         JavaClass clazz = getJavaSource(source).getClassByName("OnlyAnchor");
142 
143         String newComment = AbstractFixJavadocMojo.replaceLinkTags(comment, clazz);
144         assertThat(newComment).isEqualTo("/** There's a {@link #getClass()} but no setClass() */");
145     }
146 }