package hudson.plugins.violations.types.simian;
import static org.junit.Assert.*;
import org.junit.Test;
import java.io.File;
import java.io.IOException;
import java.util.Iterator;
import java.net.URISyntaxException;
import java.net.URL;
import hudson.plugins.violations.model.FullBuildModel;
import hudson.plugins.violations.model.Violation;
public class SimianParserTest {
private FullBuildModel getFullBuildModel(String filename) throws IOException {
URL url = getClass().getResource(filename);
File xmlFile;
try {
xmlFile = new File(url.toURI());
} catch(URISyntaxException e) {
xmlFile = new File(url.getPath());
}
SimianParser parser = new SimianParser();
FullBuildModel model = new FullBuildModel();
parser.parse(model, xmlFile.getParentFile(), xmlFile.getName(), null);
model.cleanup();
return model;
}
@Test
public void testOneFileParsing() throws Exception {
FullBuildModel model = getFullBuildModel("onefile.xml");
assertEquals("Number of violations is incorrect", 2, model.getCountNumber(SimianParser.TYPE_NAME));
assertEquals("Number of files is incorrect", 1, model.getFileModelMap().size());
}
@Test
public void testOneFilePopupMessage() throws Exception {
FullBuildModel model = getFullBuildModel("onefile.xml");
Iterator<Violation> iterator = model.getFileModel("java/hudson/maven/MavenBuild.java").getTypeMap().get("simian").descendingIterator();
Violation v = iterator.next();
assertEquals("Popup message in violation is incorrect", "Duplication of 6 lines from line 76.", v.getPopupMessage());
v = iterator.next();
assertEquals("Popup message in violation is incorrect", "Duplication of 6 lines from line 93.", v.getPopupMessage());
}
@Test
public void testOneFileMessage() throws Exception {
FullBuildModel model = getFullBuildModel("onefile.xml");
Iterator<Violation> iterator = model.getFileModel("java/hudson/maven/MavenBuild.java").getTypeMap().get("simian").descendingIterator();
Violation v = iterator.next();
assertEquals("Message in violation is incorrect", "Duplication of 6 lines from <a href='#line76'>line 76</a>.", v.getMessage());
v = iterator.next();
assertEquals("Message in violation is incorrect", "Duplication of 6 lines from <a href='#line93'>line 93</a>.", v.getMessage());
}
@Test
public void testTwoFileParsing() throws Exception {
FullBuildModel model = getFullBuildModel("twofile.xml");
assertEquals("Number of violations is incorrect", 2, model.getCountNumber(SimianParser.TYPE_NAME));
assertEquals("Number of files is incorrect", 2, model.getFileModelMap().size());
}
@Test
public void testTwoFilePopupMessage() throws Exception {
FullBuildModel model = getFullBuildModel("twofile.xml");
Iterator<Violation> iterator = model.getFileModel("java/hudson/maven/MavenBuild.java").getTypeMap().get(SimianParser.TYPE_NAME).descendingIterator();
Violation v = iterator.next();
assertEquals("Popup message in violation is incorrect", "Duplication of 6 lines from line 61 in MatrixRun.java.", v.getPopupMessage());
iterator = model.getFileModel("java/hudson/matrix/MatrixRun.java").getTypeMap().get(SimianParser.TYPE_NAME).descendingIterator();
v = iterator.next();
assertEquals("Popup message in violation is incorrect", "Duplication of 6 lines from line 92 in MavenBuild.java.", v.getPopupMessage());
}
@Test
public void testTwoFileMessage() throws Exception {
FullBuildModel model = getFullBuildModel("twofile.xml");
Iterator<Violation> iterator = model.getFileModel("java/hudson/maven/MavenBuild.java").getTypeMap().get("simian").descendingIterator();
Violation v = iterator.next();
assertEquals("Message in violation is incorrect", "Duplication of 6 lines from <a href='../../matrix/MatrixRun.java#line61'>line 61 in MatrixRun.java</a>.", v.getMessage());
iterator = model.getFileModel("java/hudson/matrix/MatrixRun.java").getTypeMap().get(SimianParser.TYPE_NAME).descendingIterator();
v = iterator.next();
assertEquals("Popup message in violation is incorrect", "Duplication of 6 lines from <a href='../../maven/MavenBuild.java#line92'>line 92 in MavenBuild.java</a>.", v.getMessage());
}
@Test
public void testTwoSetsParsing() throws Exception {
FullBuildModel model = getFullBuildModel("twosets.xml");
assertEquals("Number of violations is incorrect", 4, model.getCountNumber(SimianParser.TYPE_NAME));
assertEquals("Number of files is incorrect", 2, model.getFileModelMap().size());
}
@Test
public void testFourFileMessages() throws Exception {
FullBuildModel model = getFullBuildModel("fourfile.xml");
Iterator<Violation> iterator = model.getFileModel("java/foo1.java").getTypeMap().get(SimianParser.TYPE_NAME).descendingIterator();
Violation v = iterator.next();
assertEquals("Popup message in violation is incorrect", "Duplication of 6 lines from "
+ "line 21 in foo2.java, "
+ "line 31 in foo3.java "
+ "and line 41 in foo4.java.", v.getPopupMessage());
assertEquals("Popup message in violation is incorrect", "Duplication of 6 lines from "
+ "<a href='../foo2.java#line21'>line 21 in foo2.java</a>, "
+ "<a href='../foo3.java#line31'>line 31 in foo3.java</a> and "
+ "<a href='../foo4.java#line41'>line 41 in foo4.java</a>.", v.getMessage());
}
}