def test_parse(self): parser = Parser() tokens = [ Token(Token.STR, 'asd'), Token(Token.LBRS), Token(Token.NUM, '1990'), Token(Token.RBRS), Token(Token.STR, ' '), Token(Token.LBRS), Token(Token.NUM, '2'), Token(Token.RBRS), Token(Token.STR, ' #^& '), Token(Token.LBRS), Token(Token.NUM, '33'), Token(Token.MINUS), Token(Token.NUM, '44'), Token(Token.RBRS), ] expected_nodes = [ Node(Node.STR, value='asd'), Node(Node.SLICE, stop=1990), Node(Node.STR, value=' '), Node(Node.SLICE, stop=2), Node(Node.STR, value=' #^& '), Node(Node.SLICE, start=33, stop=44), ] nodes = parser.parse(tokens) self.assertEqual(expected_nodes, nodes)
def test_parse_with_error_unexpected_token(self): parser = Parser() # token != Token.STR ot token != Token.LBRS test_tokens = [Token(Token.NUM, '1')] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual( u"Unexpected token Token(Number, '1') after None, pos=0", cm.exception.message) test_tokens = [Token(Token.LBRS), Token(Token.STR, 'a')] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual( u"Unexpected token Token(String, 'a') after Token(LeftBracketSquare), pos=1", cm.exception.message) test_tokens = [ Token(Token.LBRS), Token(Token.NUM, '1'), Token(Token.STR, 'a')] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual( u"Unexpected token Token(String, 'a') after Token(Number, '1'), pos=2", cm.exception.message) test_tokens = [Token(Token.LBRS), Token(Token.NUM, '1'), Token(Token.MINUS), Token(Token.STR, 'a')] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual( u"Unexpected token Token(String, 'a') after Token(Minus), pos=3", cm.exception.message) test_tokens = [ Token(Token.LBRS), Token(Token.NUM, '1'), Token(Token.MINUS), Token(Token.NUM, '2'), Token(Token.STR, 'a')] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual( u"Unexpected token Token(String, 'a') after Token(Number, '2'), pos=4", cm.exception.message)
def test_parse_with_error_unexpected_end(self): parser = Parser() test_tokens = [Token(Token.LBRS)] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual(u"Unexpected end of tokens", cm.exception.message) test_tokens = [Token(Token.LBRS), Token(Token.NUM, '1')] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual(u"Unexpected end of tokens", cm.exception.message) test_tokens = [ Token(Token.LBRS), Token(Token.NUM, '1'), Token(Token.MINUS)] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual(u"Unexpected end of tokens", cm.exception.message) test_tokens = [ Token(Token.LBRS), Token(Token.NUM, '1'), Token(Token.MINUS), Token(Token.NUM, '2')] with self.assertRaises(ParseError) as cm: parser.parse(test_tokens) self.assertEqual(u"Unexpected end of tokens", cm.exception.message)