def __enter__(self): """ Begin the context handling. Clears out any captured data and initializes any timeouts defined for the test. """ # Clear the captured values for this thread capture.retrieve() # If test should be timed, set up the timeout if self.result._test._timeout: self.timeout = Timeout(self.result._test._timeout, AssertionError("Timed out after %s " "seconds" % self.result._test._timeout))
def __exit__(self, exc_type, exc_value, tb): """ Ends context handling. Cancels any pending timeouts, retrieves output data and exceptions, and determines the final result of the test. A DTestMessage object is initialized if necessary. """ # Cancel the timeout if one is pending if self.timeout is not None: self.timeout.cancel() self.timeout = None # Get the output and clean up captured = capture.retrieve() # If this was the test, determine a result if self.ctx in (PRE, TEST): self.result._set_result(self, exc_type, exc_value, tb) # Generate a message, if necessary if captured or exc_type or exc_value or tb: self.result._storemsg(self, captured, exc_type, exc_value, tb) # We handled the exception return True