54 lines
1.5 KiB
Python
54 lines
1.5 KiB
Python
#!/usr/bin/env python
|
|
"""Run doctests."""
|
|
|
|
import doctest
|
|
import platform
|
|
import re
|
|
import sys
|
|
|
|
try:
|
|
import unittest2 as unittest
|
|
except ImportError:
|
|
import unittest
|
|
|
|
def _is_new_jpype():
|
|
if platform.python_implementation() != 'Jython':
|
|
import jpype
|
|
try:
|
|
ver_match = re.match('\d+\.\d+', jpype.__version__)
|
|
if ver_match:
|
|
jpype_ver = float(ver_match.group(0))
|
|
if jpype_ver >= 0.7:
|
|
return True
|
|
except ValueError:
|
|
pass
|
|
return False
|
|
|
|
class Py23DocChecker(doctest.OutputChecker):
|
|
"""Doctest checker to avoid Python 2/3 unicode comparison
|
|
issues. Code mostly taken from Dirkjan Ochtman"""
|
|
def check_output(self, want, got, optionflags):
|
|
if sys.version_info[0] > 2 or _is_new_jpype():
|
|
# new python has unicode as default
|
|
# new JPype does not automatically convert to unicode on Python 2
|
|
want = re.sub("u'(.*?)'", "'\\1'", want)
|
|
want = re.sub('u"(.*?)"', '"\\1"', want)
|
|
return doctest.OutputChecker.check_output(self, want, got, optionflags)
|
|
|
|
def suite():
|
|
suite = unittest.TestSuite()
|
|
suite.addTest(doctest.DocFileSuite('../README.rst',
|
|
checker=Py23DocChecker()))
|
|
return suite;
|
|
|
|
def main():
|
|
runner = unittest.TextTestRunner()
|
|
result = runner.run(suite())
|
|
if result.wasSuccessful():
|
|
return 0
|
|
else:
|
|
return 1
|
|
|
|
if __name__ == '__main__':
|
|
sys.exit(main())
|