public static List<Violation> filterRule(final List<Violation> all, final String rule) { final List<Violation> filtered = new ArrayList<>(); for (final Violation v : all) { if (v.getRule().equals(rule)) { filtered.add(v); } } return filtered; }
private StringBuilder toDetailed( final Iterable<Violation> violations, final String summarySubject) { final StringBuilder sb = new StringBuilder(); final List<String[]> rows = new ArrayList<>(); for (final Violation violation : violations) { final String message = addNewlines(violation.getMessage(), maxMessageColumnWidth); final String line = addNewlines(violation.getStartLine().toString(), maxLineColumnWidth); final String severity = addNewlines(violation.getSeverity().name(), maxSeverityColumnWidth); final String rule = addNewlines(violation.getRule(), maxRuleColumnWidth); final String reporter = addNewlines(violation.getReporter(), maxReporterColumnWidth); final String[] row = {reporter, rule, severity, line, message}; rows.add(row); } final String[] headers = {"Reporter", "Rule", "Severity", "Line", "Message"}; final String[][] data = rows.toArray(new String[][] {}); sb.append(FlipTable.of(headers, data)); sb.append("\n"); sb.append(toCompact(violations, summarySubject)); sb.append("\n"); return sb; }
@Test public void testThatSeverityAndRulenumberFromMisraTakesPrecedence() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pclint/.*\\.txt$") // .inFolder(rootFolder) // .findAll(PCLINT) // .violations(); Violation violation = actual.get(1); assertThat(violation.getRule()).isEqualTo("MISRA 2012 Rule 10.4, mandatory"); assertThat(violation.getSeverity()).isEqualTo(ERROR); violation = actual.get(2); assertThat(violation.getRule()).isEqualTo("MISRA 2012 Rule 1.3, required"); assertThat(violation.getSeverity()).isEqualTo(WARN); violation = actual.get(7); assertThat(violation.getRule()).isEqualTo("MISRA 2012 Rule 10.1, advisory"); assertThat(violation.getSeverity()).isEqualTo(INFO); assertThat(violation.getMessage()) .isEqualTo("Bad type (Error <a href=\"/userContent/LintMsgRef.html#48\">48</a>)"); } }
assertThat(actual.get(0).getSeverity()) // .isEqualTo(ERROR); assertThat(actual.get(0).getRule()) // .isEqualTo("ZPT"); assertThat(actual.get(0).getStartLine()) //
assertThat(actual.get(0).getSeverity()) // .isEqualTo(INFO); assertThat(actual.get(0).getRule()) // .isEqualTo("DUPLICATION"); assertThat(actual.get(0).getStartLine()) //
assertThat(actual.get(0).getSeverity()) // .isEqualTo(INFO); assertThat(actual.get(0).getRule()) // .isEqualTo("DUPLICATION"); assertThat(actual.get(0).getStartLine()) //
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pylint/.*\\.txt$") // .inFolder(rootFolder) // .findAll(PYLINT) // .violations(); assertThat(actual) // .hasSize(136); Violation violation = actual.get(0); assertThat(violation.getFile()) // .isEqualTo("marshmallow/schema.py"); assertThat(violation.getStartLine()) // .isEqualTo(190); assertThat(violation.getMessage()) // .isEqualTo("Wrong continued indentation (add 1 space)."); assertThat(violation.getSeverity()) // .isEqualTo(INFO); assertThat(violation.getRule()) // .isEqualTo("C0330(bad-continuation)"); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/gendarme/.*\\.xml$") // .inFolder(rootFolder) // .findAll(GENDARME) // .violations(); assertThat(actual) // .hasSize(28); assertThat(actual.get(0).getMessage()) // .startsWith("This me"); assertThat(actual.get(0).getFile()) // .isEqualTo("c:/Dev/src/hudson/Hudson.Domain/Dog.cs"); assertThat(actual.get(0).getSeverity()) // .isEqualTo(INFO); assertThat(actual.get(0).getRule()) // .isEqualTo("MethodCanBeMadeStaticRule"); assertThat(actual.get(0).getStartLine()) // .isEqualTo(10); assertThat(actual.get(0).getEndLine()) // .isEqualTo(10); assertThat(actual.get(5).getMessage()) // .startsWith("A constructor ca"); }
@Test public void testThatRubycopViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/clang/rubycop\\.txt$") // .inFolder(rootFolder) // .findAll(CLANG) // .violations(); assertThat(actual) // .hasSize(4); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo("Use snake_case for method names."); assertThat(violation0.getFile()) // .isEqualTo("test.rb"); assertThat(violation0.getSeverity()) // .isEqualTo(ERROR); assertThat(violation0.getRule()) // .isEqualTo(""); assertThat(violation0.getStartLine()) // .isEqualTo(1); assertThat(actual.get(3).getSeverity()) // .isEqualTo(WARN); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/doxygen/output.*\\.txt$") // .inFolder(rootFolder) // .findAll(CLANG) // .violations(); assertThat(actual) // .hasSize(3); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo( "argument 'index' of command @param is not found in the argument list of arm_min_q7(q7_t *pSrc, uint32_t blockSize, q7_t *pResult, uint32_t *pIndex)"); assertThat(violation0.getFile()) // .isEqualTo("./pump/external/specific/arm/cmsis_dsp/StatisticsFunctions/arm_min_q7.c"); assertThat(violation0.getSeverity()) // .isEqualTo(WARN); assertThat(violation0.getRule()) // .isEqualTo(""); assertThat(violation0.getStartLine()) // .isEqualTo(48); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/kotlinmaven/.*\\.txt") // .inFolder(rootFolder) // .findAll(KOTLINMAVEN) // .violations(); assertThat(actual) // .hasSize(29); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo("Unchecked cast: AssetDao<*> to DaoOperations.Read<T, UUID>"); assertThat(violation0.getFile()) // .isEqualTo( "/home/bjerre/workspace/kerub/src/main/kotlin/com/github/kerubistan/kerub/data/hub/AnyAssetDaoImpl.kt"); assertThat(violation0.getSeverity()) // .isEqualTo(WARN); assertThat(violation0.getRule()) // .isEqualTo(""); assertThat(violation0.getParser()) // .isEqualTo(KOTLINMAVEN); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/kotlingradle/.*\\.txt") // .inFolder(rootFolder) // .findAll(KOTLINGRADLE) // .violations(); assertThat(actual) // .hasSize(3); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo( "Elvis operator (?:) always returns the left operand of non-nullable type String"); assertThat(violation0.getFile()) // .isEqualTo("/Users/scottkennedy/project/src/main/java/com/example/Test.kt"); assertThat(violation0.getSeverity()) // .isEqualTo(WARN); assertThat(violation0.getRule()) // .isEqualTo(""); assertThat(violation0.getParser()) // .isEqualTo(KOTLINGRADLE); } }
@Test public void testThatViolationsCanBeParsed2() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*cpplint-result\\.xml$") // .inFolder(rootFolder) // .findAll(CPPLINT) // .violations(); assertThat(actual) // .hasSize(1); final Violation violation = actual.get(0); assertThat(violation.getMessage()) // .isEqualTo("Using C-style cast. Use reinterpret_cast<uint8_t *>(...) instead"); assertThat(violation.getFile()) // .isEqualTo("pump/src/hal/stm32f4xx/devices/spi/spi_unit0_com.c"); assertThat(violation.getSeverity()) // .isEqualTo(WARN); assertThat(violation.getRule()) // .isEqualTo("readability/casting"); assertThat(violation.getStartLine()) // .isEqualTo(737); assertThat(violation.getEndLine()) // .isEqualTo(737); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/arm-gcc/output.*\\.txt$") // .inFolder(rootFolder) // .findAll(CLANG) // .violations(); assertThat(actual) // .hasSize(4); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo("comparison between signed and unsigned integer expressions [-Wsign-compare]"); assertThat(violation0.getFile()) // .isEqualTo("../../external/specific/arm/cmsis/arm_math.h"); assertThat(violation0.getSeverity()) // .isEqualTo(WARN); assertThat(violation0.getRule()) // .isEqualTo(""); assertThat(violation0.getStartLine()) // .isEqualTo(5774); } }
@Test public void testThatViolationsCanBeParsed2() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/codenarc/SampleCodeNarc.*\\.xml$") // .inFolder(rootFolder) // .findAll(CODENARC) // .violations(); assertThat(actual) // .hasSize(79); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .isEqualTo( "Violations are triggered when an excessive set of consecutive statements all reference the same variable. This can be made more readable by using a with or identity block."); assertThat(violation0.getFile()) // .isEqualTo("src/test/groovy/org/codenarc/rule/AbstractAstVisitorRuleTest.groovy"); assertThat(violation0.getSeverity()) // .isEqualTo(INFO); assertThat(violation0.getRule()) // .isEqualTo("UnnecessaryObjectReferences"); assertThat(violation0.getStartLine()) // .isEqualTo(184); assertThat(violation0.getEndLine()) // .isEqualTo(184); }
@Test public void testThatViolationsCanBeParsedIfNoRuleset() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pmd/no-ruleset\\.xml$") // .inFolder(rootFolder) // .findAll(PMD) // .violations(); assertThat(actual) // .hasSize(3); final Violation violationZero = actual.get(0); assertThat(violationZero.getFile()) // .isEqualTo( "/home/cm/prod/workspace/applikation-mr-pipeline@3/applikation-web/src/main/java/pkg/applikation/application/Some.java"); assertThat(violationZero.getMessage()) // .isEqualTo("Applikationslagret får inte kommunicera uppåt.") // .doesNotContain("CDATA"); assertThat(violationZero.getStartLine()) // .isEqualTo(1); assertThat(violationZero.getEndLine()) // .isEqualTo(149); assertThat(violationZero.getRule()) // .isEqualTo("ApplicationAccessLimit"); assertThat(violationZero.getSeverity()) // .isEqualTo(ERROR); }
@Test public void testThatViolationsCanBeParsedMaven() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/googleErrorProne/googleErrorProneMaven\\.log$") // .inFolder(rootFolder) // .findAll(GOOGLEERRORPRONE) // .violations(); assertThat(actual) // .hasSize(1); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .endsWith("row new Exception();'?"); assertThat(violation0.getFile()) // .isEqualTo("../examples/maven/error_prone_should_flag/src/main/java/Main.java"); assertThat(violation0.getSeverity()) // .isEqualTo(ERROR); assertThat(violation0.getRule()) // .isEqualTo("DeadException"); assertThat(violation0.getStartLine()) // .isEqualTo(20); }
@Test public void testThatViolationsCanBeParsedGradleNullAway() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/googleErrorProne/nullAway\\.log$") // .inFolder(rootFolder) // .findAll(GOOGLEERRORPRONE) // .violations(); assertThat(actual) // .hasSize(2); final Violation violation0 = actual.get(0); assertThat(violation0.getMessage()) // .endsWith("nullaway )"); assertThat(violation0.getFile()) // .isEqualTo( "home/travis/build/leinardi/FloatingActionButtonSpeedDial/library/src/main/java/com/leinardi/android/speeddial/SpeedDialActionItem.java"); assertThat(violation0.getSeverity()) // .isEqualTo(ERROR); assertThat(violation0.getRule()) // .isEqualTo("NullAway"); assertThat(violation0.getStartLine()) // .isEqualTo(162); } }
@Test public void testThatViolationsCanBeParsed() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pmd/main\\.xml$") // .inFolder(rootFolder) // .findAll(PMD) // .violations(); assertThat(actual) // .hasSize(4); final Violation violationZero = actual.get(0); assertThat(violationZero.getFile()) // .isEqualTo("/src/main/java/se/bjurr/violations/lib/example/MyClass.java"); assertThat(violationZero.getMessage()) // .startsWith("Avoid empt") // .doesNotContain("CDATA"); assertThat(violationZero.getStartLine()) // .isEqualTo(9); assertThat(violationZero.getEndLine()) // .isEqualTo(11); assertThat(violationZero.getRule()) // .isEqualTo("EmptyIfStmt"); assertThat(violationZero.getSeverity()) // .isEqualTo(WARN); }
@Test public void testThatViolationsCanBeParsedCsvDelta() { final String rootFolder = getRootFolder(); final List<Violation> actual = violationsApi() // .withPattern(".*/pmd/csv-delta\\.xml$") // .inFolder(rootFolder) // .findAll(PMD) // .violations(); assertThat(actual) // .hasSize(5); final Violation violationZero = actual.get(0); assertThat(violationZero.getFile()) // .isEqualTo("src/CustomTableClass.java"); assertThat(violationZero.getMessage()) // .startsWith("Description") // .doesNotContain("CDATA"); assertThat(violationZero.getStartLine()) // .isEqualTo(1); assertThat(violationZero.getEndLine()) // .isEqualTo(1); assertThat(violationZero.getRule()) // .isEqualTo("RULE1"); assertThat(violationZero.getSeverity()) // .isEqualTo(WARN); }