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):
15 sys.stderr.write('[expected failure] ')
16 return lambda obj: obj
18 unittest.skipUnless = skipUnless
19 unittest.expectedFailure = lambda obj: obj
21 def assertGreater(self, a, b, msg=None):
23 self.fail('%s not greater than %s' % (repr(a), repr(b)))
25 def assertGreaterEqual(self, a, b, msg=None):
27 self.fail('%s not greater than or equal to %s' % (repr(a), repr(b)))
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))
33 unittest.TestCase.assertGreaterEqual = assertGreaterEqual
34 unittest.TestCase.assertGreater = assertGreater
35 unittest.TestCase.assertIsInstance = assertIsInstance
37 if sys.version_info[:2] == (2, 7):
38 unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
40 if '--help' in sys.argv:
41 print("Usage: ./runtests.py <testfiles>")
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)
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)
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'
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
60 os.environ['GSETTINGS_BACKEND'] = 'memory'
61 os.environ['GSETTINGS_SCHEMA_DIR'] = tests_builddir
64 if 'TEST_NAMES' in os.environ:
65 names = os.environ['TEST_NAMES'].split()
66 elif 'TEST_FILES' in os.environ:
68 for filename in os.environ['TEST_FILES'].split():
69 names.append(filename[:-3])
70 elif len(sys.argv) > 1:
72 for filename in sys.argv[1:]:
73 names.append(filename.replace('.py', ''))
76 for filename in glob.iglob(os.path.join(mydir, 'test_*.py')):
77 names.append(os.path.basename(filename)[:-3])
79 loader = unittest.TestLoader()
80 suite = loader.loadTestsFromNames(names)
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