1 package org.apache.maven.plugin.javadoc;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 }