1313 >>> X.__name__
1414 'X'
1515
16- >>> X.Y
16+ >>> X.Y # doctest: +py2
17+ <class 'nested_ext.Y'>
18+
19+ >>> X.Y # doctest: +py3
1720 <class 'nested_ext.X.Y'>
1821
1922 >>> X.Y.__module__
2225 >>> X.Y.__name__
2326 'Y'
2427
25- >>> X.color. __qualname__
28+ >>> getattr( X.color, " __qualname__", None) # doctest: +py3
2629 'X.color'
2730
28- >>> repr(X.color.red)
31+ >>> repr(X.color.red) # doctest: +py2
32+ 'nested_ext.color.red'
33+
34+ >>> repr(X.color.red) # doctest: +py3
2935 'nested_ext.X.color.red'
3036
31- >>> repr(X.color(1))
37+ >>> repr(X.color(1)) # doctest: +py2
38+ 'nested_ext.color(1)'
39+
40+ >>> repr(X.color(1)) # doctest: +py3
3241 'nested_ext.X.color(1)'
3342
34- >>> test_function.__doc__.strip().split('\\ n')[0]
43+ >>> test_function.__doc__.strip().split('\\ n')[0] # doctest: +py3
3544 'test_function( (X)arg1, (X.Y)arg2) -> None :'
3645
3746'''
@@ -42,7 +51,23 @@ def run(args = None):
4251
4352 if args is not None :
4453 sys .argv = args
45- return doctest .testmod (sys .modules .get (__name__ ))
54+
55+ py2 = doctest .register_optionflag ("py2" )
56+ py3 = doctest .register_optionflag ("py3" )
57+
58+ class ConditionalChecker (doctest .OutputChecker ):
59+ def check_output (self , want , got , optionflags ):
60+ if (optionflags & py3 ) and (sys .version_info [0 ] < 3 ):
61+ return True
62+ if (optionflags & py2 ) and (sys .version_info [0 ] >= 3 ):
63+ return True
64+ return doctest .OutputChecker .check_output (self , want , got , optionflags )
65+
66+ runner = doctest .DocTestRunner (ConditionalChecker ())
67+ for test in doctest .DocTestFinder ().find (sys .modules .get (__name__ )):
68+ runner .run (test )
69+
70+ return doctest .TestResults (runner .failures , runner .tries )
4671
4772if __name__ == '__main__' :
4873 print ("running..." )
0 commit comments