Add some better reporting to harness.pir
[tapir.git] / t / harness.pir
blob7bde550ea8822455dd145a961f4461f13be46134
1 # Copyright (C) 2009, Jonathan "Duke" Leto <jonathan@leto.net>
3 .include 'lib/Tapir/Parser.pir'
4 .include 'lib/Tapir/Stream.pir'
6 .sub main :main
7     .param pmc argv
8     $S0  = shift argv  # get rid of harness.pir in the args list
9     $I0  = argv
10     dec $I0
12     .local pmc tapir, klass
13     klass = newclass [ 'Tapir'; 'Parser' ]
14     tapir = klass.'new'()
16     .local pmc stream
17     .local int i
18     .local string file
19     .local string output
20     .local int success
21     .local int total_files, failing_files
22     i = 0
23     failing_files = 0
24     total_files   = 0
25  loop:
26     file = argv[i]
27     unless file goto done
28     inc total_files
29     print file
30     print ".........."
31     output = qx('parrot',file)
32     stream = tapir.'parse_tapstream'(output)
33     success = stream.'is_pass'()
34     unless success goto fail
35     print "passed "
36     $I0 = stream.'get_pass'()
37     print $I0
38     say " tests"
39     goto redo
40  fail:
41     print "failed "
42     $I0 = stream.'get_fail'()
43     print $I0
44     inc failing_files
45     $S1 = stream.'total'()
46     $S0 = "/" . $S1
47     print $S0
48     say " tests"
49  redo:
50     inc i
51     goto loop
53  done:
54     if failing_files goto print_fail
55     say "PASSED"
56     goto done
57   print_fail:
58     say "FAILED"
59 .end
61 .sub 'qx'
62     .param pmc command_and_args :slurpy
64     .local string cmd
65     cmd = join ' ', command_and_args
67     .local pmc pipe
68     pipe = open cmd, 'rp'
69     unless pipe goto pipe_open_error
71     .local pmc output
72     pipe.'encoding'('utf8')
73     output = pipe.'readall'()
74     pipe.'close'()
76     .local pmc exit_status
77     $I0 = pipe.'exit_status'()
78     exit_status = box $I0
80     find_dynamic_lex $P0, '$!'
81     if null $P0 goto skip_exit_status
82     store_dynamic_lex '$!', exit_status
83   skip_exit_status:
85     .return (output)
87   pipe_open_error:
88     $S0  = 'Unable to execute "'
89     $S0 .= cmd
90     $S0 .= '"'
91     die $S0
92 .end
94 # Local Variables:
95 #   mode: pir
96 #   fill-column: 100
97 # End:
98 # vim: expandtab shiftwidth=4 ft=pir: