comparison testcases.py @ 62:593ad09cd69b

Multiple exit code handling fixes call() on POSIX now always gets the exit code of the process. force_zero_exitcode now has no effect if the process got killed by a signal.
author Oleg Oshmyan <chortos@inbox.lv>
date Wed, 22 Dec 2010 15:03:47 +0200
parents 24f144e11b5e
children fb9d0223a871
comparison
equal deleted inserted replaced
61:24f144e11b5e 62:593ad09cd69b
204 if sys.stdin.read(1) == '\33': 204 if sys.stdin.read(1) == '\33':
205 raise CanceledByUser 205 raise CanceledByUser
206 except select_error: 206 except select_error:
207 if sys.exc_info()[1].args[0] != EINTR: 207 if sys.exc_info()[1].args[0] != EINTR:
208 raise 208 raise
209 else:
210 case.process.poll()
209 else: 211 else:
210 time_end = clock() + case.maxtime 212 time_end = clock() + case.maxtime
211 try: 213 try:
212 while case.process.poll() is None: 214 while case.process.poll() is None:
213 remaining = time_end - clock() 215 remaining = time_end - clock()
218 else: 220 else:
219 raise TimeLimitExceeded 221 raise TimeLimitExceeded
220 except select_error: 222 except select_error:
221 if sys.exc_info()[1].args[0] != EINTR: 223 if sys.exc_info()[1].args[0] != EINTR:
222 raise 224 raise
225 else:
226 case.process.poll()
223 del bury_child.case 227 del bury_child.case
224 def call(*args, **kwargs): 228 def call(*args, **kwargs):
225 if 'preexec_fn' in kwargs: 229 if 'preexec_fn' in kwargs:
226 try: 230 try:
227 return call_real(*args, **kwargs) 231 return call_real(*args, **kwargs)
559 if canceled(): 563 if canceled():
560 raise CanceledByUser 564 raise CanceledByUser
561 else: 565 else:
562 time_next_check = now + .15 566 time_next_check = now + .15
563 time.sleep(.001) 567 time.sleep(.001)
564 if config.globalconf.force_zero_exitcode and case.process.returncode: 568 if config.globalconf.force_zero_exitcode and case.process.returncode or case.process.returncode < 0:
565 raise NonZeroExitCode(case.process.returncode) 569 raise NonZeroExitCode(case.process.returncode)
566 callback() 570 callback()
567 case.has_called_back = True 571 case.has_called_back = True
568 outfile.seek(0) 572 outfile.seek(0)
569 return case.validate(outfile) 573 return case.validate(outfile)
611 if canceled(): 615 if canceled():
612 raise CanceledByUser 616 raise CanceledByUser
613 else: 617 else:
614 time_next_check = now + .15 618 time_next_check = now + .15
615 time.sleep(.001) 619 time.sleep(.001)
616 if config.globalconf.force_zero_exitcode and case.process.returncode: 620 if config.globalconf.force_zero_exitcode and case.process.returncode or case.process.returncode < 0:
617 raise NonZeroExitCode(case.process.returncode) 621 raise NonZeroExitCode(case.process.returncode)
618 callback() 622 callback()
619 case.has_called_back = True 623 case.has_called_back = True
620 with open(case.problem.config.outname, 'rU') as output: 624 with open(case.problem.config.outname, 'rU') as output:
621 return case.validate(output) 625 return case.validate(output)