#!/usr/bin/env python from distutils.core import setup, Command from os.path import splitext, basename, join as pjoin, walk import os, sys import glob from unittest import TestLoader, TextTestRunner, TestSuite class TestCommand(Command): user_options = [('coverage', None, 'enable code coverage reporting'), ('prefix=', 'p', 'set sugar installation prefix, for dependency loading'), ('single=', 't', 'run a single test'), ] description = 'runs tests from the test directory' def initialize_options(self): self._dir = os.getcwd() self.coverage = False self.single = False self.prefix = None def finalize_options(self): if not self.prefix: print sys.exit(1) def run(self): ''' Finds all the tests modules in tests/, and runs them. ''' prefix = os.path.join(self.prefix,'lib', 'python%d.%d'%sys.version_info[:2], 'site-packages') sys.path.insert(1, prefix) os.environ.setdefault('SUGAR_PREFIX', self.prefix) if self.coverage: import coverage coverage.erase() coverage.start() loader = TestLoader() suite = TestSuite() if not self.single: skipped = file('tests/skip', 'r').read().split('\n') for t in glob.glob(pjoin(self._dir, 'tests', '*.py')): if not t.endswith('__init__.py') and basename(t) not in skipped: modname = '.'.join(['tests', splitext(basename(t))[0]]) mod = __import__(modname, {'sys':sys}, fromlist=[modname]) print "loading %s" % modname suite.addTest(loader.loadTestsFromModule(mod)) else: print "skipping %s" % t else: modname = '.'.join(['tests', self.single]) mod = __import__(modname, {'sys':sys}, fromlist=[modname]) print "loading %s" % modname suite.addTest(loader.loadTestsFromModule(mod)) t = TextTestRunner(verbosity = 1) t.run(suite) if self.coverage: coverage.stop() sources = [] os.path.walk(os.path.join(prefix,'sugar','tutorius'), self._listsources, sources) coverage.report(sources) coverage.erase() def _listsources(self, arg, dirname, fnames): fnames = filter(lambda x:x.endswith('.py'), fnames) for name in fnames: arg.append(pjoin(dirname, name)) setup(name='Tutorius', version='0.0', description='Interactive tutor and Tutorial creator', maintainer='Simon Poirier', maintainer_email='simpoir@gmail.com', author='Tutorius team', author_email='sugar-narratives@googlegroups.com', url='http://tutorius.org', license='GPLv3', packages=[ 'sugar.tutorius', 'sugar.tutorius.uam', 'sugar.tutorius.addons', ], package_dir={ 'sugar.tutorius': 'tutorius', 'sugar.tutorius.addons': 'addons', }, cmdclass = {'test': TestCommand}, data_files=[('share/icons/sugar/scalable/actions', glob.glob('data/icons/*.svg')),] ) # vim: set et sw=4 sts=4 ts=4: