| | |
| | from __future__ import with_statement |
| |
|
| | import logging |
| | import sys |
| | import os.path |
| |
|
| | import colorama |
| | from colorama import Fore, Back, Style |
| | from docopt import docopt |
| |
|
| | from jxml.etree import XSLTCoverage |
| | from jxml.etree import xsltcoverage |
| |
|
| |
|
| | def colorama_init(f): |
| | def wrapper(*args, **kwargs): |
| | colorama.init() |
| | try: |
| | return f(*args, **kwargs) |
| | finally: |
| | colorama.deinit() |
| | return wrapper |
| |
|
| |
|
| | @colorama_init |
| | def annotate_main(): |
| | __doc__ = ''' |
| | Usage: jxml-annotate [options] <xml-file>... |
| | |
| | <xml-file> Cobertura-compatible coverage data file |
| | --color=[auto|yes|no] Output with colors |
| | |
| | Example: |
| | jxml-annotate --color=yes coverage.xml | less -R |
| | ''' |
| | args = docopt(__doc__) |
| |
|
| | logging.basicConfig() |
| | logger = logging.getLogger('jxml.annotate') |
| |
|
| | use_color = args['--color'] == 'yes' |
| | if args['--color'] in ('auto', None): |
| | use_color = sys.stdout.isatty() |
| |
|
| | coverage = XSLTCoverage() |
| | for arg in args['<xml-file>']: |
| | coverage.read_from(arg) |
| |
|
| | traces = coverage.traces |
| | for filename in sorted(traces): |
| | covered_lines = traces[filename] |
| | if not os.path.exists(filename): |
| | logger.info('skipping %s: not exists', filename) |
| | continue |
| | print filename |
| |
|
| | with open(filename) as f: |
| | for line_no, line in enumerate(f): |
| | line_no += 1 |
| | count = covered_lines.get(line_no, 0) |
| | annotated = '%8d: %s' % (count, line) |
| |
|
| | if use_color: |
| | if count == 0: |
| | color = Fore.RED |
| | else: |
| | color = Fore.RESET |
| | annotated = color + annotated + Fore.RESET |
| | sys.stdout.write(annotated) |
| |
|
| | print '' |
| |
|
| |
|
| | def load_tests(filenames): |
| | import unittest |
| | ts = unittest.TestSuite() |
| | testloader = unittest.defaultTestLoader |
| | for filename in filenames: |
| | d = dict() |
| | execfile(filename, d) |
| | for name in d: |
| | x = d[name] |
| | if isinstance(x, type) and issubclass(x, unittest.TestCase): |
| | ts.addTests(testloader.loadTestsFromTestCase(x)) |
| | return ts |
| |
|
| |
|
| | def cov_test_main(): |
| | __doc__ = ''' |
| | Usage: jxml-cov-test [options] <output-file> <unittest-file>... |
| | |
| | <output-file> Cobertura-compatible coverage data file. |
| | <unittest-file> unittest files. |
| | |
| | Example: |
| | jxml-cov-test coverage.xml test1.py test2.py |
| | ''' |
| | args = docopt(__doc__) |
| |
|
| | logging.basicConfig() |
| | logger = logging.getLogger('jxml.cov-test') |
| |
|
| | from java.lang import System |
| | import unittest |
| |
|
| | props = System.getProperties() |
| | props['javax.xml.transform.TransformerFactory'] = 'org.apache.xalan.processor.TransformerFactoryImpl' |
| | props['javax.xml.parsers.DocumentBuilderFactory'] = 'org.apache.xerces.jaxp.DocumentBuilderFactoryImpl' |
| | props['javax.xml.parsers.SAXParserFactory'] = 'org.apache.xerces.jaxp.SAXParserFactoryImpl' |
| |
|
| | output_name = args['<output-file>'] |
| | test_filenames = args['<unittest-file>'] |
| | ts = load_tests(test_filenames) |
| | runner = unittest.TextTestRunner() |
| | with xsltcoverage(output_name) as coverage: |
| | runner.run(ts) |
| |
|