Пример #1
0
def collect_smart_step_into_variants(*args, **kwargs):
    try:
        return pydevd_bytecode_utils.calculate_smart_step_into_variants(
            *args, **kwargs)
    except:
        # In a failure, rerun with DEBUG!
        debug = pydevd_bytecode_utils.DEBUG
        pydevd_bytecode_utils.DEBUG = True
        try:
            return pydevd_bytecode_utils.calculate_smart_step_into_variants(
                *args, **kwargs)
        finally:
            pydevd_bytecode_utils.DEBUG = debug
def test_smart_step_into_bytecode_info():
    from _pydevd_bundle.pydevd_bytecode_utils import Variant

    def function():

        def some(arg):
            pass

        def call(arg):
            pass

        yield sys._getframe()
        call(some(call(some())))

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    check(found, [
        Variant(name=('_getframe', 'sys'), is_visited=True, line=8, offset=20, call_order=1),
        Variant(name='some', is_visited=False, line=9, offset=34, call_order=1),
        Variant(name='call', is_visited=False, line=9, offset=36, call_order=1),
        Variant(name='some', is_visited=False, line=9, offset=38, call_order=2),
        Variant(name='call', is_visited=False, line=9, offset=40, call_order=2),
    ])
def test_smart_step_into_bytecode_info_024():

    def function():
        yield sys._getframe()
        a ** b
        a * b
        # a @ b -- syntax error on Python 2.7, so, removed from this test.
        a / b
        a // b
        a % b
        a + b
        a - b
        a >> b
        a << b
        a & b
        a | b
        a ^ b

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {
        '_getframe', '__pow__', '__mul__', '__div__', '__floordiv__', '__mod__', '__add__', '__sub__',
        '__lshift__', '__rshift__', '__and__', '__or__', '__xor__'}
def test_smart_step_into_bytecode_info_00eq():
    from _pydevd_bundle.pydevd_bytecode_utils import Variant

    def function():
        a = 1
        b = 1
        if a == b:
            pass
        if a != b:
            pass
        if a > b:
            pass
        if a >= b:
            pass
        if a < b:
            pass
        if a <= b:
            pass
        if a is b:
            pass

        yield sys._getframe()

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    if sys.version_info[:2] < (3, 9):
        check(found, [
            Variant(name='__eq__', is_visited=True, line=3, offset=18, call_order=1),
            Variant(name='__ne__', is_visited=True, line=5, offset=33, call_order=1),
            Variant(name='__gt__', is_visited=True, line=7, offset=48, call_order=1),
            Variant(name='__ge__', is_visited=True, line=9, offset=63, call_order=1),
            Variant(name='__lt__', is_visited=True, line=11, offset=78, call_order=1),
            Variant(name='__le__', is_visited=True, line=13, offset=93, call_order=1),
            Variant(name='is', is_visited=True, line=15, offset=108, call_order=1),
            Variant(name=('_getframe', 'sys'), is_visited=True, line=18, offset=123, call_order=1),
        ])
    else:
        check(found, [
            Variant(name='__eq__', is_visited=True, line=3, offset=18, call_order=1),
            Variant(name='__ne__', is_visited=True, line=5, offset=33, call_order=1),
            Variant(name='__gt__', is_visited=True, line=7, offset=48, call_order=1),
            Variant(name='__ge__', is_visited=True, line=9, offset=63, call_order=1),
            Variant(name='__lt__', is_visited=True, line=11, offset=78, call_order=1),
            Variant(name='__le__', is_visited=True, line=13, offset=93, call_order=1),
            Variant(name=('_getframe', 'sys'), is_visited=True, line=18, offset=123, call_order=1),
        ])
def test_smart_step_into_bytecode_info_023():

    def function():
        yield sys._getframe()
        tuple(x for x in c() if x == d())

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {'_getframe', 'c', 'd', 'tuple', '__eq__'}
def test_smart_step_into_bytecode_info_017():

    def function():
        yield sys._getframe()
        call([x for x in y if x == call2()])

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {'_getframe', 'call', '__eq__', 'call2'}
def test_smart_step_into_bytecode_info_013():

    def function():
        yield sys._getframe()
        (lambda a:a,)[0](1)

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {'_getframe', '__getitem__().__call__', '__getitem__'}
def test_smart_step_into_bytecode_info_003():

    def function():
        yield sys._getframe()
        bbb = foo.bar(
            Something(param1, param2=xxx.yyy), {}
        )
        call()

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {'_getframe', 'bar', 'Something', 'call', 'yyy'}
def test_smart_step_into_bytecode_info_021():

    def function():
        yield sys._getframe()
        a, b = b, a
        a, b, c = c, a, b
        a, b, c, d = d, c, a, b
        a()

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {'_getframe', 'a'}
def test_smart_step_into_bytecode_info_014():

    def function():
        yield sys._getframe()
        try:
            raise RuntimeError()
        except Exception:
            call2()
        finally:
            call3()

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {'_getframe', 'RuntimeError', 'call2', 'call3'}
def test_smart_step_into_bytecode_info_019():

    def function():
        yield sys._getframe()

        class Foo(object):

            def __init__(self):
                pass

        f = Foo()

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {'_getframe', 'Foo'}
def test_smart_step_into_bytecode_info_020():

    def function():
        yield sys._getframe()
        for a in call():
            if a != 1:
                a()
                break
            elif a != 2:
                b()
                break
            else:
                continue
        else:
            raise RuntimeError()

    generator = iter(function())
    frame = next(generator)

    found = pydevd_bytecode_utils.calculate_smart_step_into_variants(
        frame, 0, 99999, base=function.__code__.co_firstlineno)

    names = set(x.name for x in found)
    assert names == {'_getframe', 'call', 'a', 'b', 'RuntimeError', '__ne__'}