| Home | Trees | Indices | Help |
|
|---|
|
|
1 #emacs: -*- mode: python-mode; py-indent-offset: 4; indent-tabs-mode: nil -*-
2 #ex: set sts=4 ts=4 sw=4 et:
3 ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
4 #
5 # See COPYING file distributed along with the PyMVPA package for the
6 # copyright and license terms.
7 #
8 ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
9 """Unit tests for PyMVPA verbose and debug output"""
10
11 import unittest, re
12 from StringIO import StringIO
13
14 from mvpa.base.verbosity import OnceLogger
15
16 from mvpa.base import verbose
17
18 if __debug__:
19 from mvpa.base import debug
20 debug.register('1', 'id 1') # needed for testing
21 debug.register('2', 'id 2')
22
23 from sets import Set
24
25 ## XXX There must be smth analogous in python... don't know it yet
26 # And it is StringIO
27 #class StringStream(object):
28 # def __init__(self):
29 # self.__str = ""
30 #
31 # def __repr__(self):
32 # return self.__str
33 #
34 # def write(self, s):
35 # self.__str += s
36 #
37 # def clean(self):
38 # self.__str = ""
39 #
41
43 self.msg = "Test level 2"
44 # output stream
45 self.sout = StringIO()
46
47 self.once = OnceLogger(handlers=[self.sout])
48
49 # set verbose to 4th level
50 self.__oldverbosehandlers = verbose.handlers
51 verbose.handlers = [] # so debug doesn't spoil it
52 verbose.level = 4
53 if __debug__:
54 self.__olddebughandlers = debug.handlers
55 self.__olddebugactive = debug.active
56 debug.active = ['1', '2', 'SLC']
57 debug.handlers = [self.sout]
58 debug.offsetbydepth = False
59
60 verbose.handlers = [self.sout]
61
63 if __debug__:
64 debug.active = self.__olddebugactive
65 debug.handlers = self.__olddebughandlers
66 debug.offsetbydepth = True
67 verbose.handlers = self.__oldverbosehandlers
68 self.sout.close()
69
70
72 """Test if it doesn't output at higher levels"""
73 verbose(5, self.msg)
74 self.failUnlessEqual(self.sout.getvalue(), "")
75
76
78 """Test if outputs at lower levels and indents
79 by default with spaces
80 """
81 verbose(2, self.msg)
82 self.failUnlessEqual(self.sout.getvalue(),
83 " %s\n" % self.msg)
84
86 """Test indent symbol
87 """
88 verbose.indent = "."
89 verbose(2, self.msg)
90 self.failUnlessEqual(self.sout.getvalue(), "..%s\n" % self.msg)
91 verbose.indent = " " # restore
92
94 """Test if chokes on negative level"""
95 self.failUnlessRaises( ValueError,
96 verbose._setLevel, -10 )
97
99 """Test if it works fine with no newline (LF) symbol"""
100 verbose(2, self.msg, lf=False)
101 verbose(2, " continue ", lf=False)
102 verbose(2, "end")
103 verbose(0, "new %s" % self.msg)
104 self.failUnlessEqual(self.sout.getvalue(),
105 " %s continue end\nnew %s\n" % \
106 (self.msg, self.msg))
107
109 """Test if works fine with carriage return (cr) symbol"""
110 verbose(2, self.msg, cr=True)
111 verbose(2, "rewrite", cr=True)
112 verbose(1, "rewrite 2", cr=True)
113 verbose(1, " add", cr=False, lf=False)
114 verbose(1, " finish")
115 target = '\r %s\r \rrewrite' % self.msg + \
116 '\r \rrewrite 2 add finish\n'
117 self.failUnlessEqual(self.sout.getvalue(), target)
118
120 """Test once logger"""
121 self.once("X", self.msg)
122 self.once("X", self.msg)
123 self.failUnlessEqual(self.sout.getvalue(), self.msg+"\n")
124
125 self.once("Y", "XXX", 2)
126 self.once("Y", "XXX", 2)
127 self.once("Y", "XXX", 2)
128 self.failUnlessEqual(self.sout.getvalue(), self.msg+"\nXXX\nXXX\n")
129
130
131 if __debug__:
133 verbose.handlers = [] # so debug doesn't spoil it
134 debug.active = ['1', '2', 'SLC']
135 # do not offset for this test
136 debug('SLC', self.msg, lf=False)
137 self.failUnlessRaises(ValueError, debug, 3, 'bugga')
138 #Should complain about unknown debug id
139 svalue = self.sout.getvalue()
140 regexp = "\[SLC\] DBG(?:{.*})?: %s" % self.msg
141 rematch = re.match(regexp, svalue)
142 self.failUnless(rematch, msg="Cannot match %s with regexp %s" %
143 (svalue, regexp))
144
145
147 verbose.handlers = [] # so debug doesn't spoil it
148 debug.active = ['.*']
149 # we should have enabled all of them
150 self.failUnlessEqual(Set(debug.active),
151 Set(debug.registered.keys()))
152 debug.active = ['S.*', 'CLF']
153 self.failUnlessEqual(Set(debug.active),
154 Set(filter(lambda x:x.startswith('S'),
155 debug.registered.keys())+['CLF']))
156 debug.active = ['SG', 'CLF']
157 self.failUnlessEqual(Set(debug.active), Set(['SG', 'CLF']),
158 msg="debug should do full line matching")
159
160 debug.offsetbydepth = True
161
162
163 # TODO: More tests needed for debug output testing
164
166 return unittest.makeSuite(VerboseOutputTest)
167
168
169 if __name__ == '__main__':
170 import runner
171
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0beta1 on Mon Feb 23 10:50:10 2009 | http://epydoc.sourceforge.net |