Commit cdd56bd9891193c902b9796a84c5db4a7fe03aa9

  • avatar
  • Duke Leto <jonathan @le…o.net>
  • Sun Jan 24 23:00:15 CET 2010
Update Tapir
  
88
99.namespace [ 'Tapir'; 'Parser' ]
1010
11.sub bail_if_necessary :method
12 .param string line
13 $S0 = substr line, 0, 9
14 if $S0 == 'Bail out!' goto bail_out
15 .return(0)
16 bail_out:
17 .return(1)
18.end
19
1120.sub parse_tapstream :method
1221 .param string tap
1322 .param int exit_code :optional
1423 .local string curr_line
1524 .local pmc plan, pass, fail, skip, todo
16 .local int i, curr_test, reported_test
25 .local int i, curr_test, reported_test, ordered, num_lines
1726 .local pmc tap_lines, parts, klass, stream
1827
1928 i = 0
2029 curr_test = 1
30 ordered = 1
2131 fail = new 'Integer'
2232 skip = new 'Integer'
2333 todo = new 'Integer'
3737 parts = new 'ResizablePMCArray'
3838
3939 split tap_lines, "\n", tap
40 $I0 = tap_lines
40 num_lines = tap_lines
4141
4242 .local string plan_line
4343 plan_line = tap_lines[0]
4545
4646 .local string prefix
4747 loop:
48 if i >= $I0 goto done
48 if i >= num_lines goto done
4949 curr_line = tap_lines[i]
5050
51 .local int need_to_bail
52 need_to_bail = self.'bail_if_necessary'(curr_line)
53 if need_to_bail goto done
54
55 .local int is_tap
56 is_tap = self.'is_tap'(curr_line)
57 unless is_tap goto unrecognized
58
5159 split parts, "ok ", curr_line
5260
5361 prefix = parts[0]
6464 if prefix == 'not ' goto fail_or_todo
6565
6666 if reported_test == curr_test goto pass_or_skip
67 # out of order test
68 ordered = 0
6769
68 # it was an unrecognized line
70 goto pass_or_skip
71
72 unrecognized: # doesn't look like TAP, just ignore
6973 inc i
7074 goto loop
75
7176 pass_or_skip:
7277 split parts, "# ", curr_line
7378 $S0 = parts[1]
108108
109109 done:
110110 stream = new [ 'Tapir'; 'Stream' ]
111 stream.'set_ordered'(ordered)
111112 stream.'set_pass'(pass)
112113 stream.'set_fail'(fail)
113114 stream.'set_todo'(todo)
118118 .return (stream)
119119.end
120120
121# parse_plan returns the expected number of test given a TAP stream as a string
121.sub is_tap :method
122 .param string tapline
123 $S0 = substr tapline, 0, 3
124 if $S0 == "ok " goto yes
125
126 $S0 = substr tapline, 0, 7
127 if $S0 == "not ok " goto yes
128
129 no:
130 .return( 0 )
131 yes:
132 .return( 1 )
133.end
134
135# parse_plan returns the expected number of tests given a plan line as a string
122136
123137.sub parse_plan :method
124138 .param string plan_line
  
1111 .local pmc klass
1212
1313 klass = newclass [ 'Tapir'; 'Stream' ]
14 klass.'add_attribute'('ordered')
1415 klass.'add_attribute'('pass')
1516 klass.'add_attribute'('fail')
1617 klass.'add_attribute'('skip')
2929 exit_code = self."get_exit_code"()
3030 if exit_code goto failz
3131
32 .local pmc skip, pass, todo, plan
32 .local pmc skip, pass, todo, plan, ordered
33 ordered = self."get_ordered"()
34 unless ordered goto disorder
35
3336 skip = self."get_skip"()
3437 pass = self."get_pass"()
3538 todo = self."get_todo"()
4040 $P0 = pass + todo
4141 $P0 += skip
4242
43 $I1 = plan == $P0
43 $I1 = plan == $P0
4444 .return( $I1 )
45 disorder:
4546 failz:
4647 .return( 0 )
4748.end
5252 setattribute self, "exit_code", exit_code
5353.end
5454
55.sub set_ordered :method
56 .param pmc ordered
57 setattribute self, "ordered", ordered
58.end
59
5560.sub set_pass :method
5661 .param pmc pass
5762 setattribute self, "pass", pass
8686 .local pmc exit_code
8787 exit_code = getattribute self, "exit_code"
8888 .return( exit_code )
89.end
90
91.sub get_ordered :method
92 .local pmc ordered
93 ordered = getattribute self, "ordered"
94 .return( ordered )
8995.end
9096
9197.sub get_pass :method
  
174174 $I0 = stream.'get_fail'()
175175 print $I0
176176 inc failing_files
177 inc failing_tests
177 failing_tests += $I0
178178 $S1 = stream.'total'()
179179 $S0 = "/" . $S1
180180 print $S0