@Test public void testJavaSurefireDontCrashAnalysis() throws Exception { File surefireReport = new File(baseDir, "reports/TEST-FooTest.xml"); FileUtils.write( surefireReport, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" + "<testsuite name=\"FooTest\" time=\"0.121\" tests=\"1\" errors=\"0\" skipped=\"0\" failures=\"0\">\n" + "<testcase name=\"errorAnalysis\" classname=\"FooTest\" time=\"0.031\"/>\n" + "</testsuite>"); ClientInputFile inputFile = prepareInputFile( "Foo.java", "public class Foo {\n" + " public void foo() {\n" + " int x;\n" + " System.out.println(\"Foo\");\n" + " System.out.println(\"Foo\"); //NOSONAR\n" + " }\n" + "}", false); ClientInputFile inputFileTest = prepareInputFile( "FooTest.java", "public class FooTest {\n" + " public void testFoo() {\n" + " }\n" + "}", true); final List<Issue> issues = new ArrayList<>(); AnalysisResults results = sonarlint.analyze( new StandaloneAnalysisConfiguration( baseDir.toPath(), temp.newFolder().toPath(), Arrays.asList(inputFile, inputFileTest), ImmutableMap.of("sonar.junit.reportsPath", "reports/")), issue -> issues.add(issue)); assertThat(results.fileCount()).isEqualTo(2); assertThat(issues) .extracting("ruleKey", "startLine", "inputFile.path") .containsOnly( tuple("squid:S106", 4, inputFile.getPath()), tuple("squid:S1220", null, inputFile.getPath()), tuple("squid:UndocumentedApi", 1, inputFile.getPath()), tuple("squid:UndocumentedApi", 2, inputFile.getPath()), tuple("squid:S1481", 3, inputFile.getPath()), tuple("squid:S2187", 1, inputFileTest.getPath())); }