Imported Upstream version 3.7.3
[platform/upstream/python-gobject.git] / tests / runtests.py
1 #!/usr/bin/env python
2 # -*- Mode: Python -*-
3
4 import os
5 import glob
6 import sys
7
8 import unittest
9
10 # provide missing unittest decorators and API for python 2.6; these decorators
11 # do not actually work, just avoid the syntax failure
12 if sys.version_info[:2] == (2, 6):
13     def skipUnless(condition, reason):
14         if not condition:
15             sys.stderr.write('[expected failure] ')
16         return lambda obj: obj
17
18     unittest.skipUnless = skipUnless
19     unittest.expectedFailure = lambda obj: obj
20
21     def assertGreater(self, a, b, msg=None):
22         if not a > b:
23             self.fail('%s not greater than %s' % (repr(a), repr(b)))
24
25     def assertGreaterEqual(self, a, b, msg=None):
26         if not a >= b:
27             self.fail('%s not greater than or equal to %s' % (repr(a), repr(b)))
28
29     def assertIsInstance(self, obj, cls, msg=None):
30         if not isinstance(obj, cls):
31             self.fail('%s is not an instance of %r' % (repr(obj), cls))
32
33     unittest.TestCase.assertGreaterEqual = assertGreaterEqual
34     unittest.TestCase.assertGreater = assertGreater
35     unittest.TestCase.assertIsInstance = assertIsInstance
36
37 if sys.version_info[:2] == (2, 7):
38     unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
39
40 if '--help' in sys.argv:
41     print("Usage: ./runtests.py <testfiles>")
42     sys.exit(0)
43
44 mydir = os.path.dirname(os.path.abspath(__file__))
45 tests_builddir = os.path.abspath(os.environ.get('TESTS_BUILDDIR', os.path.dirname(__file__)))
46 builddir = os.path.dirname(tests_builddir)
47
48 # we have to do this here instead of Makefile.am so that the implicitly added
49 # directory for the source file comes after the builddir
50 sys.path.insert(0, tests_builddir)
51 sys.path.insert(0, builddir)
52
53 # force untranslated messages, as we check for them in some tests
54 os.environ['LC_MESSAGES'] = 'C'
55 os.environ['G_DEBUG'] = 'fatal-warnings fatal-criticals'
56
57 # make Gio able to find our gschemas.compiled in tests/. This needs to be set
58 # before importing Gio. Support a separate build tree, so look in build dir
59 # first.
60 os.environ['GSETTINGS_BACKEND'] = 'memory'
61 os.environ['GSETTINGS_SCHEMA_DIR'] = tests_builddir
62
63 # Load tests.
64 if 'TEST_NAMES' in os.environ:
65     names = os.environ['TEST_NAMES'].split()
66 elif 'TEST_FILES' in os.environ:
67     names = []
68     for filename in os.environ['TEST_FILES'].split():
69         names.append(filename[:-3])
70 elif len(sys.argv) > 1:
71     names = []
72     for filename in sys.argv[1:]:
73         names.append(filename.replace('.py', ''))
74 else:
75     names = []
76     for filename in glob.iglob(os.path.join(mydir, 'test_*.py')):
77         names.append(os.path.basename(filename)[:-3])
78
79 loader = unittest.TestLoader()
80 suite = loader.loadTestsFromNames(names)
81
82
83 # Run tests.
84 runner = unittest.TextTestRunner(verbosity=2)
85 result = runner.run(suite)
86 if not result.wasSuccessful():
87     sys.exit(1)  # exit code so "make check" reports error