[svn r56285] sanitize doctesting a bit. this also fixes the problem that you could not have "import" working in doctests previously. thanks nshepperd.
--HG-- branch : trunk
This commit is contained in:
		
							parent
							
								
									cb53ad6010
								
							
						
					
					
						commit
						d4c3b3ce85
					
				|  | @ -502,13 +502,17 @@ class Generator(FunctionMixin, PyCollectorMixin, Collector): | ||||||
|             call, args = obj, () |             call, args = obj, () | ||||||
|         return call, args  |         return call, args  | ||||||
| 
 | 
 | ||||||
| class DoctestFile(PyCollectorMixin, FSCollector):  | class DoctestFile(Module): | ||||||
|  |     # XXX fix py.test reporting  | ||||||
|  |     #     we subclass Module here in order to get py.test's reporting  | ||||||
|  |     #     show the ".txt" filename in the test run much like a | ||||||
|  |     #     python module shows up.  instead py.test needs to | ||||||
|  |     #     support more direct means of influencing reporting.  | ||||||
|     def run(self): |     def run(self): | ||||||
|         return [self.fspath.basename] |         return [self.fspath.basename] | ||||||
| 
 | 
 | ||||||
|     def join(self, name): |     def join(self, name): | ||||||
|         from py.__.test.doctest import DoctestText |         if name == self.fspath.basename: | ||||||
|         if name == self.fspath.basename:  |             from py.__.test.doctest import DoctestFileContent | ||||||
|             item = DoctestText(self.fspath.basename, parent=self) |             return DoctestFileContent(name, self) | ||||||
|             item._content = self.fspath.read() | 
 | ||||||
|             return item |  | ||||||
|  |  | ||||||
|  | @ -1,9 +1,6 @@ | ||||||
| import py | import py | ||||||
| 
 | 
 | ||||||
| class DoctestText(py.test.collect.Item): | class DoctestFileContent(py.test.collect.Item): | ||||||
| 
 |  | ||||||
|     def _setcontent(self, content): |  | ||||||
|         self._content = content  |  | ||||||
| 
 | 
 | ||||||
|     #def buildname2items(self): |     #def buildname2items(self): | ||||||
|     #    parser = py.compat.doctest.DoctestParser() |     #    parser = py.compat.doctest.DoctestParser() | ||||||
|  | @ -16,18 +13,12 @@ class DoctestText(py.test.collect.Item): | ||||||
|     #        d[str(i)] = ex |     #        d[str(i)] = ex | ||||||
| 
 | 
 | ||||||
|     def run(self): |     def run(self): | ||||||
|         mod = py.std.types.ModuleType(self.name)  |         self.execute() | ||||||
|         #for line in s.split('\n'):  |  | ||||||
|         #    if line.startswith(prefix):  |  | ||||||
|         #        exec py.code.Source(line[len(prefix):]).compile() in mod.__dict__  |  | ||||||
|         #        line = "" |  | ||||||
|         #    else:  |  | ||||||
|         #        l.append(line) |  | ||||||
|         self.execute(mod, self._content)  |  | ||||||
|         |         | ||||||
|     def execute(self, mod, docstring): |     def execute(self): | ||||||
|         mod.__doc__ = docstring  |         failed, tot = py.compat.doctest.testfile(str(self.fspath), module_relative=False, verbose=1) | ||||||
|         failed, tot = py.compat.doctest.testmod(mod, verbose=1) |         #mod.__file__ = str(self.fspath) | ||||||
|  |         #failed, tot = py.compat.doctest.testmod(mod, verbose=1) | ||||||
|         if failed:  |         if failed:  | ||||||
|             py.test.fail("doctest %s: %s failed out of %s" %( |             py.test.fail("doctest %s: %s failed out of %s" %( | ||||||
|                          self.fspath, failed, tot)) |                          self.fspath, failed, tot)) | ||||||
|  |  | ||||||
|  | @ -78,14 +78,6 @@ class BaseReason(object): | ||||||
|     def __repr__(self): |     def __repr__(self): | ||||||
|         return self.msg |         return self.msg | ||||||
| 
 | 
 | ||||||
| class Broken(BaseReason): |  | ||||||
|     def __repr__(self): |  | ||||||
|         return "Broken: %s" % (self.msg,) |  | ||||||
| 
 |  | ||||||
| class _NotImplemented(BaseReason): |  | ||||||
|     def __repr__(self): |  | ||||||
|         return "Not implemented: %s" % (self.msg,) |  | ||||||
| 
 |  | ||||||
| # whatever comes here.... | # whatever comes here.... | ||||||
| 
 | 
 | ||||||
| def skip(msg=BaseReason()): | def skip(msg=BaseReason()): | ||||||
|  |  | ||||||
|  | @ -1,25 +1,30 @@ | ||||||
| 
 | 
 | ||||||
| import py | import py | ||||||
| from py.__.test.doctest import DoctestText |  | ||||||
| from py.__.test.outcome import Skipped, Failed, Passed, Outcome | from py.__.test.outcome import Skipped, Failed, Passed, Outcome | ||||||
| 
 | 
 | ||||||
|  | 
 | ||||||
|  | def setup_module(mod): | ||||||
|  |     mod.tmp = py.test.ensuretemp(__name__)  | ||||||
|  | 
 | ||||||
| def test_simple_docteststring(): | def test_simple_docteststring(): | ||||||
|     testitem = DoctestText(name="dummy", parent=None) |     p = tmp.join("test_simple_docteststring")  | ||||||
|     testitem._setcontent(""" |     p.write(py.code.Source(""" | ||||||
|     >>> i = 0 |         >>> i = 0 | ||||||
|     >>> i + 1 |         >>> i + 1 | ||||||
|     1 |         1 | ||||||
|     """) |     """)) | ||||||
|  |     testitem = py.test.collect.DoctestFile(p).join(p.basename)  | ||||||
|     res = testitem.run() |     res = testitem.run() | ||||||
|     assert res is None |     assert res is None | ||||||
|      |      | ||||||
| def test_simple_docteststring_failing(): | def test_simple_docteststring_failing(): | ||||||
|     testitem = DoctestText(name="dummy2", parent=None) |     p = tmp.join("test_simple_docteststring_failing") | ||||||
|     testitem._setcontent(""" |     p.write(py.code.Source(""" | ||||||
|     >>> i = 0 |         >>> i = 0 | ||||||
|     >>> i + 1 |         >>> i + 1 | ||||||
|     2 |         2 | ||||||
|     """) |     """)) | ||||||
|  |     testitem = py.test.collect.DoctestFile(p).join(p.basename) | ||||||
|     py.test.raises(Failed, "testitem.run()") |     py.test.raises(Failed, "testitem.run()") | ||||||
|     |     | ||||||
| 
 | 
 | ||||||
|  | @ -39,6 +44,6 @@ def test_collect_doctest_files_with_test_prefix(): | ||||||
|         col = config._getcollector(x) |         col = config._getcollector(x) | ||||||
|         items = list(col._tryiter(py.test.collect.Item)) |         items = list(col._tryiter(py.test.collect.Item)) | ||||||
|         assert len(items) == 1 |         assert len(items) == 1 | ||||||
|         assert isinstance(items[0], DoctestText) |         assert isinstance(items[0].parent, py.test.collect.DoctestFile) | ||||||
|     |     | ||||||
|       |       | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue