1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120
|
import re
import os
import sys
import shutil
import contextlib
from io import StringIO
from tempfile import mkstemp
from unittest import TestCase as BaseTestCase
try:
import pytest
except ImportError:
raise SystemExit("pytest missing: sudo apt-get install python-pytest")
DATA_DIR = os.path.join(
os.path.dirname(os.path.realpath(__file__)), "data")
assert isinstance(DATA_DIR, str)
_fs_enc = sys.getfilesystemencoding()
if "öäü".encode(_fs_enc, "replace").decode(_fs_enc) != u"öäü":
raise RuntimeError("This test suite needs a unicode locale encoding. "
"Try setting LANG=C.UTF-8")
def get_temp_copy(path):
"""Returns a copy of the file with the same extension"""
ext = os.path.splitext(path)[-1]
fd, filename = mkstemp(suffix=ext)
os.close(fd)
shutil.copy(path, filename)
return filename
def get_temp_empty(ext=""):
"""Returns an empty file with the extension"""
fd, filename = mkstemp(suffix=ext)
os.close(fd)
return filename
@contextlib.contextmanager
def capture_output():
"""
with capture_output() as (stdout, stderr):
some_action()
print stdout.getvalue(), stderr.getvalue()
"""
err = StringIO()
out = StringIO()
old_err = sys.stderr
old_out = sys.stdout
sys.stderr = err
sys.stdout = out
try:
yield (out, err)
finally:
sys.stderr = old_err
sys.stdout = old_out
class TestCase(BaseTestCase):
def failUnlessRaisesRegexp(self, exc, re_, fun, *args, **kwargs):
def wrapped(*args, **kwargs):
try:
fun(*args, **kwargs)
except Exception as e:
self.failUnless(re.search(re_, str(e)))
raise
self.failUnlessRaises(exc, wrapped, *args, **kwargs)
# silence deprec warnings about useless renames
failUnless = BaseTestCase.assertTrue
failIf = BaseTestCase.assertFalse
failUnlessEqual = BaseTestCase.assertEqual
failUnlessRaises = BaseTestCase.assertRaises
failUnlessAlmostEqual = BaseTestCase.assertAlmostEqual
failIfEqual = BaseTestCase.assertNotEqual
failIfAlmostEqual = BaseTestCase.assertNotAlmostEqual
assertEquals = BaseTestCase.assertEqual
assertNotEquals = BaseTestCase.assertNotEqual
assert_ = BaseTestCase.assertTrue
def assertReallyEqual(self, a, b):
self.assertEqual(a, b)
self.assertEqual(b, a)
self.assertTrue(a == b)
self.assertTrue(b == a)
self.assertFalse(a != b)
self.assertFalse(b != a)
def assertReallyNotEqual(self, a, b):
self.assertNotEqual(a, b)
self.assertNotEqual(b, a)
self.assertFalse(a == b)
self.assertFalse(b == a)
self.assertTrue(a != b)
self.assertTrue(b != a)
def unit(run=[], exitfirst=False):
args = []
if run:
args.append("-k")
args.append(" or ".join(run))
if exitfirst:
args.append("-x")
args.append("tests")
return pytest.main(args=args)
|