def __exit__(self, exc_type, exc_value, exc_tb): if exc_type is None: expected = pp.format_exception_class(self.exception_class) message = "expected: %s is raised\n" \ " but was: no exception raised" % expected self.test_case._fail(message) if not isinstance(exc_value, BaseException): # In Python 2.6, exc_value is not always normalized to an # exception instance, so we convert it manually here. exc_value = exc_type(exc_value) if self.exception_class == exc_type: if self.exception == exc_type: self.test_case._pass_assertion() else: self.test_case.assert_equal(self.exception, exc_value) else: expected = pp.format_exception_class(self.exception_class) actual = pp.format_exception_class(exc_type) message = \ "expected: %s is raised\n" \ " but was: %s(%s)" % (expected, actual, str(exc_value)) self.test_case._fail(message) return True
def assert_run_command(self, command, **kw_args): """ Passes if command is successfully ran and returns subprocess.Popen. process = self.assert_run_command(["echo", "123"]) # => pass self.assert_equal("123\\n", process.stdout.read()) # => pass self.assert_run_command("false") # => fail self.assert_run_command("unknown-command") # => fail """ import subprocess popen_kw_args = { "stdin": subprocess.PIPE, "stdout": subprocess.PIPE, "stderr": subprocess.PIPE, } popen_kw_args.update(kw_args) try: process = subprocess.Popen(command, **popen_kw_args) except OSError: exception_class, exception_value = sys.exc_info()[:2] message = "expected: <%s> is successfully ran\n" \ " but was: <%s>(%s) is raised and failed to ran" % \ (pp.format(command), pp.format_exception_class(exception_class), str(exception_value)) self._fail(message) return_code = process.wait() if return_code != 0: message = "expected: <%s> is successfully finished\n" \ " but was: <%d> is returned as exit code" % \ (pp.format(command), return_code) self._fail(message) self._pass_assertion() return process
def assert_open_file(self, name, *args): """ Passes if open(name, *args) succeeds. file = self.assert_open_file("/tmp/exist", "w") # => pass self.assert_open_file("/tmp/nonexistence") # => fail """ try: result = open(name, *args) except IOError: exception_class, exception_value = sys.exc_info()[:2] message = \ "expected: open(%s) succeeds\n" \ " but was: <%s>(%s) is raised" % \ (pp.format_call_arguments((name,) + args, {}), pp.format_exception_class(exception_class), str(exception_value)) self._fail(message) self._pass_assertion() return result
def assert_nothing_raised_call(self, callable_object, *args, **kw_args): """ Passes if callable_object(*args, **kw_args) raises nothing exception and returns called result. self.assert_nothing_raised_call(lambda: 1) # => pass # => returns 1 self.assert_nothing_raised_call(lambda: unknown_variable) # => fail """ self.assert_callable(callable_object) try: result = callable_object(*args, **kw_args) except: actual = sys.exc_info()[:2] actual_exception_class, actual_exception_value = actual message = \ "expected: %s nothing raised\n" \ " but was: <%s>(%s) is raised" % \ (pp.format_call(callable_object, args, kw_args), pp.format_exception_class(actual_exception_class), str(actual_exception_value)) self._fail(message) self._pass_assertion() return result
def assert_raise_call(self, exception, callable_object, *args, **kw_args): """ Passes if callable_object(*args, **kw_args) raises exception and returns raised exception value. self.assert_raise_call(NameError, lambda: unknown_variable) # => pass # => returns NameError # value self.assert_raise_call(NameError, lambda: 1) # => fail Exception instance can be also passed if it's comparable. class ComparableError(Exception): def __init__(self, message): self.message = message def __repr__(self): return "%s(%r,)" % (type(self).__name__, self.message) def __eq__(self, other): return isinstance(other, self.__class__) and \ self.message == other.message def raise_error(): raise ComparableError("value") self.assert_raise_call(ComparableError("value"), raise_error) # => pass # => returns # ComparableError # value self.assert_raise_call(ComparableError("key"), raise_error) # => fail """ self.assert_callable(callable_object) if isinstance(exception, Exception): exception_class = exception.__class__ else: exception_class = exception try: callable_object(*args, **kw_args) except exception_class: actual = sys.exc_info()[1] if exception_class == exception: self._pass_assertion() else: self.assert_equal(exception, actual) return actual except: actual = sys.exc_info() actual_exception_class, actual_exception_value = actual[:2] if exception_class == exception: expected = "<%s>" % pp.format_exception_class(exception_class) else: expected = "<%s>(%s)" % \ (pp.format_exception_class(exception_class), str(exception)) actual = "<%s>(%s)" % \ (pp.format_exception_class(actual_exception_class), str(actual_exception_value)) message = \ "expected: %s is raised\n" \ " but was: %s" % (expected, actual) self._fail(message) else: message = \ "expected: <%s> is raised\n" \ " but was: %s nothing raised" % \ (pp.format_exception_class(exception_class), pp.format_call(callable_object, args, kw_args)) self._fail(message)