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