From 5dc7599669978a221be0e53d4410ea6217a6b0a5 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Tue, 13 Jun 2017 17:02:05 -0400 Subject: Fix Doclava test for add/remove final on class We're seeing errors for each method inside the class, since final is inherited by the methods. Updates count to reflect this. Also renames tests to reflect what they are actually testing. Change-Id: I26fe64753c9b199aa152c40fd0a72e57a669705b Fixes: 33085565 Test: ./gradlew test --- test/doclava/ApiCheckTest.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/test/doclava/ApiCheckTest.java b/test/doclava/ApiCheckTest.java index d9f1a07..c87df15 100644 --- a/test/doclava/ApiCheckTest.java +++ b/test/doclava/ApiCheckTest.java @@ -213,7 +213,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_TYPE, report.errors().iterator().next().error()); } - public void testChangedFinalField() { + public void testAddedFinalField() { String[] args = { "test/api/constants.xml", "test/api/changed-final.xml" }; ApiCheck apiCheck = new ApiCheck(); Report report = apiCheck.checkApi(args); @@ -221,7 +221,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_FINAL, report.errors().iterator().next().error()); } - public void testChangedFinalMethod() { + public void testAddedFinalMethod() { String[] args = { "test/api/constants.xml", "test/api/changed-final2.xml" }; ApiCheck apiCheck = new ApiCheck(); Report report = apiCheck.checkApi(args); @@ -229,19 +229,21 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_FINAL, report.errors().iterator().next().error()); } - public void testChangedFinalClass() { + public void testAddedFinalClass() { String[] args = { "test/api/constants.xml", "test/api/changed-final3.xml" }; ApiCheck apiCheck = new ApiCheck(); Report report = apiCheck.checkApi(args); - assertEquals(1, report.errors().size()); + // One error for the class, one for the constructor, one for the method. + assertEquals(3, report.errors().size()); assertEquals(Errors.ADDED_FINAL, report.errors().iterator().next().error()); } - public void testChangedFinalClass2() { + public void testRemovedFinalClass() { String[] args = { "test/api/changed-final3.xml", "test/api/constants.xml" }; ApiCheck apiCheck = new ApiCheck(); Report report = apiCheck.checkApi(args); - assertEquals(1, report.errors().size()); + // One error for the class, one for the constructor, one for the method. + assertEquals(3, report.errors().size()); assertEquals(Errors.REMOVED_FINAL, report.errors().iterator().next().error()); } -- cgit v1.2.3 From 8a4ad19dbeed1aa49785c761e41295e873bfb044 Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Tue, 13 Jun 2017 16:45:22 -0400 Subject: Enable Doclava API check for changing the synchronized modifier Also updates Doclava tests for JUnit4. Does not fix three pre-existing test failures which are unrelated to this change. Change-Id: I786e57d380f598905337b1c7ba751589df6d34d5 Fixes: 62576297 Test: ./gradlew test --- src/com/google/doclava/MethodInfo.java | 8 ++-- test/doclava/ApiCheckTest.java | 70 ++++++++++++++++++++++++++++++---- 2 files changed, 67 insertions(+), 11 deletions(-) diff --git a/src/com/google/doclava/MethodInfo.java b/src/com/google/doclava/MethodInfo.java index 47b1978..33197a3 100644 --- a/src/com/google/doclava/MethodInfo.java +++ b/src/com/google/doclava/MethodInfo.java @@ -893,6 +893,8 @@ public class MethodInfo extends MemberInfo implements AbstractMethodInfo, Resolv + " to " + mInfo.scope()); } + // Changing the deprecated annotation is binary- and source-compatible, but + // we still need to log the API change. if (!isDeprecated() == mInfo.isDeprecated()) { Errors.error(Errors.CHANGED_DEPRECATED, mInfo.position(), "Method " + mInfo.prettyQualifiedSignature() + " has changed deprecation state " + isDeprecated() @@ -900,16 +902,14 @@ public class MethodInfo extends MemberInfo implements AbstractMethodInfo, Resolv consistent = false; } - // see JLS 3 13.4.20 "Adding or deleting a synchronized modifier of a method does not break " - // "compatibility with existing binaries." - /* + // Changing the synchronized modifier is binary- and source-compatible (see + // JLS 3 13.4.20), but we still need to log the API change. if (mIsSynchronized != mInfo.mIsSynchronized) { Errors.error(Errors.CHANGED_SYNCHRONIZED, mInfo.position(), "Method " + mInfo.qualifiedName() + " has changed 'synchronized' qualifier from " + mIsSynchronized + " to " + mInfo.mIsSynchronized); consistent = false; } - */ for (ClassInfo exception : thrownExceptions()) { if (!mInfo.throwsException(exception)) { diff --git a/test/doclava/ApiCheckTest.java b/test/doclava/ApiCheckTest.java index c87df15..fb931a9 100644 --- a/test/doclava/ApiCheckTest.java +++ b/test/doclava/ApiCheckTest.java @@ -17,26 +17,31 @@ package doclava; import com.google.doclava.Errors; -import com.google.doclava.Errors.Error; import com.google.doclava.Errors.ErrorMessage; import com.google.doclava.apicheck.ApiCheck; import com.google.doclava.apicheck.ApiCheck.Report; -import junit.framework.TestCase; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertTrue; import java.util.Iterator; -public class ApiCheckTest extends TestCase { - /** - * Clear all errors and make sure all future errors will be recorded. - */ +public class ApiCheckTest { + + @Before public void setUp() { + // Clear all errors and make sure all future errors will be recorded. Errors.clearErrors(); for (Errors.Error error : Errors.sErrors) { Errors.setErrorLevel(error.code, Errors.ERROR); } } + @Test public void testEquivalentApi() { String[] args = { "test/api/medium.xml", "test/api/medium.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -44,6 +49,7 @@ public class ApiCheckTest extends TestCase { assertEquals(report.errors().size(), 0); } + @Test public void testMethodReturnTypeChanged() { String[] args = { "test/api/return-type-changed-1.xml", "test/api/return-type-changed-2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -52,6 +58,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_TYPE, report.errors().iterator().next().error()); } + @Test public void testMethodParameterChanged() { String[] args = { "test/api/parameter-changed-1.xml", "test/api/parameter-changed-2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -66,6 +73,7 @@ public class ApiCheckTest extends TestCase { assertTrue(m2.error().equals(Errors.ADDED_METHOD) || m2.error().equals(Errors.REMOVED_METHOD)); } + @Test public void testConstructorParameterChanged() { String[] args = { "test/api/parameter-changed-1.xml", "test/api/parameter-changed-3.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -79,6 +87,7 @@ public class ApiCheckTest extends TestCase { assertTrue(m2.error().equals(Errors.ADDED_METHOD) || m2.error().equals(Errors.REMOVED_METHOD)); } + @Test public void testAddedClass() { String[] args = { "test/api/simple.xml", "test/api/added-class.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -87,6 +96,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_CLASS, report.errors().iterator().next().error()); } + @Test public void testRemovedClass() { String[] args = { "test/api/added-class.xml", "test/api/simple.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -95,6 +105,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_CLASS, report.errors().iterator().next().error()); } + @Test public void testRemovedDeprecatedClass() { String[] args = { "test/api/added-deprecated-class.xml", "test/api/simple.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -103,6 +114,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_DEPRECATED_CLASS, report.errors().iterator().next().error()); } + @Test public void testChangedSuper() { String[] args = { "test/api/simple.xml", "test/api/changed-super.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -111,6 +123,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_SUPERCLASS, report.errors().iterator().next().error()); } + @Test public void testChangedAssignableReturn() { String[] args = { "test/api/changed-assignable-return-1.xml", "test/api/changed-assignable-return-2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -118,6 +131,7 @@ public class ApiCheckTest extends TestCase { assertEquals(0, report.errors().size()); } + @Test public void testInsertedSuper() { String[] args = { "test/api/inserted-super-1.xml", "test/api/inserted-super-2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -125,6 +139,7 @@ public class ApiCheckTest extends TestCase { assertEquals(0, report.errors().size()); } + @Test public void testAddedInterface() { String[] args = { "test/api/removed-interface.xml", "test/api/medium.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -133,6 +148,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_INTERFACE, report.errors().iterator().next().error()); } + @Test public void testRemovedInterface() { String[] args = { "test/api/medium.xml", "test/api/removed-interface.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -141,6 +157,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_INTERFACE, report.errors().iterator().next().error()); } + @Test public void testChangedAbstractClass() { String[] args = { "test/api/medium.xml", "test/api/changed-abstract.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -149,6 +166,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_ABSTRACT, report.errors().iterator().next().error()); } + @Test public void testChangedAbstractClass2() { String[] args = { "test/api/changed-abstract.xml", "test/api/medium.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -157,6 +175,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_ABSTRACT, report.errors().iterator().next().error()); } + @Test public void testChangedAbstractMethod() { String[] args = { "test/api/medium.xml", "test/api/changed-abstract2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -165,6 +184,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_ABSTRACT, report.errors().iterator().next().error()); } + @Test public void testChangedAbstractMethod2() { String[] args = { "test/api/changed-abstract2.xml", "test/api/medium.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -173,6 +193,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_ABSTRACT, report.errors().iterator().next().error()); } + @Test public void testAddedPackage() { String[] args = { "test/api/medium.xml", "test/api/added-package.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -181,6 +202,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_PACKAGE, report.errors().iterator().next().error()); } + @Test public void testRemovedPackage() { String[] args = { "test/api/added-package.xml", "test/api/medium.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -189,6 +211,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_PACKAGE, report.errors().iterator().next().error()); } + @Test public void testChangedValue() { String[] args = { "test/api/constants.xml", "test/api/changed-value.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -197,6 +220,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_VALUE, report.errors().iterator().next().error()); } + @Test public void testChangedValue2() { String[] args = { "test/api/constants.xml", "test/api/changed-value2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -205,6 +229,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_VALUE, report.errors().iterator().next().error()); } + @Test public void testChangedType() { String[] args = { "test/api/constants.xml", "test/api/changed-type.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -213,6 +238,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_TYPE, report.errors().iterator().next().error()); } + @Test public void testAddedFinalField() { String[] args = { "test/api/constants.xml", "test/api/changed-final.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -221,6 +247,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_FINAL, report.errors().iterator().next().error()); } + @Test public void testAddedFinalMethod() { String[] args = { "test/api/constants.xml", "test/api/changed-final2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -229,6 +256,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_FINAL, report.errors().iterator().next().error()); } + @Test public void testAddedFinalClass() { String[] args = { "test/api/constants.xml", "test/api/changed-final3.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -238,6 +266,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_FINAL, report.errors().iterator().next().error()); } + @Test public void testRemovedFinalClass() { String[] args = { "test/api/changed-final3.xml", "test/api/constants.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -247,6 +276,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_FINAL, report.errors().iterator().next().error()); } + @Test public void testAddedField() { String[] args = { "test/api/constants.xml", "test/api/added-field.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -255,6 +285,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_FIELD, report.errors().iterator().next().error()); } + @Test public void testRemovedField() { String[] args = { "test/api/added-field.xml", "test/api/constants.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -263,6 +294,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_FIELD, report.errors().iterator().next().error()); } + @Test public void testRemovedDeprecatedField() { String[] args = { "test/api/added-deprecated-field.xml", "test/api/constants.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -271,6 +303,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_DEPRECATED_FIELD, report.errors().iterator().next().error()); } + @Test public void testAddedMethod() { String[] args = { "test/api/constants.xml", "test/api/added-method.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -279,6 +312,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.ADDED_METHOD, report.errors().iterator().next().error()); } + @Test public void testRemovedMethod() { String[] args = { "test/api/added-method.xml", "test/api/constants.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -287,6 +321,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_METHOD, report.errors().iterator().next().error()); } + @Test public void testRemovedDeprecatedMethod() { String[] args = { "test/api/added-deprecated-method.xml", "test/api/constants.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -295,6 +330,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.REMOVED_DEPRECATED_METHOD, report.errors().iterator().next().error()); } + @Test public void testChangedStaticMethod() { String[] args = { "test/api/constants.xml", "test/api/changed-static.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -303,6 +339,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_STATIC, report.errors().iterator().next().error()); } + @Test public void testChangedStaticClass() { String[] args = { "test/api/constants.xml", "test/api/changed-static2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -311,6 +348,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_STATIC, report.errors().iterator().next().error()); } + @Test public void testChangedStaticField() { String[] args = { "test/api/constants.xml", "test/api/changed-static3.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -319,6 +357,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_STATIC, report.errors().iterator().next().error()); } + @Test public void testChangedTransient() { String[] args = { "test/api/constants.xml", "test/api/changed-transient.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -327,13 +366,15 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_TRANSIENT, report.errors().iterator().next().error()); } + @Test public void testChangedSynchronized() { String[] args = { "test/api/constants.xml", "test/api/changed-synchronized.xml" }; ApiCheck apiCheck = new ApiCheck(); Report report = apiCheck.checkApi(args); - assertEquals(0, report.errors().size()); + assertEquals(1, report.errors().size()); } + @Test public void testChangedVolatile() { String[] args = { "test/api/constants.xml", "test/api/changed-volatile.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -342,6 +383,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_VOLATILE, report.errors().iterator().next().error()); } + @Test public void testChangedNative() { String[] args = { "test/api/constants.xml", "test/api/changed-native.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -350,6 +392,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_NATIVE, report.errors().iterator().next().error()); } + @Test public void testChangedScopeMethod() { String[] args = { "test/api/constants.xml", "test/api/changed-scope.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -358,6 +401,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error()); } + @Test public void testChangedScopeClass() { String[] args = { "test/api/changed-scope.xml", "test/api/constants.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -366,6 +410,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error()); } + @Test public void testChangedScopeClass2() { String[] args = { "test/api/constants.xml", "test/api/changed-scope2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -374,6 +419,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error()); } + @Test public void testChangedScopeField() { String[] args = { "test/api/constants.xml", "test/api/changed-scope3.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -382,6 +428,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error()); } + @Test public void testChangedConstructorScope() { String[] args = { "test/api/constants.xml", "test/api/changed-scope4.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -390,6 +437,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_SCOPE, report.errors().iterator().next().error()); } + @Test public void testChangedMethodThrows() { String[] args = { "test/api/throws.xml", "test/api/removed-exception.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -398,6 +446,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_THROWS, report.errors().iterator().next().error()); } + @Test public void testChangedMethodThrows2() { String[] args = { "test/api/removed-exception.xml", "test/api/throws.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -406,6 +455,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_THROWS, report.errors().iterator().next().error()); } + @Test public void testChangedConstructorThrows() { String[] args = { "test/api/throws.xml", "test/api/added-exception.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -414,6 +464,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_THROWS, report.errors().iterator().next().error()); } + @Test public void testChangedConstructorThrows2() { String[] args = { "test/api/added-exception.xml", "test/api/throws.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -422,6 +473,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_THROWS, report.errors().iterator().next().error()); } + @Test public void testChangedMethodDeprecated() { String[] args = { "test/api/constants.xml", "test/api/changed-deprecated.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -430,6 +482,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_DEPRECATED, report.errors().iterator().next().error()); } + @Test public void testChangedConstructorDeprecated() { String[] args = { "test/api/constants.xml", "test/api/changed-deprecated2.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -438,6 +491,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_DEPRECATED, report.errors().iterator().next().error()); } + @Test public void testChangedFieldDeprecated() { String[] args = { "test/api/constants.xml", "test/api/changed-deprecated3.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -446,6 +500,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_DEPRECATED, report.errors().iterator().next().error()); } + @Test public void testChangedClassToInterface() { String[] args = { "test/api/changed-class-info2.xml", "test/api/changed-class-info.xml" }; ApiCheck apiCheck = new ApiCheck(); @@ -454,6 +509,7 @@ public class ApiCheckTest extends TestCase { assertEquals(Errors.CHANGED_CLASS, report.errors().iterator().next().error()); } + @Test public void testChangedInterfaceToClass() { String[] args = { "test/api/changed-class-info.xml", "test/api/changed-class-info2.xml" }; ApiCheck apiCheck = new ApiCheck(); -- cgit v1.2.3