from typing import List from cmake_language_server.parser import ListParser, TokenType def make_parser_test(liststr: str, expect_token: List[TokenType], expect_remain: str = ''): def test(): actual_token, actual_remain = ListParser().parse(liststr) assert actual_token == expect_token assert actual_remain == expect_remain return test test_command_no_args = make_parser_test('a()', [('a', [])]) test_command_space = make_parser_test(' a ()', [' ', ('a', [])]) test_command_arg = make_parser_test('a(b)', [('a', ['b'])]) test_command_arg_space = make_parser_test('a ( b )', [('a', ['b'])]) test_command_arg_escape = make_parser_test(r'a(\n\")', [('a', [r'\n\"'])]) test_command_arg_paren = make_parser_test('a((b))', [('a', ['(', 'b', ')'])]) test_command_arg_paren_paren = make_parser_test( 'a(((b)))', [('a', ['(', '(', 'b', ')', ')'])]) test_command_arg_quote = make_parser_test(r'a("b\"")', [('a', [r'"b\""'])]) test_command_arg_quote_cont = make_parser_test('a("\\\n")', [('a', ['"\\\n"'])]) test_command_arg_quo_multiline = make_parser_test('''a("b c ")''', [('a', ['"b\nc\n"'])]) test_command_arg_bracket_0 = make_parser_test('a([[b]])', [('a', ['[[b]]'])]) test_command_arg_bracket_1 = make_parser_test('a([=[b]=])', [('a', ['[=[b]=]'])]) test_command_arg_space = make_parser_test('a ( b )', [('a', [' ', 'b', ' '])]) test_command_arg_multi = make_parser_test('a(b c)', [('a', ['b', ' ', 'c'])]) test_command_multielement = make_parser_test('''a( b c # c )''', [('a', ['\n', ' ', 'b', '\n', ' ', 'c', ' ', '# c', '\n'])]) test_line_comment = make_parser_test('a() # b # c', [('a', []), ' ', '# b # c']) test_bracket_comment = make_parser_test('#[[a]]#[[b]]', ['#[[a]]', '#[[b]]']) test_bracket_comment_nested = make_parser_test('#[=[[[a]]]=]', ['#[=[[[a]]]=]']) test_bracket_comment_multiline = make_parser_test('#[[\na\nb\nc\n]]', ['#[[\na\nb\nc\n]]']) test_if_block = make_parser_test('''if() a() else() b() endif()''', [('if', []), '\n', ' ', ('a', []), '\n', ('else', []), '\n', ' ', ('b', []), '\n', ('endif', [])]) test_comment_multi_linecomment = make_parser_test( '''a()# a b() # b c() # c''', [('a', []), '# a', '\n', ('b', []), ' ', '# b', '\n', ('c', []), ' ', '# c']) test_incomplete_id = make_parser_test('a', [], 'a') test_incomplete_command = make_parser_test('a(', [], 'a(') test_incomplete_id_after_command = make_parser_test('a()\nb', [('a', []), '\n'], 'b') test_incomplete_command_after_command = make_parser_test( 'a()\nb(c', [('a', []), '\n'], 'b(c')