fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / library / getopt_obj.t
blobf2c537eef08339705dfcb89679f5dc462acaa297
1 #!./parrot
2 # Copyright (C) 2001-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/library/getopt_obj.t - testing the PIR module Getopt::Obj
9 =head1 SYNOPSIS
11     % prove t/library/getopt_obj.t
13 =head1 DESCRIPTION
15 This test program tries to handle command line arguments with the
16 module F<runtime/parrot/library/Getopt/Obj.pir>.
18 =cut
20 .sub main :main
21     .include 'test_more.pir'
22     load_bytecode "Getopt/Obj.pbc"
23     plan(49)
25     test_basic_long_options()
26     test_basic_short_options()
27     test_simple_array()
28     test_mixing_long_and_short_with_array()
29     test_hash()
30     test_bundling_short_options()
31     test_ignored_options()
32     test_double_dash_stop()
33     test_notOptStop()
34     test_optarg()
35     test_pass_through()
36     test_lone_dash()
37     test_push_interface()
38     test_missing_spec()
39     test_missing_argument()
40 .end
42 # 1
43 .sub test_basic_long_options
44         .local pmc argv
45         argv = new 'ResizablePMCArray'
46         push argv, '--foo=bar'
47         push argv, '--bar=3.14'
48         push argv, '--bax=3'
49         push argv, '--baz'
50         push argv, '--quux'
51         push argv, 'frobz'
53         .local pmc getopts
54         getopts = new ['Getopt';'Obj']
56         $P0 = getopts."add"()
57         $P0."long"("foo")
58         $P0."type"('String')
60         $P0 = getopts."add"()
61         $P0."long"("bar")
62         $P0."type"('Float')
64         $P0 = getopts."add"()
65         $P0."long"("bax")
66         $P0."type"('Integer')
68         $P0 = getopts."add"()
69         $P0."long"("baz")
71         $P0 = getopts."add"()
72         $P0."long"("quux")
73         $P0."type"("String")
74         $P0.'optarg'(0)
76         $P1 = getopts."get_options"(argv)
78         $S0 = $P1["foo"]
79         is($S0, 'bar', 'basic long options')
81         $S0 = $P1["bar"]
82         is($S0, 3.14, 'basic long options')
84         $S0 = $P1["bax"]
85         is($S0, 3, 'basic long options')
87         $S0 = $P1["baz"]
88         is($S0, 1, 'basic long options')
90         $S0 = $P1["quux"]
91         is($S0, 'frobz', 'basic long options')
92 .end
94 # 2
95 .sub test_basic_short_options
96         .local pmc argv
97         argv = new 'ResizablePMCArray'
98         push argv, '-f'
99         push argv, 'bar'
100         push argv, '-Abc'
101         push argv, '-c'
103         .local pmc getopts
104         getopts = new ['Getopt';'Obj']
106         $P0 = getopts."add"()
107         $P0."short"("f")
108         $P0."type"('String')
110         $P0 = getopts."add"()
111         $P0."short"("A")
112         $P0."type"('String')
114         $P0 = getopts."add"()
115         $P0."short"("c")
117         $P1 = getopts."get_options"(argv)
119         $S0 = $P1["f"]
120         is($S0, 'bar', 'basic short options')
122         $S0 = $P1["A"]
123         is($S0, 'bc', 'basic short options')
125         $S0 = $P1["c"]
126         is($S0, '1', 'basic short options')
127 .end
129 # 3
130 .sub test_simple_array
131         .local pmc argv
132         argv = new 'ResizablePMCArray'
133         push argv, '-Iinca'
134         push argv, '-Iincb'
136         .local pmc getopts
137         getopts = new ['Getopt';'Obj']
139         $P0 = getopts."add"()
140         $P0."short"("I")
141         $P0."type"('Array')
143         $P1 = getopts."get_options"(argv)
145         $S0 = $P1["I";0]
146         is($S0, 'inca', 'simple array')
148         $S0 = $P1["I";1]
149         is($S0, 'incb', 'simple array')
151 .end
153 # 4
154 .sub test_mixing_long_and_short_with_array
155         .local pmc argv
156         argv = new 'ResizablePMCArray'
157         push argv, '-Iinca'
158         push argv, '--include=incb'
160         .local pmc getopts
161         getopts = new ['Getopt';'Obj']
163         $P0 = getopts."add"()
164         $P0."long"("include")
165         $P0."short"("I")
166         $P0."type"('Array')
168         $P1 = getopts."get_options"(argv)
170         $S0 = $P1["include";0]
171         is($S0, 'inca', 'mixing long and short with array')
173         $S0 = $P1["include";1]
174         is($S0, 'incb', 'mixing long and short with array')
176 .end
178 # 5
179 .sub test_hash
180         .local pmc argv
181         argv = new 'ResizablePMCArray'
182         push argv, '-Dfoo=bar'
183         push argv, '--define=bax=baz'
184         push argv, '-Dfoobar'
186         .local pmc getopts
187         getopts = new ['Getopt';'Obj']
189         $P0 = getopts."add"()
190         $P0."long"("define")
191         $P0."short"("D")
192         $P0."type"('Hash')
194         $P1 = getopts."get_options"(argv)
196         $S0 = $P1["define";"foo"]
197         is($S0, 'bar', 'hash')
199         $S0 = $P1["define";"bax"]
200         is($S0, 'baz', 'hash')
202         $S0 = $P1["define";"foobar"]
203         is($S0, 1, 'hash')
205 .end
207 # 6
208 .sub test_bundling_short_options
209         .local pmc argv
210         argv = new 'ResizablePMCArray'
211         push argv, '-abc'
213         .local pmc getopts
214         getopts = new ['Getopt';'Obj']
216         $P0 = getopts."add"()
217         $P0."short"("a")
218         $P0 = getopts."add"()
219         $P0."short"("b")
220         $P0 = getopts."add"()
221         $P0."short"("c")
223         $P1 = getopts."get_options"(argv)
225         $S0 = $P1["a"]
226         is($S0, 1, 'bundling short options')
228         $S0 = $P1["b"]
229         is($S0, 1, 'bundling short options')
231         $S0 = $P1["c"]
232         is($S0, 1, 'bundling short options')
234 .end
236 # 7
237 .sub test_ignored_options
238         .local pmc argv
239         argv = new 'ResizablePMCArray'
240         push argv, '--ignore'
241         push argv, '--foo'
243         .local pmc getopts
244         getopts = new ['Getopt';'Obj']
245         getopts."notOptStop"(1)
247         $P0 = getopts."add"()
248         $P0."long"("foo")
250         $P1 = getopts."get_options"(argv)
252         $S0 = $P1["foo"]
253         is($S0, '1', 'ignored options')
255         $S0 = argv[0]
256         is($S0, '--ignore', 'ignored options')
258 .end
260 # 8
261 .sub test_double_dash_stop
262         .local pmc argv
263         argv = new 'ResizablePMCArray'
264         push argv, '--foo'
265         push argv, '--'
266         push argv, '--bar'
268         .local pmc getopts
269         getopts = new ['Getopt';'Obj']
271         $P0 = getopts."add"()
272         $P0."long"("foo")
273         $P0 = getopts."add"()
274         $P0."long"("bar")
276         $P1 = getopts."get_options"(argv)
278         $S0 = $P1["foo"]
279         is($S0, 1, 'double dash stop')
281         # Hash sets an nonexistant value to ''
282         $S0 = $P1["bar"]
283         is($S0, '', 'double dash stop')
285         $S0 = argv[0]
286         is($S0, '--bar', 'double dash stop')
288 .end
290 # 9
291 .sub test_notOptStop
292         .local pmc argv
293         argv = new 'ResizablePMCArray'
294         push argv, '--foo'
295         push argv, 'foo'
296         push argv, '--bar'
298         .local pmc getopts
299         getopts = new ['Getopt';'Obj']
300         getopts."notOptStop"(1)
302         $P0 = getopts."add"()
303         $P0."long"("foo")
304         $P0 = getopts."add"()
305         $P0."long"("bar")
307         $P1 = getopts."get_options"(argv)
309         $S0 = $P1["foo"]
310         is($S0, 1, 'notOptStop')
312         $S0 = $P1["bar"]
313         is($S0, '', 'notOptStop')
315         $S0 = argv[0]
316         is($S0, 'foo', 'notOptStop')
318         $S0 = argv[1]
319         is($S0, '--bar', 'notOptStop')
321 .end
323 # 10
324 .sub test_optarg
325         .local pmc argv
326         argv = new 'ResizablePMCArray'
327         push argv, '--foo'
328         push argv, '-f'
329         push argv, '-bbar'
331         .local pmc getopts
332         getopts = new ['Getopt';'Obj']
333         getopts."notOptStop"(1)
335         $P0 = getopts."add"()
336         $P0."long"("foo")
337         $P0."optarg"(1)
338         $P0."type"('String')
340         $P0 = getopts."add"()
341         $P0."short"("f")
342         $P0."optarg"(1)
343         $P0."type"('String')
345         $P0 = getopts."add"()
346         $P0."short"("b")
347         $P0."optarg"(1)
348         $P0."type"('String')
350         $P1 = getopts."get_options"(argv)
352         $S0 = $P1["foo"]
353         is($S0, '', 'optarg')
355         $S0 = $P1["f"]
356         is($S0, '', 'optarg')
358         $S0 = $P1["b"]
359         is($S0, 'bar', 'optarg')
361 .end
363 # 11
364 .sub test_pass_through
365         .local pmc argv
366         argv = new 'ResizablePMCArray'
367         push argv, '--foo'
368         push argv, 'foo'
369         push argv, '--bar'
370         push argv, 'bar'
372         .local pmc getopts
373         getopts = new ['Getopt';'Obj']
375         $P0 = getopts."add"()
376         $P0."long"("foo")
377         $P0 = getopts."add"()
378         $P0."long"("bar")
380         $P1 = getopts."get_options"(argv)
382         $S0 = $P1["foo"]
383         is($S0, 1, 'pass through')
385         $S0 = $P1["bar"]
386         is($S0, 1, 'pass through')
388         $S0 = argv[0]
389         is($S0, 'foo', 'pass through')
391         $S0 = argv[1]
392         is($S0, 'bar', 'pass through')
394 .end
396 # 12
397 .sub test_lone_dash
398         .local pmc argv
399         argv = new 'ResizablePMCArray'
400         push argv, '--foo'
401         push argv, '-'
402         push argv, '--bar'
404         .local pmc getopts
405         getopts = new ['Getopt';'Obj']
407         $P0 = getopts."add"()
408         $P0."long"("foo")
409         $P0 = getopts."add"()
410         $P0."long"("bar")
412         $P1 = getopts."get_options"(argv)
414         $S0 = $P1["foo"]
415         is($S0, 1, 'lone dash')
417         $S0 = $P1["bar"]
418         is($S0, 1, 'lone dash')
420         $S0 = argv[0]
421         is($S0, '-', 'lone dash')
423 .end
425 # 13
426 .sub test_push_interface
427         .local pmc argv
428         argv = new 'ResizablePMCArray'
429         push argv, '--foo=file'
430         push argv, '-bfile.txt'
431         push argv, '-x'
432         push argv, 'file.t'
433         push argv, '-z'
434         push argv, 'text'
435         push argv, '-I'
436         push argv, 'texta'
437         push argv, '-I'
438         push argv, 'textb'
439         push argv, '-Dfoo=bar'
440         push argv, '--define=bax=baz'
441         push argv, '-Dfoobar'
443         .local pmc getopts
444         getopts = new ['Getopt';'Obj']
446         push getopts, 'foo=s'
447         push getopts, 'bar|b=s'
448         push getopts, 'bax|x=s'
449         push getopts, 'baz|z:s'
450         push getopts, 'I=@'
451         push getopts, 'define|D:%'
453         $P1 = getopts."get_options"(argv)
455         $S0 = $P1["foo"]
456         is($S0, 'file', 'push interface')
458         $S0 = $P1["bar"]
459         is($S0, 'file.txt', 'push interface')
461         $S0 = $P1["bax"]
462         is($S0, 'file.t', 'push interface')
464         $S0 = $P1["baz"]
465         is($S0, '', 'push interface')
467         $S0 = $P1["I";0]
468         is($S0, 'texta', 'push interface')
470         $S0 = $P1["I";1]
471         is($S0, 'textb', 'push interface')
473         $S0 = $P1["define";"foo"]
474         is($S0, 'bar', 'push interface')
476         $S0 = $P1["define";"bax"]
477         is($S0, 'baz', 'push interface')
479         $S0 = $P1["define";"foobar"]
480         is($S0, 1, 'push interface')
482         $S0 = argv[0]
483         is($S0, 'text', 'push interface')
485 .end
487 # 14
488 .sub test_missing_spec
489     dies_ok(<<'CODE', 'missing_spec')
490 .sub main :main
491         .local pmc argv
492         argv = new 'ResizablePMCArray'
493         push argv, '--foo=file'
494         load_bytecode "Getopt/Obj.pbc"
495         .local pmc getopts
496         getopts = new ['Getopt';'Obj']
497         $P1 = getopts."get_options"(argv)
498         $S0 = $P1["foo"]
499         print "foo is "
500         print $S0
501         print "\n"
502         $S0 = argv[0]
503         print "argv[0] is "
504         print $S0
505         print "\n"
506 .end
507 CODE
508 .end
510 # 15
511 .sub test_missing_argument
512   dies_ok(<<'CODE', "missing argument")
513 .sub main :main
514         .local pmc argv
515         argv = new 'ResizablePMCArray'
516         push argv, '--foo=file'
517         push argv, '--bar'
518         load_bytecode "Getopt/Obj.pbc"
519         .local pmc getopts
520         getopts = new ['Getopt';'Obj']
521         push getopts, 'foo=s'
522         push getopts, 'bar=s'
523         $P1 = getopts."get_options"(argv)
524         $S0 = $P1["foo"]
525         print "foo is "
526         print $S0
527         print "\n"
528         $S0 = argv[0]
529         print "argv[0] is "
530         print $S0
531         print "\n"
532 .end
533 CODE
534 .end
536 =head1 AUTHOR
538 Joshua Isom - C<loneowl@ritalin.shout.net>
540 =head1 SEE ALSO
542 F<runtime/parrot/library/Getopt/Obj.pir>
544 =cut
546 # Local Variables:
547 #   mode: pir
548 #   fill-column: 100
549 # End:
550 # vim: expandtab shiftwidth=4 ft=pir: