146 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			4.8 KiB
		
	
	
	
		
			Python
		
	
	
	
| 
 | |
| import py
 | |
| from py.__.test import repevent 
 | |
| 
 | |
| def setup_module(mod): 
 | |
|     mod.tmpdir = py.test.ensuretemp('docdoctest')
 | |
| 
 | |
| def countoutcomes(session):
 | |
|     l = []
 | |
|     session.main(l.append) 
 | |
|     passed = failed = skipped = 0
 | |
|     for event in l: 
 | |
|         if isinstance(event, repevent.ReceivedItemOutcome):
 | |
|             if event.outcome.passed: 
 | |
|                 passed += 1
 | |
|             elif event.outcome.skipped: 
 | |
|                 skipped += 1
 | |
|             else: 
 | |
|                 failed += 1
 | |
|         elif isinstance(event, repevent.FailedTryiter):
 | |
|             failed += 1
 | |
|     return failed, passed, skipped 
 | |
| 
 | |
| def test_doctest_extra_exec(): 
 | |
|     # XXX get rid of the next line: 
 | |
|     py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
 | |
|     xtxt = tmpdir.join('y.txt')
 | |
|     xtxt.write(py.code.Source("""
 | |
|         hello::
 | |
|             .. >>> raise ValueError 
 | |
|                >>> None
 | |
|     """))
 | |
|     config = py.test.config._reparse([xtxt]) 
 | |
|     session = config.initsession()
 | |
|     failed, passed, skipped = countoutcomes(session) 
 | |
|     assert failed == 1
 | |
| 
 | |
| def test_doctest_basic(): 
 | |
|     # XXX get rid of the next line: 
 | |
|     py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
 | |
| 
 | |
|     xtxt = tmpdir.join('x.txt')
 | |
|     xtxt.write(py.code.Source("""
 | |
|         .. 
 | |
|            >>> from os.path import abspath 
 | |
| 
 | |
|         hello world 
 | |
| 
 | |
|            >>> assert abspath 
 | |
|            >>> i=3
 | |
|            >>> print i
 | |
|            3
 | |
| 
 | |
|         yes yes
 | |
| 
 | |
|             >>> i
 | |
|             3
 | |
| 
 | |
|         end
 | |
|     """))
 | |
|     config = py.test.config._reparse([xtxt]) 
 | |
|     session = config.initsession()
 | |
|     failed, passed, skipped = countoutcomes(session) 
 | |
|     assert failed == 0 
 | |
|     assert passed + skipped == 2
 | |
| 
 | |
| def test_deindent():
 | |
|     from py.__.doc.conftest import deindent
 | |
|     assert deindent('foo') == 'foo'
 | |
|     assert deindent('foo\n  bar') == 'foo\n  bar'
 | |
|     assert deindent('  foo\n  bar\n') == 'foo\nbar\n'
 | |
|     assert deindent('  foo\n\n  bar\n') == 'foo\n\nbar\n'
 | |
|     assert deindent(' foo\n  bar\n') == 'foo\n bar\n'
 | |
|     assert deindent('  foo\n bar\n') == ' foo\nbar\n'
 | |
| 
 | |
| def test_doctest_eol(): 
 | |
|     # XXX get rid of the next line: 
 | |
|     py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
 | |
| 
 | |
|     ytxt = tmpdir.join('y.txt')
 | |
|     ytxt.write(py.code.Source(".. >>> 1 + 1\r\n   2\r\n\r\n"))
 | |
|     config = py.test.config._reparse([ytxt]) 
 | |
|     session = config.initsession()
 | |
|     failed, passed, skipped = countoutcomes(session)
 | |
|     assert failed == 0 
 | |
|     assert passed + skipped == 2
 | |
| 
 | |
| def test_doctest_indentation():
 | |
|     # XXX get rid of the next line: 
 | |
|     py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
 | |
| 
 | |
|     txt = tmpdir.join('foo.txt')
 | |
|     txt.write('..\n  >>> print "foo\\n  bar"\n  foo\n    bar\n')
 | |
|     config = py.test.config._reparse([txt])
 | |
|     session = config.initsession()
 | |
|     failed, passed, skipped = countoutcomes(session) 
 | |
|     assert failed == 0
 | |
|     assert skipped + passed == 2 
 | |
| 
 | |
| def test_js_ignore():
 | |
|     py.magic.autopath().dirpath('conftest.py').copy(tmpdir.join('conftest.py'))
 | |
|     tmpdir.ensure('__init__.py')
 | |
|     xtxt = tmpdir.join('x.txt')
 | |
|     xtxt.write(py.code.Source("""
 | |
|     `blah`_
 | |
| 
 | |
|     .. _`blah`: javascript:some_function()
 | |
|     """))
 | |
|     config = py.test.config._reparse([xtxt]) 
 | |
|     session = config.initsession()
 | |
|     
 | |
|     failed, passed, skipped = countoutcomes(session) 
 | |
|     assert failed == 0
 | |
|     assert skipped + passed == 3 
 | |
| 
 | |
| def test_resolve_linkrole():
 | |
|     from py.__.doc.conftest import get_apigen_relpath
 | |
|     apigen_relpath = get_apigen_relpath()
 | |
|     from py.__.doc.conftest import resolve_linkrole
 | |
|     assert resolve_linkrole('api', 'py.foo.bar', False) == (
 | |
|         'py.foo.bar', apigen_relpath + 'api/foo.bar.html')
 | |
|     assert resolve_linkrole('api', 'py.foo.bar()', False) == (
 | |
|         'py.foo.bar()', apigen_relpath + 'api/foo.bar.html')
 | |
|     assert resolve_linkrole('api', 'py', False) == (
 | |
|         'py', apigen_relpath + 'api/index.html')
 | |
|     py.test.raises(AssertionError, 'resolve_linkrole("api", "foo.bar")')
 | |
|     assert resolve_linkrole('source', 'py/foo/bar.py', False) == (
 | |
|         'py/foo/bar.py', apigen_relpath + 'source/foo/bar.py.html')
 | |
|     assert resolve_linkrole('source', 'py/foo/', False) == (
 | |
|         'py/foo/', apigen_relpath + 'source/foo/index.html')
 | |
|     assert resolve_linkrole('source', 'py/', False) == (
 | |
|         'py/', apigen_relpath + 'source/index.html')
 | |
|     py.test.raises(AssertionError, 'resolve_linkrole("source", "/foo/bar/")')
 | |
| 
 | |
| def test_resolve_linkrole_check_api():
 | |
|     from py.__.doc.conftest import resolve_linkrole
 | |
|     assert resolve_linkrole('api', 'py.test.ensuretemp')
 | |
|     py.test.raises(AssertionError, "resolve_linkrole('api', 'py.foo.baz')")
 | |
| 
 | |
| def test_resolve_linkrole_check_source():
 | |
|     from py.__.doc.conftest import resolve_linkrole
 | |
|     assert resolve_linkrole('source', 'py/path/common.py')
 | |
|     py.test.raises(AssertionError,
 | |
|                    "resolve_linkrole('source', 'py/foo/bar.py')")
 | |
| 
 |