ApiCheckTest.java revision 48bd9fd589daaa11705dce8480c5b51f5b4a9e0f
1/*
2 * Copyright (C) 2010 Google Inc.
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package doclava;
18
19import com.google.doclava.Errors;
20import com.google.doclava.Errors.Error;
21import com.google.doclava.Errors.ErrorMessage;
22import com.google.doclava.apicheck.ApiCheck;
23import com.google.doclava.apicheck.ApiCheck.Report;
24
25import junit.framework.TestCase;
26
27import java.util.Iterator;
28
29public class ApiCheckTest extends TestCase {
30  /**
31   * Clear all errors and make sure all future errors will be recorded.
32   */
33  public void setUp() {
34    Errors.clearErrors();
35    for (Errors.Error error : Errors.ERRORS) {
36      Errors.setErrorLevel(error.code, Errors.ERROR);
37    }
38  }
39
40  public void testEquivalentApi() {
41    String[] args = { "test/api/medium.xml", "test/api/medium.xml" };
42    ApiCheck apiCheck = new ApiCheck();
43    Report report = apiCheck.checkApi(args);
44    assertEquals(report.errors().size(), 0);
45  }
46
47  public void testMethodReturnTypeChanged() {
48    String[] args = { "test/api/return-type-changed-1.xml", "test/api/return-type-changed-2.xml" };
49    ApiCheck apiCheck = new ApiCheck();
50    Report report = apiCheck.checkApi(args);
51    assertEquals(1, report.errors().size());
52    assertEquals(Errors.CHANGED_TYPE, report.errors().iterator().next().error());
53  }
54
55  public void testMethodParameterChanged() {
56    String[] args = { "test/api/parameter-changed-1.xml", "test/api/parameter-changed-2.xml" };
57    ApiCheck apiCheck = new ApiCheck();
58    Report report = apiCheck.checkApi(args);
59    assertEquals(2, report.errors().size());
60
61    Iterator<ErrorMessage> errors = report.errors().iterator();
62    ErrorMessage m1 = errors.next();
63    ErrorMessage m2 = errors.next();
64    assertNotSame(m1.error(), m2.error());
65    assertTrue(m1.error().equals(Errors.ADDED_METHOD) || m1.error().equals(Errors.REMOVED_METHOD));
66    assertTrue(m2.error().equals(Errors.ADDED_METHOD) || m2.error().equals(Errors.REMOVED_METHOD));
67  }
68
69  public void testConstructorParameterChanged() {
70    String[] args = { "test/api/parameter-changed-1.xml", "test/api/parameter-changed-3.xml" };
71    ApiCheck apiCheck = new ApiCheck();
72    Report report = apiCheck.checkApi(args);
73    assertEquals(2, report.errors().size());
74    Iterator<ErrorMessage> errors = report.errors().iterator();
75    ErrorMessage m1 = errors.next();
76    ErrorMessage m2 = errors.next();
77    assertNotSame(m1.error(), m2.error());
78    assertTrue(m1.error().equals(Errors.ADDED_METHOD) || m1.error().equals(Errors.REMOVED_METHOD));
79    assertTrue(m2.error().equals(Errors.ADDED_METHOD) || m2.error().equals(Errors.REMOVED_METHOD));
80  }
81
82  public void testAddedClass() {
83    String[] args = { "test/api/simple.xml", "test/api/add-class.xml" };
84    ApiCheck apiCheck = new ApiCheck();
85    Report report = apiCheck.checkApi(args);
86    assertEquals(1, report.errors().size());
87    assertEquals(Errors.ADDED_CLASS, report.errors().iterator().next().error());
88  }
89
90  public void testRemovedClass() {
91    String[] args = { "test/api/add-class.xml", "test/api/simple.xml" };
92    ApiCheck apiCheck = new ApiCheck();
93    Report report = apiCheck.checkApi(args);
94    assertEquals(1, report.errors().size());
95    assertEquals(Errors.REMOVED_CLASS, report.errors().iterator().next().error());
96  }
97
98  public void testChangedSuper() {
99    String[] args = { "test/api/simple.xml", "test/api/changed-super.xml" };
100    ApiCheck apiCheck = new ApiCheck();
101    Report report = apiCheck.checkApi(args);
102    assertEquals(1, report.errors().size());
103    assertEquals(Errors.CHANGED_SUPERCLASS, report.errors().iterator().next().error());
104  }
105
106  public void testInsertedSuper() {
107    String[] args = { "test/api/inserted-super-1.xml", "test/api/inserted-super-2.xml" };
108    ApiCheck apiCheck = new ApiCheck();
109    Report report = apiCheck.checkApi(args);
110    assertEquals(0, report.errors().size());
111  }
112
113  public void testAddedInterface() {
114    String[] args = { "test/api/removed-interface.xml", "test/api/medium.xml" };
115    ApiCheck apiCheck = new ApiCheck();
116    Report report = apiCheck.checkApi(args);
117    assertEquals(1, report.errors().size());
118    assertEquals(Errors.ADDED_INTERFACE, report.errors().iterator().next().error());
119  }
120
121  public void testRemovedInterface() {
122    String[] args = { "test/api/medium.xml", "test/api/removed-interface.xml" };
123    ApiCheck apiCheck = new ApiCheck();
124    Report report = apiCheck.checkApi(args);
125    assertEquals(1, report.errors().size());
126    assertEquals(Errors.REMOVED_INTERFACE, report.errors().iterator().next().error());
127  }
128
129  public void testChangedAbstractClass() {
130    String[] args = { "test/api/medium.xml", "test/api/changed-abstract.xml" };
131    ApiCheck apiCheck = new ApiCheck();
132    Report report = apiCheck.checkApi(args);
133    assertEquals(1, report.errors().size());
134    assertEquals(Errors.CHANGED_ABSTRACT, report.errors().iterator().next().error());
135  }
136
137  public void testChangedAbstractClass2() {
138    String[] args = { "test/api/changed-abstract.xml", "test/api/medium.xml" };
139    ApiCheck apiCheck = new ApiCheck();
140    Report report = apiCheck.checkApi(args);
141    assertEquals(1, report.errors().size());
142    assertEquals(Errors.CHANGED_ABSTRACT, report.errors().iterator().next().error());
143  }
144
145  public void testChangedAbstractMethod() {
146    String[] args = { "test/api/medium.xml", "test/api/changed-abstract2.xml" };
147    ApiCheck apiCheck = new ApiCheck();
148    Report report = apiCheck.checkApi(args);
149    assertEquals(1, report.errors().size());
150    assertEquals(Errors.CHANGED_ABSTRACT, report.errors().iterator().next().error());
151  }
152
153  public void testChangedAbstractMethod2() {
154    String[] args = { "test/api/changed-abstract2.xml", "test/api/medium.xml" };
155    ApiCheck apiCheck = new ApiCheck();
156    Report report = apiCheck.checkApi(args);
157    assertEquals(1, report.errors().size());
158    assertEquals(Errors.CHANGED_ABSTRACT, report.errors().iterator().next().error());
159  }
160
161  public void testAddedPackage() {
162    String[] args = { "test/api/medium.xml", "test/api/added-package.xml" };
163    ApiCheck apiCheck = new ApiCheck();
164    Report report = apiCheck.checkApi(args);
165    assertEquals(1, report.errors().size());
166    assertEquals(Errors.ADDED_PACKAGE, report.errors().iterator().next().error());
167  }
168
169  public void testRemovedPackage() {
170    String[] args = { "test/api/added-package.xml", "test/api/medium.xml" };
171    ApiCheck apiCheck = new ApiCheck();
172    Report report = apiCheck.checkApi(args);
173    assertEquals(1, report.errors().size());
174    assertEquals(Errors.REMOVED_PACKAGE, report.errors().iterator().next().error());
175  }
176
177  public void testChangedValue() {
178    String[] args = { "test/api/constants.xml", "test/api/changed-value.xml" };
179    ApiCheck apiCheck = new ApiCheck();
180    Report report = apiCheck.checkApi(args);
181    assertEquals(1, report.errors().size());
182    assertEquals(Errors.CHANGED_VALUE, report.errors().iterator().next().error());
183  }
184
185  public void testChangedValue2() {
186    String[] args = { "test/api/constants.xml", "test/api/changed-value2.xml" };
187    ApiCheck apiCheck = new ApiCheck();
188    Report report = apiCheck.checkApi(args);
189    assertEquals(1, report.errors().size());
190    assertEquals(Errors.CHANGED_VALUE, report.errors().iterator().next().error());
191  }
192
193  public void testChangedType() {
194    String[] args = { "test/api/constants.xml", "test/api/changed-type.xml" };
195    ApiCheck apiCheck = new ApiCheck();
196    Report report = apiCheck.checkApi(args);
197    assertEquals(1, report.errors().size());
198    assertEquals(Errors.CHANGED_TYPE, report.errors().iterator().next().error());
199  }
200
201  public void testChangedFinalField() {
202    String[] args = { "test/api/constants.xml", "test/api/changed-final.xml" };
203    ApiCheck apiCheck = new ApiCheck();
204    Report report = apiCheck.checkApi(args);
205    assertEquals(1, report.errors().size());
206    assertEquals(Errors.CHANGED_FINAL, report.errors().iterator().next().error());
207  }
208
209  public void testChangedFinalMethod() {
210    String[] args = { "test/api/constants.xml", "test/api/changed-final2.xml" };
211    ApiCheck apiCheck = new ApiCheck();
212    Report report = apiCheck.checkApi(args);
213    assertEquals(1, report.errors().size());
214    assertEquals(Errors.CHANGED_FINAL, report.errors().iterator().next().error());
215  }
216
217  public void testChangedFinalClass() {
218    String[] args = { "test/api/constants.xml", "test/api/changed-final3.xml" };
219    ApiCheck apiCheck = new ApiCheck();
220    Report report = apiCheck.checkApi(args);
221    assertEquals(1, report.errors().size());
222    assertEquals(Errors.CHANGED_FINAL, report.errors().iterator().next().error());
223  }
224
225  public void testChangedFinalClass2() {
226    String[] args = { "test/api/changed-final3.xml", "test/api/constants.xml" };
227    ApiCheck apiCheck = new ApiCheck();
228    Report report = apiCheck.checkApi(args);
229    assertEquals(1, report.errors().size());
230    assertEquals(Errors.CHANGED_FINAL, report.errors().iterator().next().error());
231  }
232
233  public void testAddedField() {
234    String[] args = { "test/api/constants.xml", "test/api/added-field.xml" };
235    ApiCheck apiCheck = new ApiCheck();
236    Report report = apiCheck.checkApi(args);
237    assertEquals(1, report.errors().size());
238    assertEquals(Errors.ADDED_FIELD, report.errors().iterator().next().error());
239  }
240
241  public void testRemovedField() {
242    String[] args = { "test/api/added-field.xml", "test/api/constants.xml" };
243    ApiCheck apiCheck = new ApiCheck();
244    Report report = apiCheck.checkApi(args);
245    assertEquals(1, report.errors().size());
246    assertEquals(Errors.REMOVED_FIELD, report.errors().iterator().next().error());
247  }
248
249  public void testChangedStaticMethod() {
250    String[] args = { "test/api/constants.xml", "test/api/changed-static.xml" };
251    ApiCheck apiCheck = new ApiCheck();
252    Report report = apiCheck.checkApi(args);
253    assertEquals(1, report.errors().size());
254    assertEquals(Errors.CHANGED_STATIC, report.errors().iterator().next().error());
255  }
256
257  public void testChangedStaticClass() {
258    String[] args = { "test/api/constants.xml", "test/api/changed-static2.xml" };
259    ApiCheck apiCheck = new ApiCheck();
260    Report report = apiCheck.checkApi(args);
261    assertEquals(1, report.errors().size());
262    assertEquals(Errors.CHANGED_STATIC, report.errors().iterator().next().error());
263  }
264
265  public void testChangedStaticField() {
266    String[] args = { "test/api/constants.xml", "test/api/changed-static3.xml" };
267    ApiCheck apiCheck = new ApiCheck();
268    Report report = apiCheck.checkApi(args);
269    assertEquals(1, report.errors().size());
270    assertEquals(Errors.CHANGED_STATIC, report.errors().iterator().next().error());
271  }
272
273  public void testChangedTransient() {
274    String[] args = { "test/api/constants.xml", "test/api/changed-transient.xml" };
275    ApiCheck apiCheck = new ApiCheck();
276    Report report = apiCheck.checkApi(args);
277    assertEquals(1, report.errors().size());
278    assertEquals(Errors.CHANGED_TRANSIENT, report.errors().iterator().next().error());
279  }
280
281  public void testChangedSynchronized() {
282    String[] args = { "test/api/constants.xml", "test/api/changed-synchronized.xml" };
283    ApiCheck apiCheck = new ApiCheck();
284    Report report = apiCheck.checkApi(args);
285    assertEquals(0, report.errors().size());
286  }
287
288  public void testChangedVolatile() {
289    String[] args = { "test/api/constants.xml", "test/api/changed-volatile.xml" };
290    ApiCheck apiCheck = new ApiCheck();
291    Report report = apiCheck.checkApi(args);
292    assertEquals(1, report.errors().size());
293    assertEquals(Errors.CHANGED_VOLATILE, report.errors().iterator().next().error());
294  }
295
296  public void testChangedNative() {
297    String[] args = { "test/api/constants.xml", "test/api/changed-native.xml" };
298    ApiCheck apiCheck = new ApiCheck();
299    Report report = apiCheck.checkApi(args);
300    assertEquals(1, report.errors().size());
301    assertEquals(Errors.CHANGED_NATIVE, report.errors().iterator().next().error());
302  }
303
304  public void testChangedScopeMethod() {
305    String[] args = { "test/api/constants.xml", "test/api/changed-scope.xml" };
306    ApiCheck apiCheck = new ApiCheck();
307    Report report = apiCheck.checkApi(args);
308    assertEquals(1, report.errors().size());
309    assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error());
310  }
311
312  public void testChangedScopeClass() {
313    String[] args = { "test/api/changed-scope.xml", "test/api/constants.xml" };
314    ApiCheck apiCheck = new ApiCheck();
315    Report report = apiCheck.checkApi(args);
316    assertEquals(1, report.errors().size());
317    assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error());
318  }
319
320  public void testChangedScopeClass2() {
321    String[] args = { "test/api/constants.xml", "test/api/changed-scope2.xml" };
322    ApiCheck apiCheck = new ApiCheck();
323    Report report = apiCheck.checkApi(args);
324    assertEquals(1, report.errors().size());
325    assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error());
326  }
327
328  public void testChangedScopeField() {
329    String[] args = { "test/api/constants.xml", "test/api/changed-scope3.xml" };
330    ApiCheck apiCheck = new ApiCheck();
331    Report report = apiCheck.checkApi(args);
332    assertEquals(1, report.errors().size());
333    assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error());
334  }
335
336  public void testChangedConstructorScope() {
337    String[] args = { "test/api/constants.xml", "test/api/changed-scope4.xml" };
338    ApiCheck apiCheck = new ApiCheck();
339    Report report = apiCheck.checkApi(args);
340    assertEquals(1, report.errors().size());
341    assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error());
342  }
343
344  public void testChangedMethodThrows() {
345    String[] args = { "test/api/throws.xml", "test/api/removed-exception.xml" };
346    ApiCheck apiCheck = new ApiCheck();
347    Report report = apiCheck.checkApi(args);
348    assertEquals(1, report.errors().size());
349    assertEquals(Errors.CHANGED_THROWS, report.errors().iterator().next().error());
350  }
351
352  public void testChangedMethodThrows2() {
353    String[] args = { "test/api/removed-exception.xml", "test/api/throws.xml" };
354    ApiCheck apiCheck = new ApiCheck();
355    Report report = apiCheck.checkApi(args);
356    assertEquals(1, report.errors().size());
357    assertEquals(Errors.CHANGED_THROWS, report.errors().iterator().next().error());
358  }
359
360  public void testChangedConstructorThrows() {
361    String[] args = { "test/api/throws.xml", "test/api/added-exception.xml" };
362    ApiCheck apiCheck = new ApiCheck();
363    Report report = apiCheck.checkApi(args);
364    assertEquals(1, report.errors().size());
365    assertEquals(Errors.CHANGED_THROWS, report.errors().iterator().next().error());
366  }
367
368  public void testChangedConstructorThrows2() {
369    String[] args = { "test/api/added-exception.xml", "test/api/throws.xml" };
370    ApiCheck apiCheck = new ApiCheck();
371    Report report = apiCheck.checkApi(args);
372    assertEquals(1, report.errors().size());
373    assertEquals(Errors.CHANGED_THROWS, report.errors().iterator().next().error());
374  }
375
376  public void testChangedMethodDeprecated() {
377    String[] args = { "test/api/constants.xml", "test/api/changed-deprecated.xml" };
378    ApiCheck apiCheck = new ApiCheck();
379    Report report = apiCheck.checkApi(args);
380    assertEquals(1, report.errors().size());
381    assertEquals(Errors.CHANGED_DEPRECATED, report.errors().iterator().next().error());
382  }
383
384  public void testChangedConstructorDeprecated() {
385    String[] args = { "test/api/constants.xml", "test/api/changed-deprecated2.xml" };
386    ApiCheck apiCheck = new ApiCheck();
387    Report report = apiCheck.checkApi(args);
388    assertEquals(1, report.errors().size());
389    assertEquals(Errors.CHANGED_DEPRECATED, report.errors().iterator().next().error());
390  }
391
392  public void testChangedFieldDeprecated() {
393    String[] args = { "test/api/constants.xml", "test/api/changed-deprecated3.xml" };
394    ApiCheck apiCheck = new ApiCheck();
395    Report report = apiCheck.checkApi(args);
396    assertEquals(1, report.errors().size());
397    assertEquals(Errors.CHANGED_DEPRECATED, report.errors().iterator().next().error());
398  }
399
400  public void testChangedClassToInterface() {
401    String[] args = { "test/api/changed-class-info2.xml", "test/api/changed-class-info.xml" };
402    ApiCheck apiCheck = new ApiCheck();
403    Report report = apiCheck.checkApi(args);
404    assertEquals(1, report.errors().size());
405    assertEquals(Errors.CHANGED_CLASS, report.errors().iterator().next().error());
406  }
407
408  public void testChangedInterfaceToClass() {
409    String[] args = { "test/api/changed-class-info.xml", "test/api/changed-class-info2.xml" };
410    ApiCheck apiCheck = new ApiCheck();
411    Report report = apiCheck.checkApi(args);
412    assertEquals(1, report.errors().size());
413    assertEquals(Errors.CHANGED_CLASS, report.errors().iterator().next().error());
414  }
415}
416