def test_parse_if_statement(self): """ 'if' '(' expression ')' '{' statements '}' ( 'else' '{' statements '}' )? """ tokens = ( Token('keyword', 'if'), Token('symbol', '('), Token('dummy', 'dummy'), # Dummy expression Token('symbol', ')'), Token('symbol', '{'), Token('dummy', 'dummy'), # Dummy expression Token('symbol', '}'), ) expected = Token('ifStatement', [ Token('keyword', 'if'), Token('symbol', '('), Token('dummy', 'dummy'), # Dummy expression Token('symbol', ')'), Token('symbol', '{'), Token('dummy', 'dummy'), # Dummy statements Token('symbol', '}'), ]) parser = Parser(tokens) parser.parse_expression = self._mock_parse(parser) parser.parse_statements = self._mock_parse(parser) actual = parser.parse_if_statement() self.assertEqual(expected, actual)
def test_parse_statements(self): """ (letStatement | ifStatement | whileStatement | doStatement | returnStatement)* """ tokens = ( Token('keyword', 'let'), Token('keyword', 'if'), Token('keyword', 'while'), Token('keyword', 'do'), Token('keyword', 'return'), Token('symbol', '}') # Expect unparsed ) expected = Token('statements', [ Token('dummy', 'dummy'), Token('dummy', 'dummy'), Token('dummy', 'dummy'), Token('dummy', 'dummy'), Token('dummy', 'dummy'), ]) parser = Parser(tokens) parser.parse_let_statement = self._mock_parse(parser) parser.parse_if_statement = self._mock_parse(parser) parser.parse_while_statement = self._mock_parse(parser) parser.parse_do_statement = self._mock_parse(parser) parser.parse_return_statement = self._mock_parse(parser) actual = parser.parse_statements() self.assertEqual(expected, actual)