doc/commands: parse `commands_main`
[nit.git] / src / doc / commands / tests / test_commands_parser.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Licensed under the Apache License, Version 2.0 (the "License");
4 # you may not use this file except in compliance with the License.
5 # You may obtain a copy of the License at
6 #
7 # http://www.apache.org/licenses/LICENSE-2.0
8 #
9 # Unless required by applicable law or agreed to in writing, software
10 # distributed under the License is distributed on an "AS IS" BASIS,
11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 # See the License for the specific language governing permissions and
13 # limitations under the License.
14
15 module test_commands_parser is test
16
17 import test_commands
18 import doc::commands::tests::test_commands_catalog
19 import doc::commands::commands_parser
20
21 class TestCommandsParser
22 super TestCommandsCatalog
23 test
24
25 # CmdEntity
26
27 fun test_cmd_parser_comment is test do
28 var parser = new CommandParser(test_view, test_builder)
29 var cmd = parser.parse("doc: test_prog::Character")
30 assert cmd isa CmdComment
31 assert parser.error == null
32 assert cmd.mdoc != null
33 end
34
35 fun test_cmd_parser_link is test do
36 var parser = new CommandParser(test_view, test_builder)
37 var cmd = parser.parse("link: test_prog::Character")
38 assert cmd isa CmdEntityLink
39 assert parser.error == null
40 assert cmd.text == "Character"
41 assert cmd.title == "Characters can be played by both the human or the machine."
42 end
43
44 fun test_cmd_parser_link_with_text is test do
45 var parser = new CommandParser(test_view, test_builder)
46 var cmd = parser.parse("link: test_prog::Character | text: foo")
47 assert cmd isa CmdEntityLink
48 assert parser.error == null
49 assert cmd.text == "foo"
50 assert cmd.title == "Characters can be played by both the human or the machine."
51 end
52
53 fun test_cmd_parser_link_with_title is test do
54 var parser = new CommandParser(test_view, test_builder)
55 var cmd = parser.parse("link: test_prog::Character | title: bar")
56 assert cmd isa CmdEntityLink
57 assert parser.error == null
58 assert cmd.text == "Character"
59 assert cmd.title == "bar"
60 end
61
62 fun test_cmd_parser_link_with_text_and_title is test do
63 var parser = new CommandParser(test_view, test_builder)
64 var cmd = parser.parse("link: test_prog::Character | text: foo, title: bar")
65 assert cmd isa CmdEntityLink
66 assert parser.error == null
67 assert cmd.text == "foo"
68 assert cmd.title == "bar"
69 end
70
71 fun test_cmd_parser_short_link is test do
72 var parser = new CommandParser(test_view, test_builder)
73 var cmd = parser.parse("test_prog::Character")
74 assert cmd isa CmdEntityLink
75 assert parser.error == null
76 assert cmd.text == "Character"
77 assert cmd.title == "Characters can be played by both the human or the machine."
78 end
79
80 fun test_cmd_parser_short_link_with_text is test do
81 var parser = new CommandParser(test_view, test_builder)
82 var cmd = parser.parse("test_prog::Character | text: foo")
83 assert cmd isa CmdEntityLink
84 assert parser.error == null
85 assert cmd.text == "foo"
86 assert cmd.title == "Characters can be played by both the human or the machine."
87 end
88
89 fun test_cmd_parser_short_link_with_title is test do
90 var parser = new CommandParser(test_view, test_builder)
91 var cmd = parser.parse("test_prog::Character | title: bar")
92 assert cmd isa CmdEntityLink
93 assert parser.error == null
94 assert cmd.text == "Character"
95 assert cmd.title == "bar"
96 end
97
98 fun test_cmd_parser_short_link_with_text_and_title is test do
99 var parser = new CommandParser(test_view, test_builder)
100 var cmd = parser.parse("test_prog::Character | text: foo, title: bar")
101 assert cmd isa CmdEntityLink
102 assert parser.error == null
103 assert cmd.text == "foo"
104 assert cmd.title == "bar"
105 end
106
107 fun test_cmd_parser_short_link_with_name is test do
108 var parser = new CommandParser(test_view, test_builder)
109 var cmd = parser.parse("Character")
110 assert cmd isa CmdEntityLink
111 assert parser.error == null
112 assert cmd.text == "Character"
113 assert cmd.title == "Characters can be played by both the human or the machine."
114 end
115
116 fun test_cmd_parser_short_link_with_name_and_text is test do
117 var parser = new CommandParser(test_view, test_builder)
118 var cmd = parser.parse("Character | text: foo")
119 assert cmd isa CmdEntityLink
120 assert parser.error == null
121 assert cmd.text == "foo"
122 assert cmd.title == "Characters can be played by both the human or the machine."
123 end
124
125 fun test_cmd_parser_short_link_with_name_and_title is test do
126 var parser = new CommandParser(test_view, test_builder)
127 var cmd = parser.parse("Character | title: bar")
128 assert cmd isa CmdEntityLink
129 assert parser.error == null
130 assert cmd.text == "Character"
131 assert cmd.title == "bar"
132 end
133
134 fun test_cmd_parser_short_link_with_name_and_text_and_title is test do
135 var parser = new CommandParser(test_view, test_builder)
136 var cmd = parser.parse("Character | text: foo, title: bar")
137 assert cmd isa CmdEntityLink
138 assert parser.error == null
139 assert cmd.text == "foo"
140 assert cmd.title == "bar"
141 end
142
143 # CmdInheritance
144
145 fun test_cmd_parser_parents is test do
146 var parser = new CommandParser(test_view, test_builder)
147 var cmd = parser.parse("parents: test_prog::Warrior")
148 assert cmd isa CmdParents
149 assert parser.error == null
150 assert cmd.results.as(not null).length == 1
151 end
152
153 fun test_cmd_parser_ancestors is test do
154 var parser = new CommandParser(test_view, test_builder)
155 var cmd = parser.parse("ancestors: test_prog::Warrior")
156 assert cmd isa CmdAncestors
157 assert parser.error == null
158 assert cmd.results.as(not null).length == 2
159 end
160
161 fun test_cmd_parser_ancestors_without_parents is test do
162 var parser = new CommandParser(test_view, test_builder)
163 var cmd = parser.parse("ancestors: test_prog::Warrior | parents: false")
164 assert cmd isa CmdAncestors
165 assert parser.error == null
166 assert cmd.results.as(not null).length == 1
167 end
168
169 fun test_cmd_parser_children is test do
170 var parser = new CommandParser(test_view, test_builder)
171 var cmd = parser.parse("children: test_prog::Career")
172 assert cmd isa CmdChildren
173 assert parser.error == null
174 assert cmd.results.as(not null).length == 3
175 end
176
177 fun test_cmd_parser_descendants is test do
178 var parser = new CommandParser(test_view, test_builder)
179 var cmd = parser.parse("descendants: Object")
180 assert cmd isa CmdDescendants
181 assert parser.error == null
182 assert cmd.results.as(not null).length == 22
183 end
184
185 fun test_cmd_parser_descendants_without_children is test do
186 var parser = new CommandParser(test_view, test_builder)
187 var cmd = parser.parse("descendants: Object | children: false")
188 assert cmd isa CmdDescendants
189 assert parser.error == null
190 assert cmd.results.as(not null).length == 9
191 end
192
193 # CmdSearch
194
195 fun test_cmd_parser_search is test do
196 var parser = new CommandParser(test_view, test_builder)
197 var cmd = parser.parse("search: Caracter")
198 assert cmd isa CmdSearch
199 assert parser.error == null
200 assert cmd.results != null
201 end
202
203 fun test_cmd_parser_search_limit is test do
204 var parser = new CommandParser(test_view, test_builder)
205 var cmd = parser.parse("search: Caracter | limit: 2")
206 assert cmd isa CmdSearch
207 assert parser.error == null
208 assert cmd.results.as(not null).length == 2
209 end
210
211 # CmdFeatures
212
213 fun test_cmd_parser_features is test do
214 var parser = new CommandParser(test_view, test_builder)
215 var cmd = parser.parse("defs: test_prog::Character")
216 assert cmd isa CmdFeatures
217 assert parser.error == null
218 assert cmd.results != null
219 end
220
221 fun test_cmd_parser_features_limit is test do
222 var parser = new CommandParser(test_view, test_builder)
223 var cmd = parser.parse("defs: test_prog::Character | limit: 2")
224 assert cmd isa CmdFeatures
225 assert parser.error == null
226 assert cmd.results.as(not null).length == 2
227 end
228
229 # CmdLinearization
230
231 fun test_cmd_parser_lin is test do
232 var parser = new CommandParser(test_view, test_builder)
233 var cmd = parser.parse("lin: test_prog::Character")
234 assert cmd isa CmdLinearization
235 assert parser.error == null
236 assert cmd.results != null
237 end
238
239 fun test_cmd_parser_lin_limit is test do
240 var parser = new CommandParser(test_view, test_builder)
241 var cmd = parser.parse("lin: test_prog::Character | limit: 2")
242 assert cmd isa CmdLinearization
243 assert parser.error == null
244 assert cmd.results.as(not null).length == 2
245 end
246
247 # CmdCode
248
249 fun test_cmd_parser_code is test do
250 var parser = new CommandParser(test_view, test_builder)
251 var cmd = parser.parse("code: test_prog::Character")
252 assert cmd isa CmdEntityCode
253 assert parser.error == null
254 assert cmd.node != null
255 end
256
257 # CmdModel
258
259 fun test_cmd_parser_mentities is test do
260 var parser = new CommandParser(test_view, test_builder)
261 var cmd = parser.parse("list: modules")
262 assert cmd isa CmdModelEntities
263 assert parser.error == null
264 assert cmd.results != null
265 end
266
267 fun test_cmd_parser_results_mentities is test do
268 var parser = new CommandParser(test_view, test_builder)
269 var cmd = parser.parse("random: modules")
270 assert cmd isa CmdRandomEntities
271 assert parser.error == null
272 assert cmd.results != null
273 end
274
275 # CmdGraph
276
277 fun test_cmd_parser_uml is test do
278 var parser = new CommandParser(test_view, test_builder)
279 var cmd = parser.parse("uml: test_prog::Career")
280 assert cmd isa CmdUML
281 assert parser.error == null
282 assert cmd.uml != null
283 end
284
285 fun test_cmd_parser_inh_graph is test do
286 var parser = new CommandParser(test_view, test_builder)
287 var cmd = parser.parse("graph: test_prog::Career")
288 assert cmd isa CmdInheritanceGraph
289 assert parser.error == null
290 assert cmd.graph != null
291 end
292
293 fun test_cmd_parser_inh_graph_opts is test do
294 var parser = new CommandParser(test_view, test_builder)
295 var cmd = parser.parse("graph: test_prog::Career | cdepth: 2, pdepth: 5")
296 assert cmd isa CmdInheritanceGraph
297 assert parser.error == null
298 assert cmd.graph != null
299 assert cmd.cdepth == 2
300 assert cmd.pdepth == 5
301 end
302
303 # CmdUsage
304
305 fun test_cmd_parser_new is test do
306 var parser = new CommandParser(test_view, test_builder)
307 var cmd = parser.parse("new: test_prog::Career")
308 assert cmd isa CmdNew
309 assert parser.error == null
310 assert cmd.results != null
311 end
312
313 fun test_cmd_parser_call is test do
314 var parser = new CommandParser(test_view, test_builder)
315 var cmd = parser.parse("call: strength_bonus")
316 assert cmd isa CmdCall
317 assert parser.error == null
318 assert cmd.results != null
319 end
320
321 fun test_cmd_parser_return is test do
322 var parser = new CommandParser(test_view, test_builder)
323 var cmd = parser.parse("return: test_prog::Career")
324 assert cmd isa CmdReturn
325 assert parser.error == null
326 assert cmd.results != null
327 end
328
329 fun test_cmd_parser_param is test do
330 var parser = new CommandParser(test_view, test_builder)
331 var cmd = parser.parse("param: test_prog::Career")
332 assert cmd isa CmdParam
333 assert parser.error == null
334 assert cmd.results != null
335 end
336
337 # CmdCatalog
338
339 fun test_parser_catalog_search is test do
340 var parser = new CommandParser(test_view, test_builder)
341 var cmd = parser.parse("search: Caracter")
342 assert cmd isa CmdSearch
343 assert parser.error == null
344 assert cmd.results != null
345 end
346
347 fun test_cmd_parser_catalog_packages is test do
348 var parser = new CommandParser(test_view, test_builder, test_catalog)
349 var cmd = parser.parse("catalog:")
350 assert cmd isa CmdCatalogPackages
351 assert parser.error == null
352 assert cmd.results != null
353 end
354
355 fun test_cmd_parser_catalog_stats is test do
356 var parser = new CommandParser(test_view, test_builder, test_catalog)
357 var cmd = parser.parse("stats:")
358 assert cmd isa CmdCatalogStats
359 assert parser.error == null
360 assert cmd.stats != null
361 end
362
363 fun test_cmd_parser_catalog_tags is test do
364 var parser = new CommandParser(test_view, test_builder, test_catalog)
365 var cmd = parser.parse("tags:")
366 assert cmd isa CmdCatalogTags
367 assert parser.error == null
368 assert cmd.packages_count_by_tags != null
369 end
370
371 fun test_cmd_parser_catalog_tag is test do
372 var parser = new CommandParser(test_view, test_builder, test_catalog)
373 var cmd = parser.parse("tag: test")
374 assert cmd isa CmdCatalogTag
375 assert parser.error == null
376 assert cmd.tag == "test"
377 assert cmd.results != null
378 end
379
380 fun test_cmd_parser_catalog_person is test do
381 var parser = new CommandParser(test_view, test_builder, test_catalog)
382 var cmd = parser.parse("person: Alexandre Terrasa")
383 assert cmd isa CmdCatalogPerson
384 assert parser.error == null
385 assert cmd.person.as(not null).name == "Alexandre Terrasa"
386 end
387
388 fun test_cmd_parser_catalog_contributing is test do
389 var parser = new CommandParser(test_view, test_builder, test_catalog)
390 var cmd = parser.parse("contrib: Alexandre Terrasa")
391 assert cmd isa CmdCatalogContributing
392 assert parser.error == null
393 assert cmd.person.as(not null).name == "Alexandre Terrasa"
394 assert cmd.results != null
395 end
396
397 fun test_cmd_parser_catalog_maintaining is test do
398 var parser = new CommandParser(test_view, test_builder, test_catalog)
399 var cmd = parser.parse("maintain: Alexandre Terrasa")
400 assert cmd isa CmdCatalogMaintaining
401 assert parser.error == null
402 assert cmd.person.as(not null).name == "Alexandre Terrasa"
403 assert cmd.results != null
404 end
405
406 # CmdInit
407
408 fun test_cmd_parser_ini_desc is test do
409 var parser = new CommandParser(test_view, test_builder, test_catalog)
410 var cmd = parser.parse("ini-desc: test_prog")
411 assert cmd isa CmdIniDescription
412 assert parser.error == null
413 assert cmd.desc.as(not null) == "Dummy program used for testing Nit tools"
414 end
415
416 fun test_cmd_parser_ini_git is test do
417 var parser = new CommandParser(test_view, test_builder, test_catalog)
418 var cmd = parser.parse("ini-git: test_prog")
419 assert cmd isa CmdIniGitUrl
420 assert parser.error == null
421 assert cmd.url == "https://github.com/nitlang/nit.git"
422 end
423
424 fun test_cmd_parser_ini_clone is test do
425 var parser = new CommandParser(test_view, test_builder, test_catalog)
426 var cmd = parser.parse("git-clone: test_prog")
427 assert cmd isa CmdIniCloneCommand
428 assert parser.error == null
429 assert cmd.url == "https://github.com/nitlang/nit.git"
430 assert cmd.command == "git clone https://github.com/nitlang/nit.git"
431 end
432
433 fun test_cmd_parser_ini_issues is test do
434 var parser = new CommandParser(test_view, test_builder, test_catalog)
435 var cmd = parser.parse("ini-issues: test_prog")
436 assert cmd isa CmdIniIssuesUrl
437 assert parser.error == null
438 assert cmd.url == "https://github.com/nitlang/nit/issues"
439 end
440
441 fun test_cmd_parser_ini_maintainer is test do
442 var parser = new CommandParser(test_view, test_builder, test_catalog)
443 var cmd = parser.parse("ini-maintainer: test_prog")
444 assert cmd isa CmdIniMaintainer
445 assert parser.error == null
446 assert cmd.maintainer == "John Doe <jdoe@example.com> (http://www.example.com/~jdoe), Spider-Man"
447 end
448
449 fun test_cmd_parser_ini_contributors is test do
450 var parser = new CommandParser(test_view, test_builder, test_catalog)
451 var cmd = parser.parse("ini-contributors: test_prog")
452 assert cmd isa CmdIniContributors
453 assert parser.error == null
454 assert cmd.contributors == [
455 "Riri <riri@example.com>",
456 "Fifi (http://www.example.com/~fifi)",
457 "Loulou"]
458 end
459
460 fun test_cmd_parser_ini_license is test do
461 var parser = new CommandParser(test_view, test_builder, test_catalog)
462 var cmd = parser.parse("ini-license: test_prog")
463 assert cmd isa CmdIniLicense
464 assert parser.error == null
465 assert cmd.license == "Apache-2.0"
466 end
467
468 fun test_cmd_parser_ini_license_file is test do
469 var parser = new CommandParser(test_view, test_builder, test_catalog)
470 var cmd = parser.parse("license-file: test_prog")
471 assert cmd isa CmdLicenseFile
472 assert parser.error == null
473 var file = cmd.file
474 assert file != null
475 assert file.basename == "LICENSE.md"
476 end
477
478 fun test_cmd_parser_ini_license_content is test do
479 var parser = new CommandParser(test_view, test_builder, test_catalog)
480 var cmd = parser.parse("license-content: test_prog")
481 assert cmd isa CmdLicenseFileContent
482 assert parser.error == null
483 var content = cmd.content
484 assert content != null
485 assert not content.is_empty
486 end
487
488 fun test_cmd_parser_ini_contrib_file is test do
489 var parser = new CommandParser(test_view, test_builder, test_catalog)
490 var cmd = parser.parse("contrib-file: test_prog")
491 assert cmd isa CmdContribFile
492 assert parser.error == null
493 var file = cmd.file
494 assert file != null
495 assert file.basename == "CONTRIBUTING.md"
496 end
497
498 fun test_cmd_parser_ini_contrib_content is test do
499 var parser = new CommandParser(test_view, test_builder, test_catalog)
500 var cmd = parser.parse("contrib-content: test_prog")
501 assert cmd isa CmdContribFileContent
502 assert parser.error == null
503 var content = cmd.content
504 assert content != null
505 assert not content.is_empty
506 end
507
508 # CmdMain
509
510 fun test_cmd_parser_mains is test do
511 var parser = new CommandParser(test_view, test_builder, test_catalog)
512 var cmd = parser.parse("mains: test_prog")
513 assert cmd isa CmdMains
514 assert parser.error == null
515
516 var results = cmd.results
517 assert results != null
518 assert results.length == 1
519 assert results.first.full_name == "test_prog::test_prog"
520 end
521
522 fun test_cmd_parser_main_compile is test do
523 var parser = new CommandParser(test_view, test_builder, test_catalog)
524 var cmd = parser.parse("main-compile: test_prog::test_prog")
525 assert cmd isa CmdMainCompile
526 assert parser.error == null
527
528 var command = cmd.command
529 assert command != null
530 assert command.has_prefix("nitc ")
531 assert command.has_suffix("test_prog.nit")
532 end
533
534 fun test_cmd_parser_testing is test do
535 var parser = new CommandParser(test_view, test_builder, test_catalog)
536 var cmd = parser.parse("testing: test_prog")
537 assert cmd isa CmdTesting
538 assert parser.error == null
539
540 var command = cmd.command
541 assert command != null
542 assert command.has_prefix("nitunit ")
543 assert command.has_suffix("/tests")
544 end
545
546 fun test_cmd_man_synopsis is test do
547 var parser = new CommandParser(test_view, test_builder, test_catalog)
548 var cmd = parser.parse("main-run: test_prog")
549 assert cmd isa CmdManSynopsis
550 assert parser.error == null
551
552 assert cmd.synopsis == "test_prog [*options*] ARGS..."
553 end
554
555 fun test_cmd_man_opions is test do
556 var parser = new CommandParser(test_view, test_builder, test_catalog)
557 var cmd = parser.parse("main-opts: test_prog")
558 assert cmd isa CmdManOptions
559 assert parser.error == null
560
561 var options = cmd.options
562 assert options != null
563 assert options["--opt1"] == "Option 1."
564 assert options["--opt2"] == "Option 2."
565 end
566 end