Add coverage test
[pysize.git] / tests / pysize_tests.py
blobde933fdcbb02a177bae704a67d26a503291bb56d
1 #!/usr/bin/env python
3 import imp
4 import os
5 import tarfile
6 import unittest
7 import shutil
8 import sys
9 import optparse
11 import coverage
13 PYSIZE_EXAMPLE_PATH = '/tmp/pysize_example_dir'
14 ALL_TESTS = unittest.TestSuite()
16 def setup():
17 if not os.path.exists('/tmp/pysize_example_dir'):
18 os.mkdir('/tmp/pysize_example_dir')
19 tar = tarfile.open('pysize_example_dir.tar.bz2', 'r:bz2')
20 print 'Extracting pysize_example_dir.tar.bz2'
21 for tarinfo in tar:
22 tar.extract(tarinfo, '/tmp')
23 tar.close()
25 def cleanup():
26 os.chmod('/tmp/pysize_example_dir/unreadable_dir', 0700)
27 print 'Removing', PYSIZE_EXAMPLE_PATH
28 shutil.rmtree(PYSIZE_EXAMPLE_PATH)
30 def import_tests():
31 py_files = [p for p in os.listdir('tests') if p.endswith('.py')]
32 tests = list(set([p[:p.index('.')] for p in py_files]))
33 for name in tests:
34 module = getattr(__import__('tests.' + name), name)
35 for test in module.TESTS:
36 suite = unittest.defaultTestLoader.loadTestsFromTestCase(test)
37 ALL_TESTS.addTest(suite)
39 def parse_cmdline():
40 parser = optparse.OptionParser()
41 parser.add_option('--keep', '-k', action='store_true', dest='keep',
42 default=False, help='keep /tmp/pysize_example_dir')
43 parser.add_option('--coverage', '-c', action='store_true', dest='coverage',
44 default=False, help='include coverage tests')
45 (options, args) = parser.parse_args()
46 if args:
47 parser.error()
48 return options
50 def start_coverage():
51 coverage.erase()
52 coverage.start()
54 def end_coverage():
55 coverage.stop()
56 modules = []
57 for (name, module) in sys.modules.iteritems():
58 if name.startswith('pysize.') and module:
59 path = '../' + name.replace('.', '/') + '.py'
60 if os.path.exists(path):
61 modules.append(module)
62 coverage.report(modules)
63 coverage.erase()
65 def main():
66 options = parse_cmdline()
67 sys.path.insert(0, '..')
68 import_tests()
69 try:
70 setup()
71 if options.coverage:
72 start_coverage()
73 unittest.main(argv=[sys.argv[0], '-v'], defaultTest='ALL_TESTS')
74 finally:
75 if options.coverage:
76 end_coverage()
77 if not options.keep:
78 cleanup()
80 if __name__ == '__main__':
81 main()