~ubuntu-branches/ubuntu/raring/xmms2/raring

« back to all changes in this revision

Viewing changes to waflib/Tools/waf_unit_test.py

  • Committer: Package Import Robot
  • Author(s): Reinhard Tartler
  • Date: 2012-11-25 19:23:15 UTC
  • mto: This revision was merged to the branch mainline in revision 51.
  • Revision ID: package-import@ubuntu.com-20121125192315-m9z6nu9wwlzrrz9z
ImportĀ upstreamĀ versionĀ 0.8+dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /usr/bin/env python
 
2
# encoding: utf-8
 
3
# WARNING! Do not edit! http://waf.googlecode.com/svn/docs/wafbook/single.html#_obtaining_the_waf_file
 
4
 
 
5
import os,sys
 
6
from waflib.TaskGen import feature,after_method
 
7
from waflib import Utils,Task,Logs,Options
 
8
testlock=Utils.threading.Lock()
 
9
def make_test(self):
 
10
        if getattr(self,'link_task',None):
 
11
                self.create_task('utest',self.link_task.outputs)
 
12
class utest(Task.Task):
 
13
        color='PINK'
 
14
        after=['vnum','inst']
 
15
        vars=[]
 
16
        def runnable_status(self):
 
17
                ret=super(utest,self).runnable_status()
 
18
                if ret==Task.SKIP_ME:
 
19
                        if getattr(Options.options,'all_tests',False):
 
20
                                return Task.RUN_ME
 
21
                return ret
 
22
        def run(self):
 
23
                filename=self.inputs[0].abspath()
 
24
                self.ut_exec=getattr(self,'ut_exec',[filename])
 
25
                if getattr(self.generator,'ut_fun',None):
 
26
                        self.generator.ut_fun(self)
 
27
                try:
 
28
                        fu=getattr(self.generator.bld,'all_test_paths')
 
29
                except AttributeError:
 
30
                        fu=os.environ.copy()
 
31
                        self.generator.bld.all_test_paths=fu
 
32
                        lst=[]
 
33
                        for g in self.generator.bld.groups:
 
34
                                for tg in g:
 
35
                                        if getattr(tg,'link_task',None):
 
36
                                                lst.append(tg.link_task.outputs[0].parent.abspath())
 
37
                        def add_path(dct,path,var):
 
38
                                dct[var]=os.pathsep.join(Utils.to_list(path)+[os.environ.get(var,'')])
 
39
                        if Utils.is_win32:
 
40
                                add_path(fu,lst,'PATH')
 
41
                        elif sys.platform=='darwin':
 
42
                                add_path(fu,lst,'DYLD_LIBRARY_PATH')
 
43
                                add_path(fu,lst,'LD_LIBRARY_PATH')
 
44
                        else:
 
45
                                add_path(fu,lst,'LD_LIBRARY_PATH')
 
46
                cwd=getattr(self.generator,'ut_cwd','')or self.inputs[0].parent.abspath()
 
47
                proc=Utils.subprocess.Popen(self.ut_exec,cwd=cwd,env=fu,stderr=Utils.subprocess.PIPE,stdout=Utils.subprocess.PIPE)
 
48
                (stdout,stderr)=proc.communicate()
 
49
                tup=(filename,proc.returncode,stdout,stderr)
 
50
                self.generator.utest_result=tup
 
51
                testlock.acquire()
 
52
                try:
 
53
                        bld=self.generator.bld
 
54
                        Logs.debug("ut: %r",tup)
 
55
                        try:
 
56
                                bld.utest_results.append(tup)
 
57
                        except AttributeError:
 
58
                                bld.utest_results=[tup]
 
59
                finally:
 
60
                        testlock.release()
 
61
def summary(bld):
 
62
        lst=getattr(bld,'utest_results',[])
 
63
        if lst:
 
64
                Logs.pprint('CYAN','execution summary')
 
65
                total=len(lst)
 
66
                tfail=len([x for x in lst if x[1]])
 
67
                Logs.pprint('CYAN','  tests that pass %d/%d'%(total-tfail,total))
 
68
                for(f,code,out,err)in lst:
 
69
                        if not code:
 
70
                                Logs.pprint('CYAN','    %s'%f)
 
71
                Logs.pprint('CYAN','  tests that fail %d/%d'%(tfail,total))
 
72
                for(f,code,out,err)in lst:
 
73
                        if code:
 
74
                                Logs.pprint('CYAN','    %s'%f)
 
75
def options(opt):
 
76
        opt.add_option('--alltests',action='store_true',default=False,help='Exec all unit tests',dest='all_tests')
 
77
 
 
78
feature('test')(make_test)
 
79
after_method('apply_link')(make_test)
 
 
b'\\ No newline at end of file'