def while_loop_has_child_names_resolved(): _assert_children_resolved( lambda ref: nodes.while_(ref, [], []), ) _assert_children_resolved( lambda ref: nodes.while_(nodes.bool_literal(True), [nodes.expression_statement(ref)], []), ) _assert_children_resolved( lambda ref: nodes.while_(nodes.bool_literal(True), [], [nodes.expression_statement(ref)]), )
def break_is_not_valid_in_while_loop_else_body(): break_node = nodes.break_() node = nodes.while_(nodes.bool_literal(True), [], [break_node]) error = assert_raises(errors.TypeCheckError, lambda: check_loop_control(node, False)) assert_equal(break_node, error.node) assert_equal("'break' outside loop", str(error))
def break_is_not_valid_in_function_in_while_loop_body(): break_node = nodes.break_() func_node = nodes.func("f", nodes.args([]), [break_node], type=None) node = nodes.while_(nodes.bool_literal(True), [func_node], []) error = assert_raises(errors.TypeCheckError, lambda: check_loop_control(node, False)) assert_equal(break_node, error.node) assert_equal("'break' outside loop", str(error))
def while_loop_has_condition_type_checked(): condition_node = nodes.ref("x") node = nodes.while_(condition_node, []) try: update_context(node) assert False, "Expected error" except errors.TypeCheckError as error: assert_equal(condition_node, error.node)
def children_of_while_loop_are_checked(): _assert_child_expression_is_checked(lambda generate: nodes.while_(generate.unbound_ref(), [], []) ) _assert_child_statement_is_checked(lambda generate: nodes.while_( nodes.bool_literal(True), [generate.unbound_ref_statement()], [] ) ) _assert_child_statement_is_checked(lambda generate: nodes.while_( nodes.bool_literal(True), [], [generate.unbound_ref_statement()] ) )
def test_transform_while_loop(self): _assert_transform( nodes.while_( nodes.ref("x"), [nodes.ret(nodes.ref("y"))], ), cc.while_( cc.call(cc.builtin("bool"), [cc.ref("x")]), [cc.ret(cc.ref("y"))], ) )
def test_transform_while_loop_with_else_branch(self): _assert_transform( nodes.while_( nodes.ref("x"), [nodes.ret(nodes.ref("y"))], [nodes.ret(nodes.ref("z"))] ), """ var __nope_u_normal_exit0 = False while True: if not $builtins.bool(x): __nope_u_normal_exit0 = True break return y if __nope_u_normal_exit0: return z """ )
def break_is_valid_in_while_loop_body(): node = nodes.while_(nodes.bool_literal(True), [nodes.break_()]) check_loop_control(node, False)
def while_loop_has_else_body_type_checked(): assert_statement_is_type_checked( lambda bad_statement: nodes.while_(nodes.bool_literal(True), [], [bad_statement]) )
def test_parse_while_loop_with_else_body(): expected = nodes.while_(nodes.ref("x"), [], [nodes.ret(nodes.ref("x"))]) _assert_statement_parse(expected, "while x:\n pass\nelse:\n return x")
def test_parse_while_loop(): expected = nodes.while_(nodes.ref("x"), [nodes.ret(nodes.ref("x"))]) _assert_statement_parse(expected, "while x:\n return x")
def declarations_in_both_body_and_else_body_of_while_loop_are_not_definitely_bound(): _assert_name_is_not_definitely_bound(lambda generate: nodes.while_(nodes.bool_literal(True), [generate.assignment()], [generate.assignment()]) )