def test_pos_lt(self): self.assertLess(scanner.Pos('<fake>', 0, 0), scanner.Pos('<fake>', 0, 1)) self.assertLess(scanner.Pos('<fake>', 0, 0), scanner.Pos('<fake>', 1, 0)) self.assertGreaterEqual(scanner.Pos('<fake>', 0, 0), scanner.Pos('<fake>', 0, 0))
def test_pprint_parse_error(self): output = io.StringIO() filename = '/fake/test_file.x' text = 'oh\nwhoops\nI did an\nerror somewhere\nthat is bad' with fakefs_util.scoped_fakefs(filename, text): pos = scanner.Pos(filename, lineno=2, colno=0) span = Span(pos, pos.bump_col()) error = parser.ParseError(span, 'This is bad') parser_helpers.pprint_positional_error(error, output=cast( io.IOBase, output), color=False, error_context_line_count=3) expected = textwrap.dedent("""\ /fake/test_file.x:2-4 0002: whoops * 0003: I did an ^^ This is bad @ /fake/test_file.x:3:1 0004: error somewhere """) self.assertMultiLineEqual(expected, output.getvalue())
def test_bindings_stack(self): top = parser.Bindings(None) leaf0 = parser.Bindings(top) leaf1 = parser.Bindings(top) a = ast.BuiltinNameDef('a') b = ast.BuiltinNameDef('b') c = ast.BuiltinNameDef('c') top.add('a', a) leaf0.add('b', b) leaf1.add('c', c) pos = scanner.Pos(self.fake_filename, lineno=0, colno=0) span = Span(pos, pos) self.assertEqual(leaf0.resolve('a', span), a) self.assertEqual(leaf1.resolve('a', span), a) self.assertEqual(top.resolve('a', span), a) with self.assertRaises(parser.ParseError): top.resolve('b', span) with self.assertRaises(parser.ParseError): leaf1.resolve('b', span) with self.assertRaises(parser.ParseError): leaf0.resolve('c', span) self.assertEqual(leaf0.resolve('b', span), b) self.assertEqual(leaf1.resolve('c', span), c)