package hudson.plugins.violations.types.jslint; import static org.junit.Assert.*; import hudson.plugins.violations.model.FullBuildModel; import hudson.plugins.violations.model.Severity; import hudson.plugins.violations.model.Violation; import hudson.plugins.violations.types.jslint.JsLintParser; import java.io.File; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.util.Iterator; import org.junit.Test; public class JsLintParserTest { 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()); } JsLintParser parser = new JsLintParser(); FullBuildModel model = new FullBuildModel(); parser.parse(model, xmlFile.getParentFile(), xmlFile.getName(), null); model.cleanup(); return model; } @Test public void testParseWithSingleFile() throws Exception { FullBuildModel model = getFullBuildModel("single.xml"); // check number of violations and number of files assertEquals(51, model.getCountNumber(JsLintParser.TYPE_NAME)); assertEquals(1, model.getFileModelMap().size()); assertPrototype(model); } @Test public void testParseWithMultipleFile() throws Exception { FullBuildModel model = getFullBuildModel("multi.xml"); assertEquals(102, model.getCountNumber(JsLintParser.TYPE_NAME)); assertEquals(2, model.getFileModelMap().size()); assertScriptaculous(model); assertPrototype(model); } private void assertPrototype(FullBuildModel model) { Iterator<Violation> iterator = model.getFileModel("duckworth/hudson-jslint-freestyle/src/prototype.js").getTypeMap().get(JsLintParser.TYPE_NAME).iterator(); // check the first two violations Violation v = iterator.next(); assertEquals("Expected 'Version' to have an indentation at 5 instead at 3.", v.getPopupMessage()); assertEquals(10, v.getLine()); assertEquals(Severity.MEDIUM, v.getSeverity()); assertEquals("1',", v.getSource()); v = iterator.next(); assertEquals("Expected 'Browser' to have an indentation at 5 instead at 3.", v.getPopupMessage()); assertEquals(12, v.getLine()); assertEquals(Severity.MEDIUM, v.getSeverity()); assertEquals(" Browser: (function(){", v.getSource()); // check the last violation while (iterator.hasNext()) { v = iterator.next(); } assertEquals("Too many errors. (0% scanned).", v.getPopupMessage()); assertEquals(46, v.getLine()); assertEquals(Severity.MEDIUM, v.getSeverity()); assertEquals("", v.getSource()); } private void assertScriptaculous(FullBuildModel model) { Iterator<Violation> iterator = model.getFileModel("duckworth/hudson-jslint-freestyle/src/scriptaculous.js").getTypeMap().get(JsLintParser.TYPE_NAME).iterator(); // check the first two violations Violation v = iterator.next(); assertEquals("Expected 'Version' to have an indentation at 5 instead at 3.", v.getPopupMessage()); assertEquals(27, v.getLine()); assertEquals(Severity.MEDIUM, v.getSeverity()); assertEquals("3',", v.getSource()); v = iterator.next(); assertEquals("Expected 'require' to have an indentation at 5 instead at 3.", v.getPopupMessage()); assertEquals(28, v.getLine()); assertEquals(Severity.MEDIUM, v.getSeverity()); assertEquals(" require: function(libraryName) {", v.getSource()); // check the last violation while (iterator.hasNext()) { v = iterator.next(); } assertEquals("Too many errors. (83% scanned).", v.getPopupMessage()); assertEquals(57, v.getLine()); assertEquals(Severity.MEDIUM, v.getSeverity()); assertEquals("", v.getSource()); } }