File: _frameworkForTests.py

package info (click to toggle)
python-pweave 0.30.3-1
  • links: PTS, VCS
  • area: main
  • in suites: bookworm, forky, sid, trixie
  • size: 5,064 kB
  • sloc: python: 30,281; makefile: 167
file content (69 lines) | stat: -rw-r--r-- 2,243 bytes parent folder | download
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
import os

import unittest

class ParametricTestsMetaclass(type):
    def __new__(mcl, name, bases, attrs):
        try:
            tests = attrs['_tests']
            testGenerator = attrs['_testGenerator']

        except KeyError:
            pass

        else:
            del attrs['_tests']
            del attrs['_testGenerator']

            for name, params in tests.items():

                args, kwargs = params
                methodName = 'test' + name
                attrs[methodName] = testGenerator(methodName, *args, **kwargs)

        return type.__new__(mcl, name, bases, attrs)

class ParametricTests(unittest.TestCase, metaclass=ParametricTestsMetaclass):
    pass

class RegressionTest(ParametricTests):
    TESTDIR = '.'

    def assertSameAsReference(self, reference=None):
        try:
            self.assertEqual(self.contentOf(reference if reference is not None else self.REFERENCE),
                             self.contentOf(self.OUTFILE))
        except AssertionError:
            raise AssertionError("{ref} and {out} differs\ntry:\n$ vimdiff {ref} {out}".format(
                                 ref=self.absPathTo(self.REFERENCE),
                                 out=self.absPathTo(self.OUTFILE)))

    def assertSameAsPattern(self, __pattern=None, **kwargs):
      try:
        self.assertEqual(self.contentOf(__pattern).format(**kwargs),
                         self.contentOf(self.OUTFILE))
      except AssertionError:
        raise AssertionError("{ref} and {out} differs\ntry:\n$ vimdiff {ref} {out}".format(
          ref=self.absPathTo(self.REFERENCE),
          out=self.absPathTo(self.OUTFILE)))

    def absPathTo(self, filename):
        return os.path.abspath(os.path.join(os.path.dirname(__file__),
                                            self.TESTDIR,
                                            filename))

    def contentOf(self, filename):
        fh = open(self.absPathTo(filename))
        content = fh.read()
        fh.close()
        return content

    def removeFile(self, name):
        try:
            os.remove(self.absPathTo(name))
        except OSError:
            pass

    def setNewOutfile(self, name):
        self.removeFile(name)
        self.OUTFILE = name