doctest.testfile() confuses source detection · Issue #52 · nedbat/coveragepy (original) (raw)

Originally reported by Julian O (Bitbucket: oddthinking, GitHub: oddthinking)


The doctest.testmod() method searches the current file for comments of a specific format, and runs them as a test. When I use that, coverage.py does an excellent job.

The doctest.testfile() method searches another file for the comments, and runs them as a test. When I use that, coverage.py complains that it is unable to find the source code.

I did not expect the .doctest file to give me a percentage coverage, but I did hope it would be able to understand the format of the filename, and to handle it gracefully.

Note: This is an different issue to <<issue 19>>.

Here is an example:

  if n == 0:  
      return 1  
  else:  
      return n * factorial(n-1)  

if name == "main":
import doctest
doctest.testfile("factorial.doctest")

Here is what happens (under Windows, Python 2.6).

C:\temp\coveragetest>coverage run factorial_testfile.py

C:\temp\coveragetest>coverage report -m
Name                 Stmts   Exec  Cover   Missing
--------------------------------------------------
<doctest factorial   NoSource: No source for code: 'c:\\temp\\coveragetest\\<doctest factorial.doctest[0]>': [Errno 22] invalid mode ('rU') or filename: 'c:\\temp\\coveragetest\\<doctest factorial.doctest[0]>'
<doctest factorial   NoSource: No source for code: 'c:\\temp\\coveragetest\\<doctest factorial.doctest[3]>': [Errno 22] invalid mode ('rU') or filename: 'c:\\temp\\coveragetest\\<doctest factorial.doctest[3]>'
<doctest factorial   NoSource: No source for code: 'c:\\temp\\coveragetest\\<doctest factorial.doctest[1]>': [Errno 22] invalid mode ('rU') or filename: 'c:\\temp\\coveragetest\\<doctest factorial.doctest[1]>'
<doctest factorial   NoSource: No source for code: 'c:\\temp\\coveragetest\\<doctest factorial.doctest[2]>': [Errno 22] invalid mode ('rU') or filename: 'c:\\temp\\coveragetest\\<doctest factorial.doctest[2]>'
factorial_testfile       7      7   100%