コード例 #1
0
ファイル: test_imports2s.py プロジェクト: deshaw/pyflyby
def test_fix_missing_imports_nonlocal_post_del_1():
    """
    Calling F2 after the deletion of x2 in the enclosing scope make no sens, it
    would trigger a:

    NameError: free variable 'x2' referenced before assignment in enclosing scope

    Regardless as to whether x2 is defines at module scope or not.

    Therefore we do not expect x2 to be imported
    """
    input = PythonBlock(
        dedent('''
        def F1():
            x1 = x2 = None
            def F2():
                x1, x2, x3, y1
            del x2
    ''').lstrip())
    db = ImportDB("from m2 import x1, x2, x3, x4")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(
        dedent('''
        from m2 import x3

    ''').lstrip() + str(input))
    assert output == expected
コード例 #2
0
def test_fix_unused_import_future_is_not_unused_1():
    input = PythonBlock(dedent(r'''
        from __future__ import division
    ''').lstrip())
    db = ImportDB("")
    output = fix_unused_and_missing_imports(input, db=db)
    assert output == input
コード例 #3
0
def test_fix_unused_and_missing_imports_insertion_after_docstring_whitespace_1(
):
    input = PythonBlock(
        dedent('''
        """
        aaa
        """


        f1, f2
    ''').lstrip())
    db = ImportDB("from m1 import f1")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(
        dedent('''
        """
        aaa
        """


        from m1 import f1

        f1, f2
    ''').lstrip())
    assert output == expected
コード例 #4
0
def test_empty_file_mandatory_1():
    input = PythonBlock('', filename="/foo/test_empty_file_mandatory_1.py")
    db = ImportDB("__mandatory_imports__ = ['from aa import cc,bb']")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock('from aa import bb, cc\n\n',
                           filename="/foo/test_empty_file_mandatory_1.py")
    assert output == expected
コード例 #5
0
def test_last_line_comment_no_trailing_newline_1():
    input = PythonBlock("y\n#x")
    db = ImportDB("from Y import y")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from Y import y

        y
        #x''').lstrip())
    assert output == expected
コード例 #6
0
def test_fix_missing_imports_funcall_1():
    input = PythonBlock(dedent('''
        def F1(x1): x1, x2, y1
    ''').lstrip())
    db = ImportDB("from m2 import x1, x2, x3, x4")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from m2 import x2

    ''').lstrip() + str(input))
    assert output == expected
コード例 #7
0
def test_fix_unused_imports_funcall_1():
    input = PythonBlock(dedent('''
        from m1 import X1, X2
        def F1(X1): X1, X2
    ''').lstrip())
    db = ImportDB("")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from m1 import X2
        def F1(X1): X1, X2
    ''').lstrip())
    assert output == expected
コード例 #8
0
def test_fix_unused_and_missing_imports_IfExp_1():
    input = PythonBlock(dedent('''
        x if y else z
    ''').lstrip())
    db = ImportDB("from m1 import w, x, y, z")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from m1 import x, y, z

        x if y else z
    ''').lstrip())
    assert output == expected
コード例 #9
0
def test_fix_unused_and_missing_imports_reassigned_first_reference_1():
    input = PythonBlock(dedent('''
        from bar import foo1, foo2
        foo2 = foo2 + 0
    ''').lstrip())
    db = ImportDB("")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from bar import foo2
        foo2 = foo2 + 0
    ''').lstrip())
    assert output == expected
コード例 #10
0
def test_fix_unused_and_missing_imports_shadowed_1():
    input = PythonBlock(dedent('''
        from m1 import f1, f2, f3
        def f2(): f1
    ''').lstrip())
    db = ImportDB("")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from m1 import f1
        def f2(): f1
    ''').lstrip())
    assert output == expected
コード例 #11
0
def test_fix_unused_and_missing_imports_unknown_1():
    input = PythonBlock(dedent('''
        os, sys
    ''').lstrip())
    db = ImportDB("import os")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        import os

        os, sys
    ''').lstrip())
    assert output == expected
コード例 #12
0
def test_fix_unused_imports_dunder_file_1(capsys):
    input = PythonBlock(dedent('''
        __file__, __asdf__
    '''))
    db = ImportDB("")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        __file__, __asdf__
    '''))
    assert expected == output
    captured = capsys.readouterr()
    assert "undefined name '__asdf__'"     in captured.out
    assert "undefined name '__file__'" not in captured.out
コード例 #13
0
def test_fix_unused_imports_submodule_1():
    input = PythonBlock(dedent('''
        import m2.y
        m2.x + m2.y + m3.x
    '''))
    db = ImportDB("import m2, m3, m4")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        import m2.y
        import m3
        m2.x + m2.y + m3.x
    '''))
    assert expected == output
コード例 #14
0
ファイル: test_imports2s.py プロジェクト: deshaw/pyflyby
def test_x_shadow_comprehension(capsys):
    input = PythonBlock(
        dedent("""
    def f():
        x = 1
        y = [x for _ in range(5)]
        del x
    """))
    db = ImportDB("")
    output = fix_unused_and_missing_imports(input, db=db)
    out, err = capsys.readouterr()
    assert output == input
    assert "undefined name 'x'" not in out
    assert not err
コード例 #15
0
def test_with_multi_1():
    input = PythonBlock(dedent('''
        with       aa as xx  , bb as yy, cc as zz:
            pass
    ''').lstrip())
    db = ImportDB("from M import aa, bb, cc, dd, xx, yy, zz")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from M import aa, bb, cc

        with       aa as xx  , bb as yy, cc as zz:
            pass
    ''').lstrip())
    assert expected == output
コード例 #16
0
def test_fix_unused_imports_repeated_1():
    input = PythonBlock(dedent('''
        import foo1, foo2, foo1, foo1
        import foo1, foo2, foo3
        foo1, foo2
    '''))
    db = ImportDB("")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        import foo1
        import foo2
        foo1, foo2
    '''))
    assert expected == output
コード例 #17
0
def test_with_1():
    input = PythonBlock(dedent('''
        with   closing(open("/etc/passwd")) as f:
            pass
    ''').lstrip())
    db = ImportDB("from contextlib import closing")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from contextlib import closing

        with   closing(open("/etc/passwd")) as f:
            pass
    ''').lstrip())
    assert expected == output
コード例 #18
0
def test_fix_missing_imports_nonlocal_post_del_1():
    input = PythonBlock(dedent('''
        def F1():
            x1 = x2 = None
            def F2():
                x1, x2, x3, y1
            del x2
    ''').lstrip())
    db = ImportDB("from m2 import x1, x2, x3, x4")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from m2 import x2, x3

    ''').lstrip() + str(input))
    assert output == expected
コード例 #19
0
def test_future_flags_1():
    input = PythonBlock(dedent('''
        from __future__ import print_function

        print("", file=sys.stdout)
    ''').lstrip())
    db = ImportDB("import os, sys")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from __future__ import print_function
        import sys

        print("", file=sys.stdout)
    ''').lstrip())
    assert output == expected
コード例 #20
0
def test_fix_unused_and_missing_imports_known_different_1():
    input = PythonBlock(dedent('''
        from ma import a1, a2
        from mb import b1, b2
        a1, a2, a3, b1, b2, b3
    ''').lstrip())
    db = ImportDB("from MA import a1, a2, a3\nfrom MB import b1, b2, b3\n")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from MA import a3
        from MB import b3
        from ma import a1, a2
        from mb import b1, b2
        a1, a2, a3, b1, b2, b3
    ''').lstrip())
    assert output == expected
コード例 #21
0
def test_fix_unused_and_missing_continutation_1():
    input = PythonBlock(dedent(r'''
        a#\
        b + '\
        c#' + d
    ''').lstrip())
    db = ImportDB("from m1 import a, b, c, d")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent(r'''
        from m1 import a, b, d

        a#\
        b + '\
        c#' + d
    ''').lstrip())
    assert output == expected
コード例 #22
0
def test_fix_unused_and_missing_imports_insertion_comments_1():
    input = PythonBlock(
        dedent('''
        #c0
        from m1.y import m1yf
        #c1
        from m2.y import m2yf
        #c2
        from m3.y import m3yf
        #c3
        m1xf, m2xf, m3xf
        m1yf, m2yf, m3yf
        m1zf, m2zf, m3zf
    ''').lstrip())
    db = ImportDB("""
        from m1.x import m1xf
        from m1.y import m1yf
        from m1.z import m1zf
        from m2.x import m2xf
        from m2.y import m2yf
        from m2.z import m2zf
        from m3.x import m3xf
        from m3.y import m3yf
        from m3.z import m3zf
    """)
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(
        dedent('''
        #c0
        from m1.x import m1xf
        from m1.y import m1yf
        from m1.z import m1zf
        #c1
        from m2.x import m2xf
        from m2.y import m2yf
        from m2.z import m2zf
        #c2
        from m3.x import m3xf
        from m3.y import m3yf
        from m3.z import m3zf
        #c3
        m1xf, m2xf, m3xf
        m1yf, m2yf, m3yf
        m1zf, m2zf, m3zf
    ''').lstrip())
    assert output == expected
コード例 #23
0
def test_fix_unused_and_missing_imports_insertion_heuristic_1():
    input = PythonBlock(dedent('''
        from m1.a import f1
        from m2.a import f2
        from m3.a import f3
        f1, f2, f3, f4
    ''').lstrip())
    db = ImportDB("from m2.b import f4")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from m1.a import f1
        from m2.a import f2
        from m2.b import f4
        from m3.a import f3
        f1, f2, f3, f4
    ''').lstrip())
    assert output == expected
コード例 #24
0
def test_fix_unused_and_missing_imports_1():
    input = PythonBlock(dedent('''
        from foo import m1, m2, m3, m4
        m2, m4, np.foo
    ''').lstrip(), filename="/foo/test_fix_unused_and_missing_imports_1.py")
    db = ImportDB("""
        import numpy as np
        __mandatory_imports__ = ["from __future__ import division"]
    """)
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from __future__ import division

        import numpy as np
        from foo import m2, m4
        m2, m4, np.foo
    ''').lstrip(), filename="/foo/test_fix_unused_and_missing_imports_1.py")
    assert output == expected
コード例 #25
0
def test_fix_unused_and_missing_imports_insertion_after_comments_1():
    input = PythonBlock(dedent('''
        # hello

        # there
        f1, f2
    ''').lstrip())
    db = ImportDB("from m1 import f1")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        # hello

        # there
        from m1 import f1

        f1, f2
    ''').lstrip())
    assert output == expected
コード例 #26
0
def test_fix_unused_and_missing_imports_compound_statements_1():
    input = PythonBlock(dedent('''
        import a, b; import c, d; g
        a, c; f
    ''').lstrip())
    db = ImportDB("""
        from m1 import f
        from m1 import g
    """)
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        import a
        import c
        from m1 import f, g
        g
        a, c; f
    ''').lstrip())
    assert output == expected
コード例 #27
0
def test_fix_unused_and_missing_imports_midfile_1():
    input = PythonBlock(dedent('''
        import m1, m2
        m2, m3
        import m4, m5
        m4, m6
    ''').lstrip())
    db = ImportDB("import m1, m2, m3, m4, m5, m6, m7")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        import m2
        import m3
        m2, m3
        import m4
        import m6
        m4, m6
    ''').lstrip())
    assert output == expected
コード例 #28
0
def test_fix_unused_and_missing_print_function_1():
    input = PythonBlock(dedent(r'''
        from __future__ import print_function
        from m1 import print, m1a
        from m2.print import m2a, m2b
        m1a, m2a, m3a
    ''').lstrip())
    db = ImportDB(
        "from __future__ import print_function\n"
        "from print.m3 import m3a, m3b")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent(r'''
        from __future__ import print_function
        from m1       import m1a
        from m2.print import m2a
        from print.m3 import m3a
        m1a, m2a, m3a
    ''').lstrip())
    assert output == expected
コード例 #29
0
def test_fix_unused_and_missing_imports_decorator_2():
    input = PythonBlock(dedent('''
        from m1 import d1, d2, d3
        @d1
        def f1(): pass
        @d9.d2
        def f9(): pass
    ''').lstrip())
    db = ImportDB("from m2 import d8, d9")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from m1 import d1
        from m2 import d9
        @d1
        def f1(): pass
        @d9.d2
        def f9(): pass
    ''').lstrip())
    assert output == expected
コード例 #30
0
def test_fix_unused_and_missing_imports_funcall_1():
    input = PythonBlock(dedent('''
        from m1 import X1, X3, X9
        def F1(X1, X2=x2, X3=x3, *X4, **X5): X1, X5, x6, X9
        def F2(X7=x7): X7
        def F3(a1): a1
        def F4(): a1
    ''').lstrip())
    db = ImportDB("from m2 import x1, x2, x3, x4, x5, x6, x7, a1, a2")
    output = fix_unused_and_missing_imports(input, db=db)
    expected = PythonBlock(dedent('''
        from m1 import X9
        from m2 import a1, x2, x3, x6, x7
        def F1(X1, X2=x2, X3=x3, *X4, **X5): X1, X5, x6, X9
        def F2(X7=x7): X7
        def F3(a1): a1
        def F4(): a1
    ''').lstrip())
    assert output == expected