package japicmp.test;
import com.google.common.base.Optional;
import japicmp.cmp.JApiCmpArchive;
import japicmp.cmp.JarArchiveComparator;
import japicmp.cmp.JarArchiveComparatorOptions;
import japicmp.config.Options;
import japicmp.model.AccessModifier;
import japicmp.model.JApiChangeStatus;
import japicmp.model.JApiClass;
import japicmp.output.stdout.StdoutOutputGenerator;
import japicmp.output.xml.XmlOutput;
import japicmp.output.xml.XmlOutputGenerator;
import japicmp.output.xml.XmlOutputGeneratorOptions;
import japicmp.output.xml.model.JApiCmpXmlRoot;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Arrays;
import java.util.List;
import static japicmp.test.util.Helper.getArchive;
import static japicmp.test.util.Helper.getJApiClass;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
public class MultipleArchivesTest {
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(createListOfOldArchives(), createListOfNewArchives());
}
private static List<JApiCmpArchive> createListOfOldArchives() {
return Arrays.asList(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test2-v1.jar"));
}
private static List<JApiCmpArchive> createListOfNewArchives() {
return Arrays.asList(getArchive("japicmp-test-v2.jar"), getArchive("japicmp-test2-v2.jar"));
}
@Test
public void testUnchangedClassOfBothArchives() {
JApiClass jApiClass = getJApiClass(jApiClasses, Unchanged.class.getName());
assertThat(jApiClass.getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
jApiClass = getJApiClass(jApiClasses, japicmp.test2.Unchanged.class.getName());
assertThat(jApiClass.getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
}
@Test
public void testStdoutputGenerator() {
Options options = Options.newDefault();
options.getOldArchives().addAll(createListOfOldArchives());
options.getNewArchives().addAll(createListOfNewArchives());
StdoutOutputGenerator generator = new StdoutOutputGenerator(options, jApiClasses);
String output = generator.generate();
assertThat(output.contains("=== UNCHANGED CLASS: PUBLIC japicmp.test.Unchanged"), is(true));
assertThat(output.contains("=== UNCHANGED CLASS: PUBLIC japicmp.test2.Unchanged"), is(true));
assertThat(output.contains("japicmp-test-v1.jar"), is(true));
assertThat(output.contains("japicmp-test-v2.jar"), is(true));
assertThat(output.contains("japicmp-test2-v1.jar"), is(true));
assertThat(output.contains("japicmp-test2-v2.jar"), is(true));
}
@Test
public void testXmlOutputGenerator() throws UnsupportedEncodingException {
Options options = Options.newDefault();
options.getOldArchives().addAll(createListOfOldArchives());
options.getNewArchives().addAll(createListOfNewArchives());
Path xmlOutputPath = Paths.get(System.getProperty("user.dir"), "target", "MultipleArchivesTest.xml");
options.setXmlOutputFile(Optional.of(xmlOutputPath.toString()));
XmlOutputGeneratorOptions xmlOutputGeneratorOptions = new XmlOutputGeneratorOptions();
xmlOutputGeneratorOptions.setCreateSchemaFile(false);
XmlOutputGenerator generator = new XmlOutputGenerator(jApiClasses, options, xmlOutputGeneratorOptions);
XmlOutput xmlOutput = generator.generate();
JApiCmpXmlRoot jApiCmpXmlRoot = xmlOutput.getJApiCmpXmlRoot();
assertThat(jApiCmpXmlRoot.getOldJar().contains("japicmp-test-v1.jar"), is(true));
assertThat(jApiCmpXmlRoot.getOldJar().contains("japicmp-test2-v1.jar"), is(true));
assertThat(jApiCmpXmlRoot.getNewJar().contains("japicmp-test-v2.jar"), is(true));
assertThat(jApiCmpXmlRoot.getNewJar().contains("japicmp-test2-v2.jar"), is(true));
List<JApiClass> classes = jApiCmpXmlRoot.getClasses();
assertThat(getJApiClass(classes, japicmp.test.Unchanged.class.getName()).getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
assertThat(getJApiClass(classes, japicmp.test2.Unchanged.class.getName()).getChangeStatus(), is(JApiChangeStatus.UNCHANGED));
}
}