def test_do_statements_maybe_read_var(self):
     test_cases = [("x = y", "y", True),
                   ("x = y", "z", False),
                   ("a = b\nc = d", "b", True),
                   ("a = b\nc = d", "d", True),
                   ("a = b\nc = d", "e", False),
                   ("if x:\n    print y\nelse:\n    print z", "x", True),
                   ("if x:\n    print y\nelse:\n    print z", "y", True),
                   ("if x:\n    print y\nelse:\n    print z", "z", True),
                   ("if x:\n    print y\nelse:\n    print z", "w", False)]
     for text, variable, expected_result in test_cases:
         statements = list(forward_analysis.analyze_statements(text))
         result = do_statements_maybe_read_var(statements, variable)
         self.assertEqual(result, expected_result)
 def test_do_statements_maybe_write_var(self):
     test_cases = [("x = y", "x", True),
                   ("x = y", "z", False),
                   ("a = b\nc = d", "a", True),
                   ("a = b\nc = d", "c", True),
                   ("a = b\nc = d", "e", False),
                   ("if len([a for a in b]) != 0:\n    c = d\nelse:\n    e = f", "a", True),
                   ("if len([a for a in b]) != 0:\n    c = d\nelse:\n    e = f", "c", True),
                   ("if len([a for a in b]) != 0:\n    c = d\nelse:\n    e = f", "e", True),
                   ("if len([a for a in b]) != 0:\n    c = d\nelse:\n    e = f", "g", False)]
     for text, variable, expected_result in test_cases:
         statements = list(forward_analysis.analyze_statements(text))
         result = do_statements_maybe_write_var(statements, variable)
         self.assertEqual(result, expected_result)
def find_unbound_tokens_in_text(text):
    toplevel_statements = list(forward_analysis.analyze_statements(text))
    block = forward_analysis.flatten_statements_to_block(toplevel_statements)
    return find_unbound_tokens(toplevel_statements, block, set(BUILTIN_NAMES))