def test_no_java_file(self): quality = QualityReporter(FindbugsXmlDriver()) file_paths = ['file1.coffee', 'subdir/file2.js'] # Expect that we get no results because no Java files for path in file_paths: result = quality.violations(path) self.assertEqual(result, [])
def test_no_java_file(self): quality = QualityReporter(FindbugsXmlDriver()) file_paths = ["file1.coffee", "subdir/file2.js"] # Expect that we get no results because no Java files for path in file_paths: result = quality.violations(path) assert result == []
pydocstyle_driver, pyflakes_driver, ) QUALITY_DRIVERS = { "cppcheck": CppcheckDriver(), "pycodestyle": pycodestyle_driver, "pyflakes": pyflakes_driver, "pylint": PylintDriver(), "flake8": flake8_driver, "jshint": jshint_driver, "eslint": eslint_driver, "pydocstyle": pydocstyle_driver, "checkstyle": checkstyle_driver, "checkstylexml": CheckstyleXmlDriver(), "findbugs": FindbugsXmlDriver(), "pmd": PmdXmlDriver(), } VIOLATION_CMD_HELP = "Which code quality tool to use (%s)" % "/".join( sorted(QUALITY_DRIVERS)) INPUT_REPORTS_HELP = "Which violations reports to use" OPTIONS_HELP = "Options to be passed to the violations tool" INCLUDE_HELP = "Files to include (glob pattern)" LOGGER = logging.getLogger(__name__) def parse_quality_args(argv): """ Parse command line arguments, returning a dict of
) from diff_cover.violationsreporters.java_violations_reporter import ( CheckstyleXmlDriver, checkstyle_driver, FindbugsXmlDriver, PmdXmlDriver) QUALITY_DRIVERS = { 'cppcheck' : CppcheckDriver(), 'pycodestyle': pycodestyle_driver, 'pyflakes': pyflakes_driver, 'pylint': PylintDriver(), 'flake8': flake8_driver, 'jshint': jshint_driver, 'eslint': eslint_driver, 'pydocstyle': pydocstyle_driver, 'checkstyle': checkstyle_driver, 'checkstylexml': CheckstyleXmlDriver(), 'findbugs': FindbugsXmlDriver(), 'pmd': PmdXmlDriver() } VIOLATION_CMD_HELP = "Which code quality tool to use (%s)" % "/".join(sorted(QUALITY_DRIVERS)) INPUT_REPORTS_HELP = "Which violations reports to use" OPTIONS_HELP = "Options to be passed to the violations tool" LOGGER = logging.getLogger(__name__) def parse_quality_args(argv): """ Parse command line arguments, returning a dict of valid options:
def test_quality_pregenerated_report(self): # When the user provides us with a pre-generated findbugs report # then use that instead of calling findbugs directly. findbugs_reports = [ BytesIO(dedent(""" <?xml version="1.0" encoding="UTF-8"?> <BugCollection sequence="0" release="" analysisTimestamp="1512755361404" version="3.0.1" timestamp="1512755226000"> <BugInstance instanceOccurrenceNum="0" instanceHash="1967bf8c4d25c6b964f30356014aa9fb" rank="20" abbrev="Dm" category="I18N" priority="3" type="DM_CONVERT_CASE" instanceOccurrenceMax="0"> <ShortMessage>Consider using Locale parameterized version of invoked method</ShortMessage> <LongMessage>Use of non-localized String.toUpperCase() or String.toLowerCase() in org.opensource.sample.file$1.isMultipart(HttpServletRequest)</LongMessage> <Class classname="org.opensource.sample.file$1" primary="true"> <SourceLine classname="org.opensource.sample.file$1" start="94" end="103" sourcepath="path/to/file.java" sourcefile="file.java"> <Message>At file.java:[lines 94-103]</Message> </SourceLine> <Message>In class org.opensource.sample.file$1</Message> </Class> <Method isStatic="false" classname="org.opensource.sample.file$1" signature="(Ljavax/servlet/http/HttpServletRequest;)Z" name="isMultipart" primary="true"> <SourceLine endBytecode="181" classname="org.opensource.sample.file$1" start="97" end="103" sourcepath="file1.java" sourcefile="file1.java" startBytecode="0" /> <Message>In method org.opensource.sample.file$1.isMultipart(HttpServletRequest)</Message> </Method> <SourceLine endBytecode="6" classname="org.opensource.sample.file$1" start="97" end="97" sourcepath="path/to/file.java" sourcefile="file.java" startBytecode="6" primary="true"> <Message>At file.java:[line 97]</Message> </SourceLine> <SourceLine role="SOURCE_LINE_ANOTHER_INSTANCE" endBytecode="55" classname="org.opensource.sample.file$1" start="103" end="104" sourcepath="another/file.java" sourcefile="file.java" startBytecode="55"> <Message>Another occurrence at file.java:[line 103, 104]</Message> </SourceLine> </BugInstance> </BugCollection> """).strip().encode('utf-8')), BytesIO(dedent(""" <?xml version="1.0" encoding="UTF-8"?> <BugCollection sequence="0" release="" analysisTimestamp="1512755361404" version="3.0.1" timestamp="1512755226000"> <BugInstance instanceOccurrenceNum="0" instanceHash="1967bf8c4d25c6b964f30356014aa9fb" rank="20" abbrev="Dm" category="I18N" priority="3" type="DM_CONVERT_CASE" instanceOccurrenceMax="0"> <ShortMessage>Consider using Locale parameterized version of invoked method</ShortMessage> <LongMessage>Use of non-localized String.toUpperCase() or String.toLowerCase() in org.opensource.sample.file$1.isMultipart(HttpServletRequest)</LongMessage> <Class classname="org.opensource.sample.file$1" primary="true"> <SourceLine classname="org.opensource.sample.file$1" start="94" end="103" sourcepath="path/to/file.java" sourcefile="file.java"> <Message>At file.java:[lines 94-103]</Message> </SourceLine> <Message>In class org.opensource.sample.file$1</Message> </Class> <Method isStatic="false" classname="org.opensource.sample.file$1" signature="(Ljavax/servlet/http/HttpServletRequest;)Z" name="isMultipart" primary="true"> <SourceLine endBytecode="181" classname="org.opensource.sample.file$1" start="97" end="103" sourcepath="file1.java" sourcefile="file1.java" startBytecode="0" /> <Message>In method org.opensource.sample.file$1.isMultipart(HttpServletRequest)</Message> </Method> <SourceLine endBytecode="6" classname="org.opensource.sample.file$1" start="183" end="183" sourcepath="path/to/file.java" sourcefile="file.java" startBytecode="6" primary="true"> <Message>At file.java:[line 97]</Message> </SourceLine> <SourceLine role="SOURCE_LINE_ANOTHER_INSTANCE" endBytecode="55" classname="org.opensource.sample.file$1" start="183" end="183" sourcepath="another/file.java" sourcefile="file.java" startBytecode="55"> <Message>Another occurrence at file.java:[line 183]</Message> </SourceLine> </BugInstance> </BugCollection> """).strip().encode('utf-8')), # this is a violation which is not bounded to a specific line. We'll skip those BytesIO(dedent(""" <?xml version="1.0" encoding="UTF-8"?> <BugCollection sequence="0" release="" analysisTimestamp="1512755361404" version="3.0.1" timestamp="1512755226000"> <BugInstance instanceOccurrenceNum="0" instanceHash="2820338ec68e2e75a81848c95d31167f" rank="19" abbrev="Se" category="BAD_PRACTICE" priority="3" type="SE_BAD_FIELD" instanceOccurrenceMax="0"> <ShortMessage>Non-transient non-serializable instance field in serializable class</ShortMessage> <LongMessage>Class org.opensource.sample.file defines non-transient non-serializable instance field</LongMessage> <SourceLine synthetic="true" classname="org.opensource.sample.file" sourcepath="path/to/file.java" sourcefile="file.java"> <Message>In file.java</Message> </SourceLine> </BugInstance> </BugCollection> """).strip().encode('utf-8')) ] # Generate the violation report quality = QualityReporter(FindbugsXmlDriver(), reports=findbugs_reports) # Expect that we get the right violations expected_violations = [ Violation(97, 'I18N: Consider using Locale parameterized version of invoked method'), Violation(183, 'I18N: Consider using Locale parameterized version of invoked method') ] # We're not guaranteed that the violations are returned # in any particular order. actual_violations = quality.violations('path/to/file.java') self.assertEqual(len(actual_violations), len(expected_violations)) for expected in expected_violations: self.assertIn(expected, actual_violations)
def test_no_such_file(self): quality = QualityReporter(FindbugsXmlDriver()) # Expect that we get no results result = quality.violations('') self.assertEqual(result, [])
def test_no_such_file(self): quality = QualityReporter(FindbugsXmlDriver()) # Expect that we get no results result = quality.violations("") assert result == []