Ejemplo n.º 1
0
def test_deletion_counts_as_usage():
    sample_code = dedent("""
        a = 10
        del a
        del b  # undefined var deletion
    """)
    assert find_missing_vars(sample_code) == set(['b'])
Ejemplo n.º 2
0
def test_for_loop_block_is_optional_so_dels_could_be_not_executed():
    sample_code = dedent("""
        a = [1, 2, 3]
        for x in a:
            del a
        print(a)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 3
0
def test_tuple_assignments():
    sample_code = dedent("""
        a, *b, c = 10, 11, 12, 13
        print(a)
        print(b)
        print(c)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 4
0
def test_context_manager_header_vars_leak():
    sample_code = dedent("""
        a = 10
        with a() as b:
            pass
        print(b)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 5
0
def test_while_block_is_optional_so_dels_could_be_not_executed():
    sample_code = dedent("""
        a = 10
        while True:
            del a
        print(a)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 6
0
def test_attributes_arent_analyzed_as_undefined_variables():
    sample_code = dedent("""
        class Sample():
            pass
        a = Sample()
        print(a.name)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 7
0
def test_assigned_vars_are_missing_after_deletion():
    sample_code = dedent("""
        a = 10
        b = 11
        del b
        print(a)
        print(b)  # deleted var as param
    """)
    assert find_missing_vars(sample_code) == set(['b'])
Ejemplo n.º 8
0
def test_for_loop_header_vars_leak():
    sample_code = dedent("""
        sample = [1, 2, 3]
        for a, b in sample:
            pass
        print(a)
        print(b)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 9
0
def test_context_manager_block_isnt_optional_so_dels_will_always_be_executed():
    sample_code = dedent("""
        a = 10
        with a() as b:
            del a
            del b
        print(a)
        print(b)
    """)
    assert find_missing_vars(sample_code) == set(['a', 'b'])
Ejemplo n.º 10
0
def test_simple_assigned_and_unassigned_vars():
    sample_code = dedent("""
        a = 10
        b = 5
        c = a + d  # operation with one undefined var
        print(a)
        print(b)
        print(c)
        print(e)  # undefined var as param
    """)
    assert find_missing_vars(sample_code) == set(['d', 'e'])
Ejemplo n.º 11
0
def test_complex_nested_scopes_handled_right():
    sample_code = dedent("""
        a = 10
        def sample(b):
            c = 10
            class Sample():
                print(a)
                print(b)
                print(c)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 12
0
def test_try_block_is_optional_so_dels_could_be_not_executed():
    sample_code = dedent("""
        a = 10
        try:
            b = 1/0
            del a
        except:
            pass
        print(a)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 13
0
def test_classes_and_functions_are_detected_as_variabes_set():
    sample_code = dedent("""
        def sample():
            def sub_sample():
                sub_sample()
                sample()
        sample()
        class Sample():
            pass
        Sample()
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 14
0
def test_try_except_finally_share_scope_downwards_between_them():
    sample_code = dedent("""
        try:
            a = 10
        except:
            print(a)
            b = 10
        finally:
            print(a)
            print(b)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 15
0
def test_while_isnt_a_different_scope():
    sample_code = dedent("""
        a = 10
        while a:  # defined var in header
            print(a)  # defined var inside
            b = 10  # var defined inside
        print(b)  # var defined inside used outside

        while c:  # undefined var in header
            print(d)  # undefined var inside
    """)
    assert find_missing_vars(sample_code) == set(['c', 'd'])
Ejemplo n.º 16
0
def test_finally_block_isnt_optional_so_dels_will_always_be_executed():
    sample_code = dedent("""
        a = 10
        try:
            pass
        except:
            pass
        finally:
            del a
        print(a)
    """)
    assert find_missing_vars(sample_code) == set(['a'])
Ejemplo n.º 17
0
def test_for_loop_isnt_a_different_scope():
    sample_code = dedent("""
        a = [1, 2, 3]
        for x in a:  # defined var in header
            print(a)  # defined var inside
            b = 10  # var defined inside
        print(b)  # var defined inside used outside

        for x in c:  # undefined var in header
            print(d)  # undefined var inside
    """)
    assert find_missing_vars(sample_code) == set(['c', 'd'])
Ejemplo n.º 18
0
def test_context_manager_isnt_a_different_scope():
    sample_code = dedent("""
        a = 10
        with a() as b:  # defined var in header
            print(a)  # defined var inside
            print(b)  # header defined var inside
            c = 10  # var defined inside
        print(c)  # var defined inside used outside

        while d:  # undefined var in header
            print(e)  # undefined var inside
    """)
    assert find_missing_vars(sample_code) == set(['d', 'e'])
Ejemplo n.º 19
0
def test_unassigned_var_when_similar_assigned_var_but_in_different_scope():
    sample_code = dedent("""
        def sample():
            a = 10
            b = 20
        print(a)  # this var isn't the same from the function
        class Thing():
            c = 10
            def another_sample():
                print(b)  # var defined in another scope
        print(c)  # this var isn't the same from the class
    """)
    assert find_missing_vars(sample_code) == set(['a', 'b', 'c'])
Ejemplo n.º 20
0
def test_deletion_only_removes_from_corresponding_scope():
    sample_code = dedent("""
        a = 10
        def sample():
            a = 10
            del a
        print(a)
        b = 10
        class Thing():
            b = 10
            del b
        print(b)
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 21
0
def test_except_isnt_a_different_scope():
    sample_code = dedent("""
        a = 10
        try:
            pass
        except:
            print(a)  # defined var inside
            b = 10  # var defined inside
        print(b)  # var defined inside used outside

        try:
            pass
        except:
            print(c)  # undefined var inside
    """)
    assert find_missing_vars(sample_code) == set(['c'])
Ejemplo n.º 22
0
def test_builtins_are_ignored():
    sample_code = dedent("""
        sum([10, 20])
    """)
    assert find_missing_vars(sample_code) == set()
Ejemplo n.º 23
0
def test_function_parameters_are_set_variables():
    sample_code = dedent("""
        def sample(a):
            print(a)
    """)
    assert find_missing_vars(sample_code) == set()