fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / packfiledirectory.t
blobfcd2cbf04dea364e21c4b8e7b0f0b216725d7b08
1 #!./parrot
2 # Copyright (C) 2009-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/packfiledirectory.t - test the PackfileDirectory PMC
10 =head1 SYNOPSIS
12     % make test_prep
13     % prove t/pmc/packfiledirectory.t
15 =head1 DESCRIPTION
17 Tests the PackfileDirectory PMC.
19 =cut
21 .include 't/pmc/testlib/packfile_common.pir'
23 .sub 'main' :main
24 .include 'test_more.pir'
25     plan(20)
27     'test_create'()
28     'test_typeof'()
29     'test_elements'()
30     'test_get_iter'()
31     'test_set_pmc_keyed_str'()
32 .end
35 # Test creation of fresh directory
36 .sub 'test_create'
37     .local pmc dir, seg
38     dir = new 'PackfileDirectory'
39     isa_ok(dir, 'PackfileDirectory')
41     seg = new 'PackfileRawSegment'
42     # We should set owner
43     $P0 = seg.'get_directory'()
44     $I0 = defined $P0
45     $I0 = not $I0
46     ok($I0, "Owner of fresh segment unknown")
48     dir['RAWSEGMENT'] = seg
50     # We should set owner
51     $P0 = seg.'get_directory'()
52     $I0 = defined $P0
53     ok($I0, "Owner of segment set correctly")
54 .end
56 # PackfileDirectory.typeof
57 .sub 'test_typeof'
58     .local pmc pf
59     pf = new ['Packfile']
60     $P1 = pf.'get_directory'()
61     isa_ok($P1, 'PackfileDirectory', 'PackfileDirectory.get_directory')
62 .end
64 # PackfileDirectory.elements
65 .sub 'test_elements'
66     .local pmc pf, pfdir
67     push_eh load_error
68     pf    = _pbc()
69     pop_eh
70     pfdir = pf.'get_directory'()
71     $I0   = elements pfdir
72     is($I0, 4, 'PackfileDirectory.elements')
73     .return()
74 load_error:
75     .get_results($P0)
76     pop_eh
77     report_load_error($P0, 'PackfileDirectory.elements')
78     .return()
79 .end
82 # PackfileDirectory.get_iter
83 .sub 'test_get_iter'
84     .local pmc pf, pfdir, it, expected
85     .local string name
87     # expected contains all expected segment "prefixes" with count
88     expected = new 'Hash'
89     expected["BYTECODE"] = 2
90     expected["FIXUP"]    = 1
91     expected["CONSTANT"] = 1
93     push_eh load_error
94     pf    = _pbc()
95     pop_eh
96     pfdir = pf.'get_directory'()
97     $I0   = elements pfdir
98     it    = iter pfdir
99   loop:
100     unless it goto done
101     name = shift it
103     # Get prefix
104     $P0 = split '_', name
105     $S0 = shift $P0
106     $I0 = expected[$S0]
107     ok($I0, $S0)
108     # Decrease expectation count
109     dec $I0
110     expected[$S0] = $I0
112     $P1 = pfdir[name]
113     isa_ok($P1, 'PackfileSegment')
114     $P2 = $P1.'get_directory'()
115     $I0 = defined $P2
116     ok($I0, "Loaded Segment has proper directory")
117     goto loop
118   done:
119     .return ()
120 load_error:
121     .get_results($P0)
122     pop_eh
123     report_load_error($P0, "can't run get_iter tests")
124     skip(11, "can't run get_iter tests")
125     .return()
126 .end
128 ## PackfileDirectory.set_pmc_keyed_str
129 .sub 'test_set_pmc_keyed_str'
130     .local pmc pf, pfdir, seg
131     push_eh load_error
132     pf    = _pbc()
133     pop_eh
134     pfdir = pf.'get_directory'()
135     seg   = new [ 'PackfileRawSegment' ]
137     # Adding segment with same name replaces old one
138     $I0 = elements pfdir
139     $P0 = iter pfdir
140     $S0 = shift $P0
141     pfdir[$S0] = seg
142     $I1   = elements pfdir
143     is($I0, $I1, "Segment with old name was added")
145     # Add segment with new name
146   add_new:
147     seg = new [ 'PackfileRawSegment' ]
148     $S0 = 'BYTECODE_foo'
149     pfdir[$S0] = seg
150     $I1   = elements pfdir
151     inc $I0
152     is($I0, $I1, "New segment added")
154     # Remove that segment again
155   delete_seg:
156     delete pfdir[$S0]
157     dec $I0
158     $I1 = elements pfdir
159     is($I0, $I1, "segment deleted")
161   done:
162     .return()
163 load_error:
164     .get_results($P0)
165     pop_eh
166     report_load_error($P0, "Segment with old name was added")
167     report_load_error($P0, "New segment added")
168     report_load_error($P0, "segment deleted")
169     .return()
170 .end
172 # Local Variables:
173 #   mode: pir
174 #   fill-column: 100
175 # End:
176 # vim: expandtab shiftwidth=4 ft=pir: