[TIP] Cannot run coverage.exe against the jython
Chris Bannan
cmbannan at yahoo.com
Wed Aug 6 05:21:36 PDT 2014
I have figured out how to use coverage.py with jython with some work-arounds.
This is a lengthy explanation. There were multiple problems
1. The jython install instructions did not specify putting jython on the path.
When I did that I could run jython directly, rather than via Java as I wrote in my first post.
jython TestClassForName.py
2. However, I still could not run coverage using jython. I got this error
C:\cygwin64\home\cbannan\python>coverage run TestClassForName.py
Traceback (most recent call last):
File "TestClassForName.py", line 6, in <module>
from java.lang import Class
ImportError: No module named java.lang
Java could not be found by coverage
3. When I installed coverage, I installed it using the Windows installer -- coverage-3.7.1-cp27-none-win32.whl
The jython site suggests running python in these ways.
./python -m coverage
./python COVERAGEDIR run --pylib Lib/test/regrtest.py
While I think these are instructions for getting code coverage of jython itself, they gave me an idea
I tried ./jython -m coverage, but it failed as follows
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "C:\jython2.7b2\Lib\runpy.py", line 170, in run_module
mod_name, loader, code, fname = _get_module_details(mod_name)
File "C:\jython2.7b2\Lib\runpy.py", line 103, in _get_module_details
raise ImportError("No module named %s" % mod_name)
ImportError: No module named coverage
My coverage install does not have coveragepy, just the coverage.exe. So I installed coverage again using hg, as suggested on on they Jython site
I then hunted for coveragepy and found a directory of that name. Looking for a python file to run, I guessed an tried __main__.py
That let me run coverage via jython for everything except the coverage html command as follows
jython C:\cygwin64\home\cbannan\coveragepy\__main__.py help
jython C:\cygwin64\home\cbannan\coveragepy\__main__.py erase
jython C:\cygwin64\home\cbannan\coveragepy\__main__.py run TestClassForName.py
4. I suspect that is not how it is intended to be used, but it works, except, again, for the html option
That fails, as follows:
File "C:\cygwin64\home\cbannan\coveragepy\__main__.py", line 8, in <module>
run_globals = runpy.run_module(PKG, run_name='__main__', alter_sys=True)
File "C:\cygwin64\home\cbannan\coveragepy\__main__.py", line 8, in <module>
run_globals = runpy.run_module(PKG, run_name='__main__', alter_sys=True)
File "C:\jython2.7b2\Lib\runpy.py", line 175, in run_module
return _run_module_code(code, init_globals, run_name,
File "C:\jython2.7b2\Lib\runpy.py", line 81, in _run_module_code
_run_code(code, mod_globals, init_globals,
File "C:\jython2.7b2\Lib\runpy.py", line 72, in _run_code
exec code in run_globals
File "C:\cygwin64\home\cbannan\coveragepy\coverage\__main__.py", line 4, in <module>
sys.exit(main())
File "C:\cygwin64\home\cbannan\coveragepy\coverage\cmdline.py", line 747, in main
status = CoverageScript().command_line(argv)
File "C:\cygwin64\home\cbannan\coveragepy\coverage\cmdline.py", line 747, in main
status = CoverageScript().command_line(argv)
File "C:\cygwin64\home\cbannan\coveragepy\coverage\cmdline.py", line 465, in command_line
total = self.coverage.html_report(
File "C:\cygwin64\home\cbannan\coveragepy\coverage\control.py", line 689, in html_report
return reporter.report(morfs)
File "C:\cygwin64\home\cbannan\coveragepy\coverage\html.py", line 109, in report
self.report_files(self.html_file, morfs, self.config.html_dir)
File "C:\cygwin64\home\cbannan\coveragepy\coverage\report.py", line 82, in report_files
report_fn(cu, self.coverage._analyze(cu))
File "C:\cygwin64\home\cbannan\coveragepy\coverage\report.py", line 82, in report_files
report_fn(cu, self.coverage._analyze(cu))
File "C:\cygwin64\home\cbannan\coveragepy\coverage\control.py", line 619, in _analyze
return Analysis(self, it)
File "C:\cygwin64\home\cbannan\coveragepy\coverage\results.py", line 20, in __init__
self.statements, self.excluded = self.parser.parse_source()
File "C:\cygwin64\home\cbannan\coveragepy\coverage\parser.py", line 217, in parse_source
self._raw_parse()
File "C:\cygwin64\home\cbannan\coveragepy\coverage\parser.py", line 217, in parse_source
self._raw_parse()
File "C:\cygwin64\home\cbannan\coveragepy\coverage\parser.py", line 112, in _raw_parse
self.excluded = self.lines_matching(self.exclude)
File "C:\cygwin64\home\cbannan\coveragepy\coverage\parser.py", line 99, in lines_matching
for i, ltext in enumerate(self.lines, start=1):
TypeError: enumerate() takes at most 1 arguments (2 given)
To generate the coverage html, I reverted to the recommended command:coverage html
I think I have some bugs to log, i.e. for jython doc and for coverage
Thanks for your help.
Chris
cmbannan at yahoo.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.idyll.org/pipermail/testing-in-python/attachments/20140806/c37fd5f0/attachment-0001.htm>
More information about the testing-in-python
mailing list