Beispiel #1
0
def test_capture_exception_twice_caches_object(error):
    try:
        try:
            raise RuntimeError()
        except RuntimeError:
            err1 = Error.capture_exception()
            raise
    except RuntimeError:
        err2 = Error.capture_exception()

    assert err1 is err2
Beispiel #2
0
def test_capture_exception_twice_caches_object():
    try:
        try:
            raise RuntimeError()
        except RuntimeError:
            err1 = Error.capture_exception()
            raise
    except RuntimeError:
        err2 = Error.capture_exception()

    assert err1 is err2
Beispiel #3
0
def test_self_attribute_throws():

    class CustomException(Exception):
        pass

    def func():
        x = DangerousObject()
        x.method()

    class DangerousObject(object):

        def __getattribute__(self, attr):
            if attr == '__dict__':
                1/0  # pylint: disable=pointless-statement
            return super(DangerousObject, self).__getattribute__(attr)

        def method(self):
            raise CustomException()

    try:
        func()
    except CustomException:
        error = Error(exc_info=sys.exc_info())
    else:
        assert False, 'Did not raise'

    locals = error.traceback.frames[-1].locals
    assert 'self' in locals
    for key in locals:
        assert 'self.' not in key
Beispiel #4
0
def test_traceback_line_numbers(tmpdir):
    filename = tmpdir.join('filename.py')

    with filename.open('w') as f:
        f.write('''from contextlib import contextmanager
def f():
    with context():
        a = 1
        b = 2
        g()
        c = 3
        d = 4

def g():
    1/0

@contextmanager
def context():
    yield
''')

    mod = emport.import_file(str(filename))
    try:
        mod.f()
    except ZeroDivisionError:
        err = Error(exc_info=sys.exc_info())
    else:
        assert False, 'did not fail'

    assert err.traceback.frames[-2].lineno == 6
Beispiel #5
0
def error():
    try:
        func_1()
    except:
        return Error.capture_exception()
    else:
        assert False, "Did not fail"
Beispiel #6
0
def error():
    try:
        func_1()
    except:
        return Error.capture_exception()
    else:
        assert False, "Did not fail"
Beispiel #7
0
def test_dict_getting_raises_exception():

    def func():
        x = NonDictable()
        x.method()

    try:
        func()
    except ZeroDivisionError:
        error_string = Error(exc_info=sys.exc_info()).traceback.to_string(include_vars=True)
    assert 'self:' in error_string
Beispiel #8
0
def test_variable_capping():

    def f():
        g()

    def g():
        long_var = 'a' * 1000
        assert len(long_var) > _MAX_VARIABLE_VALUE_LENGTH
        1/0                     # pylint: disable=pointless-statement

    try:
        f()
    except ZeroDivisionError:
        err = Error(exc_info=sys.exc_info())

    distilled = err.traceback.to_list()
    assert len(distilled[-1]['locals']['long_var']['value']) == _MAX_VARIABLE_VALUE_LENGTH
Beispiel #9
0
def error():
    class MyException(Exception):
        def __init__(self):
            super(MyException, self).__init__()
            self.x = 2
            self.y = [str(i) for i in range(10)]
            self.d = {'some': 'dict', 'here': 'too'}
            self.unprintable = Unprintable()

    def func():
        raise MyException()

    try:
        func()
    except MyException:
        return Error(exc_info=sys.exc_info())
    else:
        assert False, 'Did not raise'
Beispiel #10
0
def test_error_frame_correction():
    class CustomException(Exception):
        pass

    def f():
        g()

    def g():
        h()

    def h():
        raise mark_exception_frame_correction(CustomException(), +2)

    try:
        f()
    except CustomException:
        err = Error.capture_exception()

    assert err.traceback.frames[-1].func_name == 'f'
Beispiel #11
0
def assertion_error(tmpdir):
    filename = tmpdir.join("file.py")
    filename.write("""
def f(x):
    return x
def g(x):
    return x

def func():
    assert f(g(1)) == g(f(2))""")

    with dessert.rewrite_assertions_context():
        module = emport.import_file(str(filename))

    try:
        module.func()
    except:
        return Error.capture_exception()
    else:
        assert False, "Did not fail"
Beispiel #12
0
def assertion_error(tmpdir):
    filename = tmpdir.join("file.py")
    filename.write("""
def f(x):
    return x

def g(x):
    return x

def func():
    assert f(g(1)) == g(f(2))""")

    with dessert.rewrite_assertions_context():
        module = emport.import_file(str(filename))

    try:
        module.func()
    except:
        return Error.capture_exception()
    else:
        assert False, "Did not fail"
Beispiel #13
0
def test_exception_attributes_with_message():
    assert Error('x').exception_attributes is None
Beispiel #14
0
 def func2():
     return Error('some_error')