comparison testcases.py @ 105:9f922b11c98a

Absent output files no longer crash Upreckon
author Oleg Oshmyan <chortos@inbox.lv>
date Fri, 08 Apr 2011 17:45:53 +0300
parents 8f46e84922f9
children aa0378ea1f93
comparison
equal deleted inserted replaced
104:8f46e84922f9 105:9f922b11c98a
329 call(case.problem.config.path, case=case, stdin=devnull, stdout=devnull, stderr=STDOUT) 329 call(case.problem.config.path, case=case, stdin=devnull, stdout=devnull, stderr=STDOUT)
330 if config.globalconf.force_zero_exitcode and case.process.returncode or case.process.returncode < 0: 330 if config.globalconf.force_zero_exitcode and case.process.returncode or case.process.returncode < 0:
331 raise NonZeroExitCode(case.process.returncode) 331 raise NonZeroExitCode(case.process.returncode)
332 case.has_called_back = True 332 case.has_called_back = True
333 callback() 333 callback()
334 with open(case.problem.config.outname, 'rU') as output: 334 try:
335 output = open(case.problem.config.outname, 'rU')
336 except IOError:
337 raise CannotReadOutputFile(sys.exc_info()[1])
338 with output as output:
335 return case.validate(output) 339 return case.validate(output)
336 340
337 341
338 # This is the only test case type not executing any programs to be tested 342 # This is the only test case type not executing any programs to be tested
339 class OutputOnlyTestCase(ValidatedTestCase): 343 class OutputOnlyTestCase(ValidatedTestCase):
345 349
346 def test(case, callback): 350 def test(case, callback):
347 case.time_stopped = case.time_started = 0 351 case.time_stopped = case.time_started = 0
348 case.has_called_back = True 352 case.has_called_back = True
349 callback() 353 callback()
350 with open(case.problem.config.outname.replace('$', case.id), 'rU') as output: 354 try:
355 output = open(case.problem.config.outname.replace('$', case.id), 'rU')
356 except IOError:
357 raise CannotReadOutputFile(sys.exc_info()[1])
358 with output as output:
351 return case.validate(output) 359 return case.validate(output)
352 360
353 361
354 class BestOutputTestCase(ValidatedTestCase): 362 class BestOutputTestCase(ValidatedTestCase):
355 __slots__ = () 363 __slots__ = ()