package japicmp.test;
import japicmp.cmp.JarArchiveComparator;
import japicmp.cmp.JarArchiveComparatorOptions;
import japicmp.model.BridgeModifier;
import japicmp.model.JApiClass;
import japicmp.model.JApiMethod;
import japicmp.model.SyntheticModifier;
import org.junit.BeforeClass;
import org.junit.Test;
import java.util.List;
import static japicmp.test.util.Helper.getArchive;
import static japicmp.test.util.Helper.getJApiClass;
import static org.hamcrest.CoreMatchers.is;
import static org.junit.Assert.assertThat;
public class BridgeMethodsTest {
private static List<JApiClass> jApiClasses;
@BeforeClass
public static void beforeClass() {
JarArchiveComparatorOptions options = new JarArchiveComparatorOptions();
options.setIncludeSynthetic(true);
JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(options);
jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
}
@Test
public void testBridgeModiferSet() {
JApiClass jApiClass = getJApiClass(jApiClasses, BridgeMethods.MyNode.class.getName());
boolean setDataWithObjectArgFound = false;
boolean setDataWithIntegerArgFound = false;
boolean getDataWithObjectReturnTypeFound = false;
boolean getDataWithIntegerReturnTypeFound = false;
for (JApiMethod jApiMethod : jApiClass.getMethods()) {
String name = jApiMethod.getName();
if (name.equals("setData")) {
if (jApiMethod.getParameters().get(0).getType().equals("java.lang.Object")) {
setDataWithObjectArgFound = true;
assertThat(jApiMethod.getBridgeModifier().getOldModifier().get(), is(BridgeModifier.BRIDGE));
assertThat(jApiMethod.getBridgeModifier().getNewModifier().get(), is(BridgeModifier.BRIDGE));
assertThat(jApiMethod.getSyntheticModifier().getOldModifier().get(), is(SyntheticModifier.SYNTHETIC));
assertThat(jApiMethod.getSyntheticModifier().getNewModifier().get(), is(SyntheticModifier.SYNTHETIC));
}
if (jApiMethod.getParameters().get(0).getType().equals("java.lang.Integer")) {
setDataWithIntegerArgFound = true;
assertThat(jApiMethod.getBridgeModifier().getOldModifier().get(), is(BridgeModifier.NON_BRIDGE));
assertThat(jApiMethod.getBridgeModifier().getNewModifier().get(), is(BridgeModifier.NON_BRIDGE));
assertThat(jApiMethod.getSyntheticModifier().getOldModifier().get(), is(SyntheticModifier.NON_SYNTHETIC));
assertThat(jApiMethod.getSyntheticModifier().getNewModifier().get(), is(SyntheticModifier.NON_SYNTHETIC));
}
}
if (name.equals("getData")) {
if (jApiMethod.getReturnType().getNewReturnType().equals("java.lang.Object")) {
getDataWithObjectReturnTypeFound = true;
assertThat(jApiMethod.getBridgeModifier().getNewModifier().get(), is(BridgeModifier.BRIDGE));
assertThat(jApiMethod.getSyntheticModifier().getNewModifier().get(), is(SyntheticModifier.SYNTHETIC));
}
if (jApiMethod.getReturnType().getNewReturnType().equals("java.lang.Integer")) {
getDataWithIntegerReturnTypeFound = true;
assertThat(jApiMethod.getBridgeModifier().getNewModifier().get(), is(BridgeModifier.NON_BRIDGE));
assertThat(jApiMethod.getSyntheticModifier().getNewModifier().get(), is(SyntheticModifier.NON_SYNTHETIC));
}
}
}
assertThat(setDataWithObjectArgFound, is(true));
assertThat(setDataWithIntegerArgFound, is(true));
assertThat(getDataWithObjectReturnTypeFound, is(true));
assertThat(getDataWithIntegerReturnTypeFound, is(true));
}
}