Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/setup.py
blob: a99493717378deeee08371f957df4c8838ab1b96 (plain)
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
#!/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')),
                  ('share/tutorius/ui', glob.glob('data/ui/*.glade')),
                 ]
     )

# vim: set et sw=4 sts=4 ts=4: