View Javadoc

1   package org.apache.maven.plugin.javadoc;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *   http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.mockito.Mockito.mock;
23  import static org.mockito.Mockito.spy;
24  import static org.mockito.Mockito.when;
25  import junit.framework.TestCase;
26  import junitx.util.PrivateAccessor;
27  
28  import com.thoughtworks.qdox.model.AbstractInheritableJavaEntity;
29  import com.thoughtworks.qdox.model.DocletTag;
30  import com.thoughtworks.qdox.model.IndentBuffer;
31  import com.thoughtworks.qdox.model.JavaClass;
32  
33  public class AbstractFixJavadocMojoTest
34      extends TestCase
35  {
36  
37      public void testReplaceLinkTags_noLinkTag()
38          throws Throwable
39      {
40          String comment = "/** @see ConnectException */";
41          AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
42          JavaClass clazz = mock( JavaClass.class );
43          when( entity.getParentClass() ).thenReturn( clazz );
44          when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
45          String newComment =
46              (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
47                  String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
48          assertEquals( "/** @see ConnectException */", newComment );
49      }
50  
51      public void testReplaceLinkTags_oneLinkTag()
52          throws Throwable
53      {
54          String comment = "/** {@link ConnectException} */";
55          AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
56          JavaClass clazz = mock( JavaClass.class );
57          when( entity.getParentClass() ).thenReturn( clazz );
58          when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
59          String newComment =
60              (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
61                  String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
62          assertEquals( "/** {@link java.net.ConnectException} */", newComment );
63      }
64  
65      public void testReplaceLinkTags_missingEndBrace()
66          throws Throwable
67      {
68          String comment = "/** {@link ConnectException */";
69          AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
70          JavaClass clazz = mock( JavaClass.class );
71          when( entity.getParentClass() ).thenReturn( clazz );
72          when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
73          String newComment =
74              (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
75                  String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
76  
77          assertEquals( "/** {@link ConnectException */", newComment );
78      }
79  
80      public void testReplaceLinkTags_spacesAfterLinkTag()
81          throws Throwable
82      {
83          String comment = "/** {@link     ConnectException} */";
84          AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
85          JavaClass clazz = mock( JavaClass.class );
86          when( entity.getParentClass() ).thenReturn( clazz );
87          when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
88          String newComment =
89              (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
90                  String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
91  
92          assertEquals( "/** {@link java.net.ConnectException} */", newComment );
93      }
94  
95      public void testReplaceLinkTags_spacesAfterClassName()
96          throws Throwable
97      {
98          String comment = "/** {@link ConnectException       } */";
99          AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
100         JavaClass clazz = mock( JavaClass.class );
101         when( entity.getParentClass() ).thenReturn( clazz );
102         when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
103         String newComment =
104             (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
105                 String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
106 
107         assertEquals( "/** {@link java.net.ConnectException} */", newComment );
108     }
109 
110     public void testReplaceLinkTags_spacesAfterMethod()
111         throws Throwable
112     {
113         String comment = "/** {@link ConnectException#getMessage()       } */";
114         AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
115         JavaClass clazz = mock( JavaClass.class );
116         when( entity.getParentClass() ).thenReturn( clazz );
117         when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
118         String newComment =
119             (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
120                 String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
121 
122         assertEquals( "/** {@link java.net.ConnectException#getMessage()} */", newComment );
123     }
124 
125     public void testReplaceLinkTags_containingHash()
126         throws Throwable
127     {
128         String comment = "/** {@link ConnectException#getMessage()} */";
129         AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
130         JavaClass clazz = mock( JavaClass.class );
131         when( entity.getParentClass() ).thenReturn( clazz );
132         when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
133         String newComment =
134             (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
135                 String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
136 
137         assertEquals( "/** {@link java.net.ConnectException#getMessage()} */", newComment );
138     }
139 
140     public void testReplaceLinkTags_followedByHash()
141         throws Throwable
142     {
143         String comment = "/** {@link ConnectException} ##important## */";
144         AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
145         JavaClass clazz = mock( JavaClass.class );
146         when( entity.getParentClass() ).thenReturn( clazz );
147         when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
148         String newComment =
149             (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
150                 String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
151 
152         assertEquals( "/** {@link java.net.ConnectException} ##important## */", newComment );
153     }
154 
155     public void testReplaceLinkTags_twoLinks()
156         throws Throwable
157     {
158         String comment = "/** Use {@link ConnectException} instead of {@link Exception} */";
159         AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
160         JavaClass clazz = mock( JavaClass.class );
161         when( entity.getParentClass() ).thenReturn( clazz );
162         when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
163         when( clazz.resolveType( "Exception" ) ).thenReturn( "java.lang.Exception" );
164         String newComment =
165             (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
166                 String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
167 
168         assertEquals( "/** Use {@link java.net.ConnectException} instead of {@link java.lang.Exception} */", newComment );
169     }
170 
171     public void testReplaceLinkTags_OnlyAnchor()
172         throws Throwable
173     {
174         String comment = "/** There's a {@link #getClass()} but no setClass() */";
175         AbstractInheritableJavaEntity entity = spy( new PrivateAbstractInheritableJavaEntity() );
176         JavaClass clazz = mock( JavaClass.class );
177         when( entity.getParentClass() ).thenReturn( clazz );
178         when( clazz.resolveType( "ConnectException" ) ).thenReturn( "java.net.ConnectException" );
179         when( clazz.resolveType( "Exception" ) ).thenReturn( "java.lang.Exception" );
180 
181         String newComment =
182             (String) PrivateAccessor.invoke( AbstractFixJavadocMojo.class, "replaceLinkTags", new Class[] {
183                 String.class, AbstractInheritableJavaEntity.class }, new Object[] { comment, entity } );
184 
185         assertEquals( "/** There's a {@link #getClass()} but no setClass() */", newComment );
186     }
187 
188     protected class PrivateAbstractInheritableJavaEntity
189         extends AbstractInheritableJavaEntity
190     {
191         public int compareTo( Object o )
192         {
193             return 0;
194         }
195 
196         @Override
197         public DocletTag[] getTagsByName( String arg0, boolean arg1 )
198         {
199             return null;
200         }
201 
202         @Override
203         protected void writeBody( IndentBuffer arg0 )
204         {
205         }
206     }
207 }