package japicmp.test.output.xml;
import japicmp.model.AccessModifier;
import japicmp.model.JApiClass;
import japicmp.test.ClassType;
import japicmp.test.util.Helper;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import org.junit.BeforeClass;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.nio.charset.Charset;
import java.nio.file.Paths;
import java.util.List;
import static japicmp.test.output.xml.XmlHelper.getDivForClass;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertThat;
public class XmlOutputGeneratorClassTypeTest {
private static Document documentPublic;
@BeforeClass
public static void beforeClass() throws IOException {
List<JApiClass> jApiClasses = Helper.compareTestV1WithTestV2(AccessModifier.PUBLIC);
Helper.generateHtmlOutput(jApiClasses, "target/diff_public.xml", "target/diff_public.html", false, AccessModifier.PUBLIC);
File htmlFilePublic = Paths.get(System.getProperty("user.dir"), "target", "diff_public.html").toFile();
documentPublic = Jsoup.parse(htmlFilePublic, Charset.forName("UTF-8").toString());
}
@Test
public void testClassToAnnotation() {
assertThatClassHeaderContains(ClassType.ClassToAnnotation.class, createHtmlChangeText("class", "annotation"));
}
@Test
public void testClassToClass() {
assertThatClassHeaderContains(ClassType.ClassToClass.class, createHtmlChangeText("class", "class"));
}
@Test
public void testClassToEnum() {
assertThatClassHeaderContains(ClassType.ClassToEnum.class, createHtmlChangeText("class", "enum"));
}
@Test
public void testClassToInterface() {
assertThatClassHeaderContains(ClassType.ClassToInterface.class, createHtmlChangeText("class", "interface"));
}
@Test
public void testAnnotationToAnnotation() {
assertThatClassHeaderContains(ClassType.AnnotationToAnnotation.class, createHtmlChangeText("annotation", "annotation"));
}
@Test
public void testAnnotationToClass() {
assertThatClassHeaderContains(ClassType.AnnotationToClass.class, createHtmlChangeText("annotation", "class"));
}
@Test
public void testAnnotationToEnum() {
assertThatClassHeaderContains(ClassType.AnnotationToEnum.class, createHtmlChangeText("annotation", "enum"));
}
@Test
public void testAnnotationToInterface() {
assertThatClassHeaderContains(ClassType.AnnotationToInterface.class, createHtmlChangeText("annotation", "interface"));
}
@Test
public void testEnumToAnnotation() {
assertThatClassHeaderContains(ClassType.EnumToAnnotation.class, createHtmlChangeText("enum", "annotation"));
}
@Test
public void testEnumToClass() {
assertThatClassHeaderContains(ClassType.EnumToClass.class, createHtmlChangeText("enum", "class"));
}
@Test
public void testEnumToEnum() {
assertThatClassHeaderContains(ClassType.EnumToEnum.class, createHtmlChangeText("enum", "enum"));
}
@Test
public void testEnumToInterface() {
assertThatClassHeaderContains(ClassType.EnumToInterface.class, createHtmlChangeText("enum", "interface"));
}
@Test
public void testInterfaceToAnnotation() {
assertThatClassHeaderContains(ClassType.InterfaceToAnnotation.class, createHtmlChangeText("interface", "annotation"));
}
@Test
public void testInterfaceToClass() {
assertThatClassHeaderContains(ClassType.InterfaceToClass.class, createHtmlChangeText("interface", "class"));
}
@Test
public void testInterfaceToEnum() {
assertThatClassHeaderContains(ClassType.InterfaceToEnum.class, createHtmlChangeText("interface", "enum"));
}
@Test
public void testInterfaceToInterface() {
assertThatClassHeaderContains(ClassType.InterfaceToInterface.class, createHtmlChangeText("interface", "interface"));
}
private void assertThatClassHeaderContains(Class<?> aClass, String htmlText) {
Elements elements = getDivForClass(documentPublic, aClass.getName()).select("div.class_header > span.label > span");
assertThat(elements.size(), is(not(0)));
boolean found = false;
for (Element element : elements) {
if (element.html().contains(htmlText)) {
found = true;
}
}
assertThat(found, is(true));
}
private String createHtmlChangeText(String from, String to) {
if (from.equals(to)) {
return from;
}
return to + " (<- " + from + ")";
}
}