def test_violations(self): # Construct the XML report file_paths = ['file1.py', 'subdir/file2.py'] violations = self.MANY_VIOLATIONS measured = self.FEW_MEASURED xml = self._coverage_xml(file_paths, violations, measured) # Parse the report coverage = XmlCoverageReporter(xml) # Expect that the name is set self.assertEqual(coverage.name(), "XML") # By construction, each file has the same set # of covered/uncovered lines self.assertEqual(violations, coverage.violations('file1.py')) self.assertEqual(measured, coverage.measured_lines('file1.py')) # Try getting a smaller range result = coverage.violations('subdir/file2.py') self.assertEqual(result, violations) # Once more on the first file (for caching) result = coverage.violations('file1.py') self.assertEqual(result, violations)
def test_different_files_in_inputs(self): # Construct the XML report xml_roots = [ self._coverage_xml(['file.py'], self.MANY_VIOLATIONS, self.FEW_MEASURED), self._coverage_xml(['other_file.py'], self.FEW_VIOLATIONS, self.MANY_MEASURED) ] # Parse the report coverage = XmlCoverageReporter(xml_roots) self.assertEqual(self.MANY_VIOLATIONS, coverage.violations('file.py')) self.assertEqual(self.FEW_VIOLATIONS, coverage.violations('other_file.py'))
def test_two_inputs_second_violate(self): # Construct the XML report file_paths = ['file1.py'] violations1 = self.MANY_VIOLATIONS violations2 = self.FEW_VIOLATIONS measured1 = self.FEW_MEASURED measured2 = self.MANY_MEASURED xml = self._coverage_xml(file_paths, violations1, measured1) xml2 = self._coverage_xml(file_paths, violations2, measured2) # Parse the report coverage = XmlCoverageReporter([xml2, xml]) # By construction, each file has the same set # of covered/uncovered lines self.assertEqual( violations1 & violations2, coverage.violations('file1.py') ) self.assertEqual( measured1 | measured2, coverage.measured_lines('file1.py') )
def test_empty_violations(self): """ Test that an empty violations report is handled properly """ # Construct the XML report file_paths = ['file1.py'] violations1 = self.MANY_VIOLATIONS violations2 = set() measured1 = self.FEW_MEASURED measured2 = self.MANY_MEASURED xml = self._coverage_xml(file_paths, violations1, measured1) xml2 = self._coverage_xml(file_paths, violations2, measured2) # Parse the report coverage = XmlCoverageReporter([xml2, xml]) # By construction, each file has the same set # of covered/uncovered lines self.assertEqual( violations1 & violations2, coverage.violations('file1.py') ) self.assertEqual( measured1 | measured2, coverage.measured_lines('file1.py') )
def test_empty_violations(self): """ Test that an empty violations report is handled properly """ # Construct the XML report file_paths = ['file1.py'] violations1 = self.MANY_VIOLATIONS violations2 = set() measured1 = self.FEW_MEASURED measured2 = self.MANY_MEASURED xml = self._coverage_xml(file_paths, violations1, measured1) xml2 = self._coverage_xml(file_paths, violations2, measured2) # Parse the report coverage = XmlCoverageReporter([xml2, xml]) # By construction, each file has the same set # of covered/uncovered lines self.assertEqual(violations1 & violations2, coverage.violations('file1.py')) self.assertEqual(measured1 | measured2, coverage.measured_lines('file1.py'))
def test_three_inputs(self): # Construct the XML report file_paths = ['file1.py'] violations1 = self.MANY_VIOLATIONS violations2 = self.FEW_VIOLATIONS violations3 = self.ONE_VIOLATION measured1 = self.FEW_MEASURED measured2 = self.MANY_MEASURED measured3 = self.VERY_MANY_MEASURED xml = self._coverage_xml(file_paths, violations1, measured1) xml2 = self._coverage_xml(file_paths, violations2, measured2) xml3 = self._coverage_xml(file_paths, violations3, measured3) # Parse the report coverage = XmlCoverageReporter([xml2, xml, xml3]) # By construction, each file has the same set # of covered/uncovered lines self.assertEqual(violations1 & violations2 & violations3, coverage.violations('file1.py')) self.assertEqual(measured1 | measured2 | measured3, coverage.measured_lines('file1.py'))
def test_three_inputs(self): # Construct the XML report name = "subdir/coverage.xml" file_paths = ['file1.py'] violations1 = self.MANY_VIOLATIONS violations2 = self.FEW_VIOLATIONS violations3 = self.ONE_VIOLATION measured1 = self.FEW_MEASURED measured2 = self.MANY_MEASURED measured3 = self.VERY_MANY_MEASURED xml = self._coverage_xml(file_paths, violations1, measured1) xml2 = self._coverage_xml(file_paths, violations2, measured2) xml3 = self._coverage_xml(file_paths, violations3, measured3) # Parse the report coverage = XmlCoverageReporter([xml2, xml, xml3], name) # By construction, each file has the same set # of covered/uncovered lines self.assertEqual(violations1 & violations2 & violations3, coverage.violations('file1.py')) self.assertEqual(measured1 | measured2 | measured3, coverage.measured_lines('file1.py'))
def test_no_such_file(self): # Construct the XML report with no source files xml = self._coverage_xml([], [], []) # Parse the report coverage = XmlCoverageReporter(xml) # Expect that we get no results result = coverage.violations('file.py') self.assertEqual(result, set([]))
def test_non_python_violations(self): """ Non python projects often just have a file name specified while the full path can be acquired from a sources tag in the XML. This test checks that flow by requesting violation info from a path that can only be constructed by using the path provided in the sources tag """ fancy_path = 'superFancyPath' file_paths = ['file1.java'] source_paths = [fancy_path] violations = self.MANY_VIOLATIONS measured = self.FEW_MEASURED xml = self._coverage_xml( file_paths, violations, measured, source_paths=source_paths ) coverage = XmlCoverageReporter([xml]) self.assertEqual( violations, coverage.violations( '{0}/{1}'.format(fancy_path, file_paths[0]) ) ) self.assertEqual( measured, coverage.measured_lines( '{0}/{1}'.format(fancy_path, file_paths[0]) ) )
def test_two_inputs_second_violate(self): # Construct the XML report file_paths = ['file1.py'] violations1 = self.MANY_VIOLATIONS violations2 = self.FEW_VIOLATIONS measured1 = self.FEW_MEASURED measured2 = self.MANY_MEASURED xml = self._coverage_xml(file_paths, violations1, measured1) xml2 = self._coverage_xml(file_paths, violations2, measured2) # Parse the report coverage = XmlCoverageReporter([xml2, xml], self._git_path_mock) # By construction, each file has the same set # of covered/uncovered lines self.assertEqual(violations1 & violations2, coverage.violations('file1.py')) self.assertEqual(measured1 | measured2, coverage.measured_lines('file1.py'))