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))