package japicmp.test.output.stdout;
import com.google.common.base.Joiner;
import com.google.common.base.Predicate;
import com.google.common.base.Splitter;
import com.google.common.collect.FluentIterable;
import com.google.common.collect.ImmutableList;
import japicmp.cmp.JarArchiveComparator;
import japicmp.cmp.JarArchiveComparatorOptions;
import japicmp.config.Options;
import japicmp.filter.JavadocLikePackageFilter;
import japicmp.model.JApiClass;
import japicmp.output.stdout.StdoutOutputGenerator;
import org.junit.Test;
import java.util.List;
import static japicmp.test.util.Helper.getArchive;
import static org.hamcrest.CoreMatchers.containsString;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
public class StdoutOutputGeneratorTest {
@Test
public void test() {
JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(new JarArchiveComparatorOptions());
List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
Options options = Options.newDefault();
options.setOutputOnlyModifications(true);
StdoutOutputGenerator generator = new StdoutOutputGenerator(options, jApiClasses);
String string = generator.generate();
assertThat(string, containsString("+++ NEW CLASS: PUBLIC(+) japicmp.test.Added"));
assertThat(string, containsString("---! REMOVED CLASS: PUBLIC(-) japicmp.test.Removed"));
assertThat(string, containsString("***! MODIFIED CLASS: PUBLIC STATIC japicmp.test.Superclasses$SuperClassChanges"));
assertThat(string, containsString("***! MODIFIED SUPERCLASS: japicmp.test.Superclasses$SuperclassB (<- japicmp.test.Superclasses$SuperclassA)"));
assertThat(string, containsString("=== UNCHANGED CLASS: PUBLIC japicmp.test.Annotations$AuthorAnnotationGetsNewValue"));
assertThat(string, containsString("\t*** MODIFIED ANNOTATION: japicmp.test.Annotations$Author"));
assertThat(string, containsString("=== UNCHANGED CLASS: PUBLIC japicmp.test.Annotations"));
assertThat(string, containsString("\t=== UNCHANGED FIELD: PUBLIC int fieldAnnotationValueModified"));
assertThat(string, containsString("\t\t*** MODIFIED ANNOTATION: japicmp.test.Annotations$FieldAnnotation"));
assertNoToStringModel(string);
}
private void assertNoToStringModel(String string) {
ImmutableList<String> toString = FluentIterable.from(Splitter.on("\n").split(string)).filter(new Predicate<String>() {
@Override
public boolean apply(String input) {
return input.contains("japicmp.model.");
}
}).toList();
assertEquals("", Joiner.on("\n").join(toString));
}
@Test
public void testOnlyModificationsAnnotationAddedToConstructor() {
JarArchiveComparatorOptions jarArchiveComparatorOptions = new JarArchiveComparatorOptions();
jarArchiveComparatorOptions.getFilters().getIncludes().add(new JavadocLikePackageFilter("japicmp.test.annotation"));
JarArchiveComparator jarArchiveComparator = new JarArchiveComparator(jarArchiveComparatorOptions);
List<JApiClass> jApiClasses = jarArchiveComparator.compare(getArchive("japicmp-test-v1.jar"), getArchive("japicmp-test-v2.jar"));
Options options = Options.newDefault();
options.setOutputOnlyModifications(true);
StdoutOutputGenerator generator = new StdoutOutputGenerator(options, jApiClasses);
String string = generator.generate();
assertThat(string, containsString("=== UNCHANGED CLASS: PUBLIC japicmp.test.annotation.AnnotationAddedToConstructor"));
}
}