1 # This file is part of NIT ( http://www.nitlanguage.org ).
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
7 # http://www.apache.org/licenses/LICENSE-2.0
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.
15 module test_commands_parser
is test
18 import doc
::commands
::tests
::test_commands_catalog
19 import doc
::commands
::commands_parser
21 class TestCommandsParser
22 super TestCommandsCatalog
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
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."
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."
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"
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"
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."
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."
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"
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"
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."
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."
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"
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"
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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"
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
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
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"
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"
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"
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"
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"
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)",
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"
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
475 assert file
.basename
== "LICENSE.md"
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
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
495 assert file
.basename
== "CONTRIBUTING.md"
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
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
516 var results
= cmd
.results
517 assert results
!= null
518 assert results
.length
== 1
519 assert results
.first
.full_name
== "test_prog::test_prog"
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
528 var command
= cmd
.command
529 assert command
!= null
530 assert command
.has_prefix
("nitc ")
531 assert command
.has_suffix
("test_prog.nit")
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
540 var command
= cmd
.command
541 assert command
!= null
542 assert command
.has_prefix
("nitunit ")
543 assert command
.has_suffix
("/tests")
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
552 assert cmd
.synopsis
== "test_prog [*options*] ARGS..."
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
561 var options
= cmd
.options
562 assert options
!= null
563 assert options
["--opt1"] == "Option 1."
564 assert options
["--opt2"] == "Option 2."