def test_underline_based_on_path_prefix(): doc = StmtBlockDoc( [ExprStmtDoc(make_id_doc("foo")), ExprStmtDoc(make_id_doc("bar"))]) result = to_python_script( doc, path_to_underline=make_path("foo").attr("x").attr("y")) # There is no document that matches the desired path exactly, # but path of "foo" is a prefix of the desired path, and thus should be underlined. assert result == format_script(""" foo ^^^ bar """)
def test_underline_multiline(): doc = StmtBlockDoc([ ExprStmtDoc(IdDoc("foo")), ExprStmtDoc(IdDoc("bar")), ]) doc.source_paths = [make_path("whole_doc")] assert to_python_script( doc, path_to_underline=make_path("whole_doc")) == format_script(""" foo ^^^ bar ^^^ """)
def test_underline_basic(): doc = StmtBlockDoc([ ExprStmtDoc(make_id_doc("foo")), ExprStmtDoc( OperationDoc( OperationKind.Add, [make_id_doc("bar"), make_id_doc("baz")])), ExprStmtDoc(make_id_doc("qux")), ]) assert to_python_script( doc, path_to_underline=make_path("baz")) == format_script(""" foo bar + baz ^^^ qux """)
def test_underline_multiple_spans(): doc = StmtBlockDoc([ ExprStmtDoc(make_id_doc("foo")), ExprStmtDoc(make_id_doc("bar")), ExprStmtDoc( OperationDoc( OperationKind.Add, [make_id_doc("foo"), make_id_doc("foo")])), ]) assert to_python_script( doc, path_to_underline=make_path("foo")) == format_script(""" foo ^^^ bar foo + foo ^^^ ^^^ """)
def test_longer_prefix_must_win(): foo_x = IdDoc("foo_x") foo_x.source_paths = [make_path("foo").attr("x")] doc = StmtBlockDoc([ ExprStmtDoc(make_id_doc("foo")), ExprStmtDoc(make_id_doc("bar")), ExprStmtDoc(foo_x) ]) result = to_python_script( doc, path_to_underline=make_path("foo").attr("x").attr("y")) # "foo" should not be underlined because there is a document with a more specific path prefix assert result == format_script(""" foo bar foo_x ^^^^^ """)
def test_print_two_context_lines(to_underline, expected_text): doc = StmtBlockDoc([ ExprStmtDoc(make_id_doc(f"x{i}", "yes" if i in to_underline else "no")) for i in range(10) ]) result = to_python_script(doc, num_context_lines=2, path_to_underline=make_path("yes")) assert result == format_script(expected_text)
def test_underline_and_print_line_numbers_with_context(): doc = StmtBlockDoc( [ExprStmtDoc(make_id_doc(f"line{i + 1}")) for i in range(12)]) result = to_python_script(doc, print_line_numbers=True, num_context_lines=2, path_to_underline=make_path("line8")) assert result == format_script(""" (... 5 lines skipped ...) 6 line6 7 line7 8 line8 ^^^^^ 9 line9 10 line10 (... 2 lines skipped ...) """)
def test_underline_and_print_line_numbers(): doc = StmtBlockDoc( [ExprStmtDoc(make_id_doc(f"line{i + 1}")) for i in range(12)]) result = to_python_script(doc, print_line_numbers=True, path_to_underline=make_path("line6")) assert result == format_script(""" 1 line1 2 line2 3 line3 4 line4 5 line5 6 line6 ^^^^^ 7 line7 8 line8 9 line9 10 line10 11 line11 12 line12 """)
def test_print_expr_stmt_doc(): doc = ExprStmtDoc(CallDoc(IdDoc("f"), IdDoc("x"))) assert to_python_script(doc) == format_script("f(x)")
ids=itertools.count(), ) def test_print_slice_doc(slice_doc, expected): doc = IdDoc("x")[slice_doc] assert to_python_script(doc) == format_script(f"x[{expected}]") @pytest.mark.parametrize( "stmts, expected", [ ( [], "", ), ( [ExprStmtDoc(IdDoc("x"))], "x", ), ( [ExprStmtDoc(IdDoc("x")), ExprStmtDoc(IdDoc("y"))], """ x y """, ), ], ids=itertools.count(), ) def test_print_stmt_block_doc(stmts, expected): doc = StmtBlockDoc(stmts) assert to_python_script(doc).strip() == format_script(expected).strip()