fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / callcontext.t
blob6da2e80c7c6fd3e93a37ed054ec97a9ba67d1f99
1 #!./parrot
2 # Copyright (C) 2006-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/callcontext.t - test CallContext PMC
9 =head1 SYNOPSIS
11     % prove t/pmc/callcontext.t
13 =head1 DESCRIPTION
15 Tests the CallContext PMC.
17 =cut
19 .sub 'main' :main
20     .include 'test_more.pir'
22     plan(42)
24     test_instantiate()
25     test_get_set_attrs()
26     test_indexed_access()
27     test_indexed_boxing()
28     test_keyed_access()
29     test_shift_access()
30     test_exists()
31     test_clone()
32 .end
34 .sub 'test_instantiate'
35     $P0 = new ['CallContext']
36     ok(1, 'Instantiated CallContext')
37 .end
39 .sub 'test_get_set_attrs'
40     $P0 = new ['CallContext']
41     $P5 = new 'String'
43     $P5 = 'moonbomb'
44     setattribute $P0, 'return_flags', $P5
45     ok(1, 'set return_flags attribute')
46     getattribute $P1, $P0, 'return_flags'
47     is($P5,'moonbomb', 'got return_flags attribute')
49     $P5 = 'cheese'
50     setattribute $P0, 'arg_flags', $P5
51     ok(1, 'set arg_flags attribute')
52     getattribute $P1, $P0, 'arg_flags'
53     is($P5,'cheese', 'got arg_flags attribute')
54 .end
56 .sub 'test_indexed_access'
57     $P0    = new [ 'CallContext' ]
58     $P0[0] = 100
60     $I0 = elements $P0
61     is( $I0, 1, 'elements after set_*_indexed' )
63     $P0[1] = 1.11
65     $I0 = elements $P0
66     is( $I0, 2, 'elements after set_*_indexed' )
68     $S0    = '2.22'
69     $P0[2] = $S0
71     $I0 = elements $P0
72     is( $I0, 3, 'elements after set_*_indexed' )
74     $P1    = new [ 'Float' ]
75     $P1    = 3.33
76     $P0[3] = $P1
78     $I0 = elements $P0
79     is( $I0, 4, 'elements after set_*_indexed' )
81     $I1    = $P0[0]
82     is( $I1, 100, 'set_integer_keyed_int/get_integer_keyed_int pair' )
84     $N1    = $P0[1]
85     is( $N1, 1.11, 'set_number_keyed_int/get_number_keyed_int pair' )
87     $S1    = $P0[2]
88     is( $S1, '2.22', 'set_string_keyed_int/get_string_keyed_int pair' )
90     $P1    = $P0[3]
91     is( $P1, 3.33, 'set_pmc_keyed_int/get_pmc_keyed_int pair' )
93 .end
95 .sub 'test_indexed_boxing'
96     $P0    = new [ 'CallContext' ]
97     $P0[0] = 100
98     $P0[1] = 1.11
100     $S0    = '2.22'
101     $P0[2] = $S0
103     $P1    = new [ 'Float' ]
104     $P1    = 3.33
105     $P0[3] = $P1
107     $I0    = $P0[1]
108     is( $I0, 1, 'indexed float converted to int on get_integer_keyed_int' )
109     $I0    = $P0[2]
110     is( $I0, 2, 'indexed string converted to int on get_integer_keyed_int' )
111     $I0    = $P0[3]
112     is( $I0, 3, 'indexed PMC converted to int on get_integer_keyed_int' )
114     $N0    = $P0[0]
115     is( $N0, 100.0, 'indexed integer converted to num on get_number_keyed_int' )
116     $N0    = $P0[2]
117     is( $N0, 2.22,  'indexed string converted to num on get_number_keyed_int' )
118     $N0    = $P0[3]
119     is( $N0, 3.33,  'indexed PMC converted to int num get_number_keyed_int' )
121     $S0    = $P0[0]
122     is( $S0, '100',  'indexed int converted to string on get_string_keyed_int' )
123     $S0    = $P0[1]
124     is( $S0, '1.11', 'indexed num converted to string on get_string_keyed_int' )
125     $S0    = $P0[3]
126     is( $S0, '3.33', 'indexed PMC converted to string get_string_keyed_int' )
128     $P1    = $P0[0]
129     is( $P1, 100,  'indexed int converted to PMC on get_pmc_keyed_int' )
130     $P1    = $P0[1]
131     is( $P1, 1.11, 'indexed float converted to PMC on get_pmc_keyed_int' )
132     $P1    = $P0[2]
133     is( $P1, 2.22, 'indexed string converted to PMC on get_pmc_keyed_int' )
134 .end
136 .sub 'test_keyed_access'
137     $P0        = new [ 'CallContext' ]
139     $P0['foo'] = 100
140     $P0['bar'] = 1.11
141     $P0['baz'] = '2.22'
142     $P1        = new [ 'Float' ]
143     $P1        = 3.33
145     $P0['qux'] = $P1
147     $I0 = $P0['foo']
148     is( $I0, 100, 'set/get_intval_keyed_str' )
150     $N0 = $P0['bar']
151     is( $N0, 1.11, 'set/get_number_keyed_str' )
153     $S0 = $P0['baz']
154     is( $S0, '2.22', 'set/get_string_keyed_str' )
156     $P2 = $P0['qux']
157     is( $P2, 3.33, 'set/get_pmc_keyed_str' )
159     $P1 = getattribute $P0, 'named'
160     $I0 = elements $P1
161     is( $I0, 4, 'elements after set_*_keyed' )
162 .end
164 .sub 'test_exists'
165     $P0        = new [ 'CallContext' ]
167     $P0[0]     = 111
168     $P0['foo'] = 100
170     $I0 = exists $P0[0]
171     ok( $I0, 'exists_keyed_int' )
173     $I0 = exists $P0['foo']
174     ok( $I0, 'exists_keyed_str' )
176     $I0 = exists $P0[100]
177     nok( $I0, 'exists_keyed_int -- non-existant' )
179     $I0 = exists $P0['bar']
180     nok( $I0, 'exists_keyed_str -- non-existant' )
181 .end
183 .sub 'test_clone'
184     $P0 = new ['CallContext']
185     $P0[0] = 42
186     $P0[1] = "Hello Parrot"
187     $P0['floatval'] = 3.14159
189     $P1 = clone $P0
191     $I2 = $P1[0]
192     is($I2, 42, 'clone - integer positional cloned')
193     $S2 = $P1[1]
194     is($S2, "Hello Parrot", 'clone - string positional cloned')
195     $N2 = $P1['floatval']
196     is($N2, 3.14159, 'clone - named number cloned')
197 .end
199 .sub 'test_shift_access'
200     $P0 = new ['CallContext']
201     $P1 = new [ 'String' ]
202     $P1 = 'derF'
204     unshift $P0, $P1
206     $S1 = shift $P0
207     is($S1, 'derF', 'shift should convert to proper type (PMC -> STRING)')
209     unshift $P0, $P1
210     $P2 = shift $P0
212     is($P2, 'derF', '... but not convert when unneccesary')
213     $I0 = issame $P1, $P2
214     ok($I0, '... returning the same item' )
216     # no unshift_string for now
217     $P0[0] = 'Fred'
219     $P2 = shift $P0
220     is($P2, 'Fred', 'shift should convert to proper type (STRING -> PMC)')
222     $P0[0] = 'Fred'
223     $S2 = shift $P0
225     is($S2, 'Fred', '... but not convert when unnecessary')
226 .end
228 # Local Variables:
229 #   mode: pir
230 #   fill-column: 100
231 # End:
232 # vim: expandtab shiftwidth=4 ft=pir: