Skip to content

Commit 54b6e2b

Browse files
committed
lexers: Add Kconfig lexer tests
1 parent 7a2973e commit 54b6e2b

1 file changed

Lines changed: 372 additions & 0 deletions

File tree

Lines changed: 372 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,372 @@
1+
from ..lexers import KconfigLexer
2+
from .base import LexerTest
3+
4+
class KconfigLexerTest(LexerTest):
5+
lexer_cls = KconfigLexer
6+
default_filtered_tokens = ("SPECIAL", "COMMENT", "STRING", "IDENTIFIER", "SPECIAL", "ERROR")
7+
8+
# TODO improve macro calls
9+
10+
def test_comments(self):
11+
self.lex(r"""
12+
# comment1
13+
config 64BIT # comment2
14+
bool # comment3
15+
default "# asd"
16+
default $(shell, \#)
17+
help
18+
asdasdsajdlakjd # not a comment
19+
20+
asdasdsajdlakjd # not a comment
21+
22+
# comment 5
23+
24+
# comment 6
25+
""", [
26+
['COMMENT', '# comment1\n'],
27+
['SPECIAL', 'config'],
28+
['IDENTIFIER', '64BIT'],
29+
['COMMENT', '# comment2\n'],
30+
['SPECIAL', 'bool'],
31+
['COMMENT', '# comment3\n'],
32+
['SPECIAL', 'default'],
33+
['STRING', '"# asd"'],
34+
['SPECIAL', 'default'],
35+
['SPECIAL', 'shell'],
36+
['SPECIAL', '\\#)'],
37+
['SPECIAL', 'help'],
38+
['COMMENT', ' asdasdsajdlakjd # not a comment\n\n asdasdsajdlakjd # not a comment\n\n # comment 5\n\n'],
39+
['COMMENT', '# comment 6\n'],
40+
])
41+
42+
43+
def test_keywords(self):
44+
self.lex(r""",
45+
menu "menu name"
46+
47+
visible if y
48+
49+
choice
50+
prompt "test prompt"
51+
default y
52+
53+
config 86CONIFG
54+
bool "text"
55+
prompt "prompt"
56+
default y
57+
tristate "test"
58+
def_bool TEST_bool
59+
depends on TEST
60+
select TEST2
61+
imply TEST3
62+
range 5 512 if CONFIG_512
63+
help
64+
help text
65+
66+
more help text
67+
68+
endmenu
69+
""", [
70+
['SPECIAL', 'menu'],
71+
['STRING', '"menu name"'],
72+
['SPECIAL', 'visible'],
73+
['SPECIAL', 'if'],
74+
['SPECIAL', 'y'],
75+
['SPECIAL', 'choice'],
76+
['SPECIAL', 'prompt'],
77+
['STRING', '"test prompt"'],
78+
['SPECIAL', 'default'],
79+
['SPECIAL', 'y'],
80+
['SPECIAL', 'config'],
81+
['IDENTIFIER', '86CONIFG'],
82+
['SPECIAL', 'bool'],
83+
['STRING', '"text"'],
84+
['SPECIAL', 'prompt'],
85+
['STRING', '"prompt"'],
86+
['SPECIAL', 'default'],
87+
['SPECIAL', 'y'],
88+
['SPECIAL', 'tristate'],
89+
['STRING', '"test"'],
90+
['SPECIAL', 'def_bool'],
91+
['IDENTIFIER', 'TEST_bool'],
92+
['SPECIAL', 'depends'],
93+
['SPECIAL', 'on'],
94+
['IDENTIFIER', 'TEST'],
95+
['SPECIAL', 'select'],
96+
['IDENTIFIER', 'TEST2'],
97+
['SPECIAL', 'imply'],
98+
['IDENTIFIER', 'TEST3'],
99+
['SPECIAL', 'range'],
100+
['SPECIAL', 'if'],
101+
['IDENTIFIER', 'CONFIG_512'],
102+
['SPECIAL', 'help'],
103+
['COMMENT', ' help text\n\n more help text\n\n'],
104+
['SPECIAL', 'endmenu'],
105+
])
106+
107+
def test_conditions(self):
108+
self.lex(r"""
109+
config TEST
110+
select TEST1 if TEST2 = TEST3
111+
select TEST2 if TEST5 != TEST6
112+
select TEST7 if TEST8 < TEST9
113+
select TEST10 if TEST11 > TEST12
114+
select TEST13 if TEST14 <= TEST15
115+
""", [
116+
['SPECIAL', 'config'],
117+
['IDENTIFIER', 'TEST'],
118+
['SPECIAL', 'select'],
119+
['IDENTIFIER', 'TEST1'],
120+
['SPECIAL', 'if'],
121+
['IDENTIFIER', 'TEST2'],
122+
['PUNCTUATION', '='],
123+
['IDENTIFIER', 'TEST3'],
124+
['SPECIAL', 'select'],
125+
['IDENTIFIER', 'TEST2'],
126+
['SPECIAL', 'if'],
127+
['IDENTIFIER', 'TEST5'],
128+
['PUNCTUATION', '!'],
129+
['PUNCTUATION', '='],
130+
['IDENTIFIER', 'TEST6'],
131+
['SPECIAL', 'select'],
132+
['IDENTIFIER', 'TEST7'],
133+
['SPECIAL', 'if'],
134+
['IDENTIFIER', 'TEST8'],
135+
['PUNCTUATION', '<'],
136+
['IDENTIFIER', 'TEST9'],
137+
['SPECIAL', 'select'],
138+
['IDENTIFIER', 'TEST10'],
139+
['SPECIAL', 'if'],
140+
['IDENTIFIER', 'TEST11'],
141+
['PUNCTUATION', '>'],
142+
['IDENTIFIER', 'TEST12'],
143+
['SPECIAL', 'select'],
144+
['IDENTIFIER', 'TEST13'],
145+
['SPECIAL', 'if'],
146+
['IDENTIFIER', 'TEST14'],
147+
['PUNCTUATION', '<'],
148+
['PUNCTUATION', '='],
149+
['IDENTIFIER', 'TEST15'],
150+
], self.default_filtered_tokens + ("PUNCTUATION",))
151+
152+
def test_conditions2(self):
153+
self.lex(r"""
154+
config TEST
155+
select TEST16 if TEST17 >= TEST3
156+
select TEST17 if (TEST18 = TEST19)
157+
158+
select TEST20 if !(TEST21 = TEST22)
159+
select TEST23 if TEST24 && TEST25
160+
select TEST26 if TEST27 || TEST28
161+
""", [
162+
['SPECIAL', 'config'],
163+
['IDENTIFIER', 'TEST'],
164+
['SPECIAL', 'select'],
165+
['IDENTIFIER', 'TEST16'],
166+
['SPECIAL', 'if'],
167+
['IDENTIFIER', 'TEST17'],
168+
['PUNCTUATION', '>'],
169+
['PUNCTUATION', '='],
170+
['IDENTIFIER', 'TEST3'],
171+
['SPECIAL', 'select'],
172+
['IDENTIFIER', 'TEST17'],
173+
['SPECIAL', 'if'],
174+
['PUNCTUATION', '('],
175+
['IDENTIFIER', 'TEST18'],
176+
['PUNCTUATION', '='],
177+
['IDENTIFIER', 'TEST19'],
178+
['PUNCTUATION', ')'],
179+
['SPECIAL', 'select'],
180+
['IDENTIFIER', 'TEST20'],
181+
['SPECIAL', 'if'],
182+
['PUNCTUATION', '!'],
183+
['PUNCTUATION', '('],
184+
['IDENTIFIER', 'TEST21'],
185+
['PUNCTUATION', '='],
186+
['IDENTIFIER', 'TEST22'],
187+
['PUNCTUATION', ')'],
188+
['SPECIAL', 'select'],
189+
['IDENTIFIER', 'TEST23'],
190+
['SPECIAL', 'if'],
191+
['IDENTIFIER', 'TEST24'],
192+
['PUNCTUATION', '&'],
193+
['PUNCTUATION', '&'],
194+
['IDENTIFIER', 'TEST25'],
195+
['SPECIAL', 'select'],
196+
['IDENTIFIER', 'TEST26'],
197+
['SPECIAL', 'if'],
198+
['IDENTIFIER', 'TEST27'],
199+
['PUNCTUATION', '|'],
200+
['PUNCTUATION', '|'],
201+
['IDENTIFIER', 'TEST28'],
202+
], self.default_filtered_tokens + ("PUNCTUATION",))
203+
204+
def test_macros(self):
205+
self.lex(r"""
206+
config TEST
207+
depends on $(shell,cat file | grep -vi "option 2")
208+
depends on $(info,info to print)
209+
depends on $(warning-if,a != b,warning to print)
210+
""", [
211+
['SPECIAL', 'config'],
212+
['IDENTIFIER', 'TEST'],
213+
['SPECIAL', 'depends'],
214+
['SPECIAL', 'on'],
215+
['PUNCTUATION', '$'],
216+
['PUNCTUATION', '('],
217+
['SPECIAL', 'shell'],
218+
['PUNCTUATION', ','],
219+
['SPECIAL', 'cat'],
220+
['SPECIAL', 'file'],
221+
['PUNCTUATION', '|'],
222+
['SPECIAL', 'grep'],
223+
['PUNCTUATION', '-'],
224+
['SPECIAL', 'vi'],
225+
['STRING', '"option 2"'],
226+
['PUNCTUATION', ')'],
227+
['SPECIAL', 'depends'],
228+
['SPECIAL', 'on'],
229+
['PUNCTUATION', '$'],
230+
['PUNCTUATION', '('],
231+
['SPECIAL', 'info'],
232+
['PUNCTUATION', ','],
233+
['SPECIAL', 'info'],
234+
['SPECIAL', 'to'],
235+
['SPECIAL', 'print'],
236+
['PUNCTUATION', ')'],
237+
['SPECIAL', 'depends'],
238+
['SPECIAL', 'on'],
239+
['PUNCTUATION', '$'],
240+
['PUNCTUATION', '('],
241+
['SPECIAL', 'warning-if'],
242+
['PUNCTUATION', ','],
243+
['SPECIAL', 'a'],
244+
['PUNCTUATION', '!'],
245+
['PUNCTUATION', '='],
246+
['SPECIAL', 'b'],
247+
['PUNCTUATION', ','],
248+
['SPECIAL', 'warning'],
249+
['SPECIAL', 'to'],
250+
['SPECIAL', 'print'],
251+
['PUNCTUATION', ')'],
252+
], self.default_filtered_tokens + ("PUNCTUATION",))
253+
254+
def test_macros2(self):
255+
self.lex(r"""
256+
config TEST
257+
depends on $(error-if,a != b,warning to print)
258+
depends on $(filename)
259+
depends on $(lineno)
260+
""", [
261+
['SPECIAL', 'config'],
262+
['IDENTIFIER', 'TEST'],
263+
['SPECIAL', 'depends'],
264+
['SPECIAL', 'on'],
265+
['PUNCTUATION', '$'],
266+
['PUNCTUATION', '('],
267+
['SPECIAL', 'error-if'],
268+
['PUNCTUATION', ','],
269+
['SPECIAL', 'a'],
270+
['PUNCTUATION', '!'],
271+
['PUNCTUATION', '='],
272+
['SPECIAL', 'b'],
273+
['PUNCTUATION', ','],
274+
['SPECIAL', 'warning'],
275+
['SPECIAL', 'to'],
276+
['SPECIAL', 'print'],
277+
['PUNCTUATION', ')'],
278+
['SPECIAL', 'depends'],
279+
['SPECIAL', 'on'],
280+
['PUNCTUATION', '$'],
281+
['PUNCTUATION', '('],
282+
['SPECIAL', 'filename'],
283+
['PUNCTUATION', ')'],
284+
['SPECIAL', 'depends'],
285+
['SPECIAL', 'on'],
286+
['PUNCTUATION', '$'],
287+
['PUNCTUATION', '('],
288+
['SPECIAL', 'lineno'],
289+
['PUNCTUATION', ')'],
290+
], self.default_filtered_tokens + ("PUNCTUATION",))
291+
292+
def test_help(self):
293+
self.lex(r"""
294+
config
295+
help
296+
help test lasdlkajdk sadlksajd
297+
lsajdlad
298+
299+
salkdjaldlksajd
300+
301+
"
302+
asdlkajsdlkjsadlajdsk
303+
304+
salkdjlsakdj'
305+
config
306+
select TEST
307+
config
308+
---help---
309+
help test lasdlkajdk sadlksajd
310+
lsajdlad
311+
312+
salkdjaldlksajd
313+
314+
config
315+
select TEST
316+
""", [
317+
['SPECIAL', 'config'],
318+
['SPECIAL', 'help'],
319+
['COMMENT', ' help test lasdlkajdk sadlksajd\n lsajdlad\n\n salkdjaldlksajd\n\n "\n asdlkajsdlkjsadlajdsk\n\n salkdjlsakdj\'\n'],
320+
['SPECIAL', 'config'],
321+
['SPECIAL', 'select'],
322+
['IDENTIFIER', 'TEST'],
323+
['SPECIAL', 'config'],
324+
['SPECIAL', '---help---'],
325+
['COMMENT', ' help test lasdlkajdk sadlksajd\n lsajdlad\n\n salkdjaldlksajd\n \n'],
326+
['SPECIAL', 'config'],
327+
['SPECIAL', 'select'],
328+
['IDENTIFIER', 'TEST'],
329+
])
330+
331+
def test_types(self):
332+
self.lex(r"""
333+
config
334+
bool
335+
default y
336+
337+
config
338+
tristate
339+
default m
340+
341+
config
342+
hex
343+
default 0xdfffffff00000000
344+
345+
config
346+
string
347+
default "string \" test # \# zxc"
348+
349+
config
350+
int
351+
default 21312323
352+
""", [
353+
['SPECIAL', 'config'],
354+
['SPECIAL', 'bool'],
355+
['SPECIAL', 'default'],
356+
['SPECIAL', 'y'],
357+
['SPECIAL', 'config'],
358+
['SPECIAL', 'tristate'],
359+
['SPECIAL', 'default'],
360+
['SPECIAL', 'm'],
361+
['SPECIAL', 'config'],
362+
['SPECIAL', 'hex'],
363+
['SPECIAL', 'default'],
364+
['IDENTIFIER', '0xdfffffff00000000'],
365+
['SPECIAL', 'config'],
366+
['SPECIAL', 'string'],
367+
['SPECIAL', 'default'],
368+
['STRING', '"string \\" test # \\# zxc"'],
369+
['SPECIAL', 'config'],
370+
['SPECIAL', 'int'],
371+
['SPECIAL', 'default'],
372+
])

0 commit comments

Comments
 (0)