fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / packfileannotations.t
blob202ab644dfccc924fa6daeb52e518cf898f7b8a1
1 #!./parrot
2 # Copyright (C) 2006-2010, Parrot Foundation.
3 # $Id$
6 =head1 NAME
8 t/pmc/packfileannotations.t - test the PackfileAnnotations PMC
10 =head1 SYNOPSIS
12     % make test_prep
13     % prove t/pmc/packfileannotations.t
15 =head1 DESCRIPTION
17 Tests the PackfileAnnotations PMC.
19 =cut
21 .include 't/pmc/testlib/packfile_common.pir'
23 .const string annofilename = 't/pmc/testlib/annotations.pbc'
26 .sub 'main' :main
27 .include 'test_more.pir'
28     plan(17)
29     test_sanity()
30     test_unpack()
31     test_pack_unpack()
32 .end
35 # Packfile constructor
36 .sub 'test_sanity'
37     .local pmc pf
38     pf = new ['PackfileAnnotations']
39     $I0 = defined pf
40     ok($I0, "PackfileAnnotations created")
41 .end
43 # PackfileAnnotations unpack from PBC
44 .sub 'test_unpack'
45     .local pmc pf
47     push_eh load_error
48     $P0 = new ['FileHandle']
49     $P0.'open'(annofilename, 'r')
50     $P0.'encoding'('binary')
51     $S0 = $P0.'readall'()
52     pf = new 'Packfile'
53     pf = $S0
54     pop_eh
55     .tailcall '!test_unpack'(pf)
56 load_error:
57     .get_results($P0)
58     pop_eh
59     report_load_error($P0, "PackfileAnnotations unpack failed to load test file")
60     skip(7, "PackfileAnnotations unpack tests failed")
61     .return()
62 .end
64 # Programatically create PBC same as t/native_pbc/annotations.pbc and check unpack of it.
65 .sub 'test_pack_unpack'
66     .local pmc pf, pfdir
67     pf = new 'Packfile'
68     pfdir = pf.'get_directory'()
69     #$P0 = new 'PackfileConstantTable'
70     #$P0[0] = 42.0
71     $P0 = new 'PackfileFixupTable'
72     pfdir["FIXUP_t/pmc/packfileannotations.t"] = $P0
74     $P1 = new 'PackfileRawSegment'
75     pfdir["BYTECODE_t/pmc/packfileannotations.t"] = $P1
77     $P2 = new 'PackfileConstantTable'
78     pfdir["CONSTANTS_t/pmc/packfileannotations.t"] = $P2
80     .local pmc anns
81     anns = new 'PackfileAnnotations'
82     # We have to add it to Directory before doing anything to handle Constants properly
83     pfdir["BYTECODE_t/pmc/packfileannotations.t_ANN"] = anns
85     $P3 = new 'PackfileAnnotation'
86     $P3.'set_name'('file')
87     $P3 = 'annotations.pir'
88     anns[0] = $P3
90     $P4 = new 'PackfileAnnotation'
91     $P4.'set_name'('creator')
92     $P4 = 'Parrot Foundation'
93     anns[1] = $P4
95     $P5 = new 'PackfileAnnotation'
96     $P5.'set_name'('line')
97     $P5 = 1
98     anns[2] = $P5
100     $P6 = new 'PackfileAnnotation'
101     $P6.'set_name'('line')
102     $P6 = 2
103     anns[3] = $P6
105     # Make sure the mark vtable is exercised and the content survives
106     sweep 1
108     # Pack
109     $S0 = pf
110     pf = new 'Packfile'
111     pf = $S0
112     .tailcall '!test_unpack'(pf)
113 .end
115 .sub '!test_unpack'
116     .param pmc pf
117     .local pmc pfdir, pfanns, it
119     # Find annotations
120     pfdir = pf.'get_directory'()
121     it = iter pfdir
122   loop:
123     unless it goto fail
124     $S0 = shift it
125     $P0 = pfdir[$S0]
126     $I0 = isa $P0, 'PackfileAnnotations'
127     unless $I0 goto loop
128     ok(1, "PackfileAnnotations unpacked")
129     pfanns = $P0
131     # Test entities
132     $I0 = elements pfanns
133     is($I0, 4, "Annotations were unpack correctly")
135     .local pmc a
136     .local pmc constants
137     constants = _find_segment_by_type(pf, "PackfileConstantTable")
138     # "file"
139     a = pfanns[0]
140     $S0 = a.'get_name'()
141     is($S0, "file", "First annotation's name unpacked")
142     $S0 = a
143     is($S0, "annotations.pir", "First annotation's value is correct")
145     # "creator"
146     a = pfanns[1]
147     $S0 = a.'get_name'()
148     is($S0, "creator", "Second annotation's name unpacked")
149     $S0 = a
150     is($S0, "Parrot Foundation", "Second annotation's value is correct")
152     # Two "line"
153     a = pfanns[2]
154     $I0 = a
155     is($I0, 1, "Third annotation is correct")
156     a = pfanns[3]
157     $I0 = a
158     is($I0, 2, "Forth annotation is correct")
161     .return()
163   fail:
164     nok(1, "PackfileAnnotations wasn't found in Directory")
165     # BAIL_OUT
166     skip(7, "PackfileAnnotations tests failed")
167 .end
169 # Local Variables:
170 #   mode: pir
171 #   fill-column: 100
172 # End:
173 # vim: expandtab shiftwidth=4 ft=pir: