package japicmp.test; import com.google.common.base.Optional; import japicmp.cmp.JarArchiveComparator; import japicmp.cmp.JarArchiveComparatorOptions; import japicmp.model.AccessModifier; import japicmp.model.JApiChangeStatus; import japicmp.model.JApiClass; import japicmp.model.TransientModifier; import org.junit.BeforeClass; import org.junit.Test; import java.util.List; import static japicmp.test.util.Helper.*; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class FieldsTest { private static List<JApiClass> jApiClasses; @BeforeClass public static void beforeClass() { JarArchiveComparatorOptions options = new JarArchiveComparatorOptions(); options.setAccessModifier(AccessModifier.PRIVATE); JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options); jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar")); } @Test public void testPrivateToPublicField() { JApiClass fieldsClass = getJApiClass(jApiClasses, Fields.class.getName()); assertThat(fieldsClass.getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "privateToPublicField").getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "privateToPublicField").getAccessModifier().getOldModifier(), is(Optional.of(AccessModifier.PRIVATE))); assertThat(getJApiField(fieldsClass.getFields(), "privateToPublicField").getAccessModifier().getNewModifier(), is(Optional.of(AccessModifier.PUBLIC))); } @Test public void testPrivateToProtectedField() { JApiClass fieldsClass = getJApiClass(jApiClasses, Fields.class.getName()); assertThat(fieldsClass.getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "privateToProtectedField").getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "privateToProtectedField").getAccessModifier().getOldModifier(), is(Optional.of(AccessModifier.PRIVATE))); assertThat(getJApiField(fieldsClass.getFields(), "privateToProtectedField").getAccessModifier().getNewModifier(), is(Optional.of(AccessModifier.PROTECTED))); } @Test public void testPrivateToPackageProctedField() { JApiClass fieldsClass = getJApiClass(jApiClasses, Fields.class.getName()); assertThat(fieldsClass.getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "privateToPackageProctedField").getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "privateToPackageProctedField").getAccessModifier().getOldModifier(), is(Optional.of(AccessModifier.PRIVATE))); assertThat(getJApiField(fieldsClass.getFields(), "privateToPackageProctedField").getAccessModifier().getNewModifier(), is(Optional.of(AccessModifier.PACKAGE_PROTECTED))); } @Test public void test() { JApiClass fieldsClass = getJApiClass(jApiClasses, Fields.class.getName()); assertThat(fieldsClass.getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "privateRemainsPrivateField").getChangeStatus(), is(JApiChangeStatus.UNCHANGED)); assertThat(getJApiField(fieldsClass.getFields(), "privateRemainsPrivateField").getAccessModifier().getOldModifier(), is(Optional.of(AccessModifier.PRIVATE))); assertThat(getJApiField(fieldsClass.getFields(), "privateRemainsPrivateField").getAccessModifier().getNewModifier(), is(Optional.of(AccessModifier.PRIVATE))); } @Test public void testTransientToNonTransient() { JApiClass fieldsClass = getJApiClass(jApiClasses, Fields.class.getName()); assertThat(fieldsClass.getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "transientToNonTransient").getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "transientToNonTransient").getTransientModifier().getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "transientToNonTransient").getTransientModifier().getOldModifier(), is(Optional.of(TransientModifier.TRANSIENT))); assertThat(getJApiField(fieldsClass.getFields(), "transientToNonTransient").getTransientModifier().getNewModifier(), is(Optional.of(TransientModifier.NON_TRANSIENT))); } @Test public void testNonTransientToTransient() { JApiClass fieldsClass = getJApiClass(jApiClasses, Fields.class.getName()); assertThat(fieldsClass.getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "nonTransientToTransient").getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "nonTransientToTransient").getTransientModifier().getChangeStatus(), is(JApiChangeStatus.MODIFIED)); assertThat(getJApiField(fieldsClass.getFields(), "nonTransientToTransient").getTransientModifier().getOldModifier(), is(Optional.of(TransientModifier.NON_TRANSIENT))); assertThat(getJApiField(fieldsClass.getFields(), "nonTransientToTransient").getTransientModifier().getNewModifier(), is(Optional.of(TransientModifier.TRANSIENT))); } }