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_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_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_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_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_class_doc(decorators, body, expected): doc = ClassDoc(IdDoc("TestClass"), decorators, body) assert to_python_script(doc) == format_script(expected)
def test_print_literal_doc(doc, expected): assert to_python_script(doc) == format_script(expected)
def test_print_function_doc(args, decorators, body, return_type, expected): doc = FunctionDoc(IdDoc("func"), args, decorators, return_type, body) assert to_python_script(doc) == format_script(expected) # test
def test_print_return_doc(value, expected): doc = ReturnDoc(value) assert to_python_script(doc) == format_script(expected)
def test_print_tuple_doc(elements, expected): doc = TupleDoc(elements) assert to_python_script(doc) == format_script(expected)
def test_print_index_doc(indices, expected): doc = IdDoc("x")[indices] assert to_python_script(doc) == format_script(f"x{expected}")
def test_print_lambda_doc(args, expected): doc = LambdaDoc(args, body=LiteralDoc(0)) assert to_python_script(doc) == format_script(expected)
def test_print_if_doc(then_branch, else_branch, expected): doc = IfDoc(IdDoc("pred"), then_branch, else_branch) assert to_python_script(doc) == format_script(expected)
def test_print_while_doc(body, expected): doc = WhileDoc(IdDoc("pred"), body) assert to_python_script(doc) == format_script(expected)
def test_print_stmt_block_doc(stmts, expected): doc = StmtBlockDoc(stmts) assert to_python_script(doc).strip() == format_script(expected).strip()
def test_print_slice_doc(slice_doc, expected): doc = IdDoc("x")[slice_doc] assert to_python_script(doc) == format_script(f"x[{expected}]")
def test_print_dict_doc(content, expected): doc = DictDoc(content) assert to_python_script(doc) == format_script(expected)
def test_print_call_doc(args, kwargs, expected): doc = CallDoc(IdDoc("f"), *args, **kwargs) assert to_python_script(doc) == format_script(f"f{expected}")
def test_expr_precedence(doc, expected): assert to_python_script(doc) == format_script(expected)
def test_print_special_operation_doc(op_kind, operands, expected): doc = OperationDoc(op_kind, operands) assert to_python_script(doc) == format_script(expected)
def test_print_expr_stmt_doc(): doc = ExprStmtDoc(CallDoc(IdDoc("f"), IdDoc("x"))) assert to_python_script(doc) == format_script("f(x)")
def test_print_binary_operation_doc(op_kind, expected_token): doc = OperationDoc(op_kind, [IdDoc("x"), IdDoc("y")]) assert to_python_script(doc) == format_script(f"x {expected_token} y")
def test_print_assert_doc(msg, expected): test = LiteralDoc(True) doc = AssertDoc(test, msg) assert to_python_script(doc) == format_script(expected)
def test_print_for_doc(body, expected): doc = ForDoc(IdDoc("x"), IdDoc("y"), body) assert to_python_script(doc) == format_script(expected)
def test_print_list_doc(elements, expected): doc = ListDoc(elements) assert to_python_script(doc) == format_script(expected)
def test_print_scope_doc(lhs, body, expected): doc = ScopeDoc(lhs, CallDoc(IdDoc("context")), body) assert to_python_script(doc) == format_script(expected)
def test_print_attr_doc(attr): doc = IdDoc("x").attr(attr) assert to_python_script(doc) == format_script(f"x.{attr}")