Mercurial > ~astiob > upreckon > hgweb
comparison 2.00/test-svn.py @ 22:f07b7a431ea6
Further 2.00 work
Testconfs in all supported kinds of archives should now work.
Test runs are now cancelled by pressing Escape rather than Ctrl+C.
Improved time control.
Greatly improved temporary and helper file cleanup.
The pause configuration variable can now be a callable and is now processed using subprocess rather than system().
author | Oleg Oshmyan <chortos@inbox.lv> |
---|---|
date | Wed, 22 Sep 2010 22:01:56 +0000 |
parents | ec6f1a132109 |
children | c1f52b5d80d6 |
comparison
equal
deleted
inserted
replaced
21:ec6f1a132109 | 22:f07b7a431ea6 |
---|---|
55 sys.stdout.flush() | 55 sys.stdout.flush() |
56 urllib.urlretrieve('http://chortos.selfip.net/~astiob/test.py/test.py', sys.argv[0]) | 56 urllib.urlretrieve('http://chortos.selfip.net/~astiob/test.py/test.py', sys.argv[0]) |
57 say('Downloaded and installed. Now you are using test.py ' + latesttext + '.') | 57 say('Downloaded and installed. Now you are using test.py ' + latesttext + '.') |
58 sys.exit() | 58 sys.exit() |
59 | 59 |
60 import config, itertools, os, sys, time | 60 import config, itertools, os, subprocess, sys, time |
61 | 61 |
62 if options.autotime: | 62 if options.autotime: |
63 # This is really a dirty hack that assumes that sleep() does not spend | |
64 # the CPU time of the current process and that if clock() measures | |
65 # wall-clock time, then it is more precise than time() is. Both these | |
66 # assumptions are true on all platforms I have tested this on so far, | |
67 # but I am not aware of any guarantee that they will both be true | |
68 # on every other platform. | |
63 c = time.clock() | 69 c = time.clock() |
64 time.sleep(1) | 70 time.sleep(1) |
65 c = time.clock() - c | 71 c = time.clock() - c |
66 if int(c + .5) == 1: | 72 if int(c + .5) == 1: |
67 clock = time.clock | 73 clock = time.clock |
71 clock = time.clock | 77 clock = time.clock |
72 else: | 78 else: |
73 clock = time.time | 79 clock = time.time |
74 | 80 |
75 try: | 81 try: |
82 from testcases import pause | |
83 except ImportError: | |
84 pause = None | |
85 | |
86 try: | |
76 globalconf = config.load_global() | 87 globalconf = config.load_global() |
77 | 88 |
78 # Do this check here so that if we have to warn them, we do it as early as possible | 89 # Do this check here so that if we have to warn them, we do it as early as possible |
79 if options.pause and not hasattr(globalconf, 'pause'): | 90 if options.pause and not pause and not hasattr(globalconf, 'pause'): |
80 try: | 91 # testcases.pause will be sure to import msvcrt if it can |
81 # If we have getch, we don't need config.pause | 92 #try: |
82 import msvcrt | 93 # # If we have getch, we don't need globalconf.pause |
83 msvcrt.getch.__call__ | 94 # import msvcrt |
84 except Exception: | 95 # msvcrt.getch.__call__ |
96 #except Exception: | |
85 if os.name == 'posix': | 97 if os.name == 'posix': |
86 globalconf.pause = 'read -s -n 1' | 98 globalconf.pause = 'read -s -n 1' |
87 say('Warning: configuration variable pause is not defined; it was devised automatically but the choice might be incorrect, so test.py might exit immediately after the testing is completed.') | 99 say('Warning: configuration variable pause is not defined; it was devised automatically but the choice might be incorrect, so test.py might exit immediately after the testing is completed.', file=sys.stderr) |
88 sys.stdout.flush() | 100 sys.stderr.flush() |
89 elif os.name == 'nt': | 101 elif os.name == 'nt': |
90 globalconf.pause = 'pause' | 102 globalconf.pause = 'pause' |
91 else: | 103 else: |
92 sys.exit('Error: configuration variable pause is not defined and cannot be devised automatically.') | 104 sys.exit('Error: configuration variable pause is not defined and cannot be devised automatically.') |
93 | 105 |
136 realscore = 0 | 148 realscore = 0 |
137 | 149 |
138 for taskname in globalconf.tasknames: | 150 for taskname in globalconf.tasknames: |
139 problem = Problem(taskname) | 151 problem = Problem(taskname) |
140 | 152 |
141 if ntasks: say() | 153 if ntasks and not options.copyonly: say() |
142 if shouldprintnames: say(taskname) | 154 if shouldprintnames: say(taskname) |
143 | 155 |
144 if options.copyonly: | 156 if options.copyonly: |
145 problem.copytestdata() | 157 problem.copytestdata() |
146 else: | 158 else: |
147 real, max = problem.test() | 159 real, max = problem.test() |
148 | 160 |
149 ntasks += 1 | 161 ntasks += 1 |
150 nfulltasks += (real == max) | 162 nfulltasks += real == max |
151 realscore += real | 163 realscore += real |
152 maxscore += max | 164 maxscore += max |
153 | 165 |
154 if options.copyonly: | 166 if options.copyonly: |
155 sys.exit() | 167 sys.exit() |
162 | 174 |
163 if options.pause: | 175 if options.pause: |
164 say('Press any key to exit...') | 176 say('Press any key to exit...') |
165 sys.stdout.flush() | 177 sys.stdout.flush() |
166 | 178 |
167 try: | 179 #try: |
168 import msvcrt | 180 # import msvcrt |
169 msvcrt.getch() | 181 # msvcrt.getch() |
170 except Exception: | 182 #except Exception: |
171 os.system(globalconf.pause + ' >' + os.devnull) | 183 if pause: |
184 pause() | |
185 elif callable(globalconf.pause): | |
186 globalconf.pause() | |
187 else: | |
188 with open(os.devnull, 'w') as devnull: | |
189 subprocess.call(globalconf.pause, stdout=devnull, stderr=subprocess.STDOUT) |