fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / parrotobject.t
blobd8edee84c5de3a484fc94d696e6b2bb7a76b1964
1 #!perl
2 # Copyright (C) 2006-2008, Parrot Foundation.
3 # $Id$
5 use strict;
6 use warnings;
7 use lib qw( . lib ../lib ../../lib );
8 use Test::More;
9 use Parrot::Test tests => 11;
11 =head1 NAME
13 t/pmc/parrotobject.t - test the Object PMC
16 =head1 SYNOPSIS
18     % prove t/pmc/parrotobject.t
20 =head1 DESCRIPTION
22 Tests the Object PMC.
24 =cut
26 pir_error_output_like( <<'CODE', <<'OUT', 'new' );
27 .sub 'test' :main
28     new $P0, ['Object']
29     print "ok 1\n"
30 .end
31 CODE
32 /Object must be created by a class./
33 OUT
35 # '
37 pir_output_is( <<'CODE', <<'OUT', ':vtable override' );
38 .sub main :main
39    $P0 = newclass [ "Test" ]
40    $P1 = new [ "Test" ]
41    $I1 = $P1[11]
42    print $I1
43    print "\n"
44 .end
46 .namespace [ "Test" ]
48 .sub get_integer_keyed_int :method :vtable
49    .param int key
50    .return(42)
51 .end
52 CODE
54 OUT
56 # '
58 pir_output_is( <<'CODE', <<'OUT', ':vtable("...") override' );
59 .sub main :main
60     $P0 = newclass [ "Test" ]
61     $P1 = new [ "Test" ]
62     $S1 = $P1[11]
63     print $S1
64     print "\n"
65 .end
67 .namespace [ "Test" ]
69 .sub monkey :method :vtable("get_string_keyed_int")
70     .param int key
71     .return("monkey")
72 .end
73 CODE
74 monkey
75 OUT
77 # '
79 pir_error_output_like( <<'CODE', <<'OUT', ':vtable with bad name' );
80 .namespace [ "Test" ]
82 .sub monkey :method :vtable("not_in_the_vtable")
83     .param int key
84     .return("monkey")
85 .end
86 CODE
87 /'not_in_the_vtable' is not a vtable, but was used with :vtable/
88 OUT
90 # '
92 pir_output_is( <<'CODE', <<'OUT', ':vtable and init' );
93 .sub main :main
94    $P0 = newclass [ "Test" ]
95    $P1 = new [ "Test" ]
96    print "ok\n"
97 .end
99 .namespace [ "Test" ]
101 .sub init :method :vtable
102    print "init\n"
103 .end
104 CODE
105 init
109 # '
111 pir_output_is( <<'CODE', <<'OUT', ':vtable inheritance' );
112 .sub main :main
113    $P0 = newclass [ "Test" ]
114    $P1 = newclass [ "Test2" ]
115    addparent $P1, $P0
116    $P2 = new [ "Test2" ]
117    $P3 = clone $P2
118    print "ok\n"
119 .end
121 .namespace [ "Test" ]
123 .sub clone :method :vtable
124    print "cloned\n"
125 .end
127 .namespace [ "Test2" ]
128 CODE
129 cloned
133 # '
135 pir_output_is( <<'CODE', <<'OUT', ':vtable inheritance from core classes' );
136 .sub main :main
137     $P0 = subclass 'Hash', 'Foo'
138     $P0 = subclass 'Hash', 'Bar'
140     $P1 = new ['Foo']
141     $S1 = $P1
142     say $S1
144     $P1 = new ['Bar']
145     $S1 = $P1
146     say $S1
147 .end
150 .namespace [ 'Foo' ]
152 .sub 'get_string' :vtable :method
153     .return('Foo::get_string')
154 .end
157 .namespace [ 'Bar' ]
159 .sub 'get_string' :vtable :method
160     .return('Bar::get_string')
161 .end
162 CODE
163 Foo::get_string
164 Bar::get_string
167 # assign opcode in inherited classes
168 pir_output_is(
169     <<'CODE', <<'OUT', 'assign opcode in inherited classes' );
170 .sub main :main
171     $P1 = new ['ResizablePMCArray']
172     push $P1, 3
173     $P2 = new ['ResizablePMCArray']
174     assign $P2, $P1
175     $I0 = elements $P2
176     print $I0
177     print "\n"
179     $P99 = subclass 'ResizablePMCArray', 'Perl6List'
180     $P1 = new 'Perl6List'
181     push $P1, 3
182     $P2 = new 'Perl6List'
183     assign $P2, $P1
184     $I0 = elements $P2
185     print $I0
186     print "\n"
187 .end
188 CODE
193 pir_output_is( <<'CODE', <<'OUT', 'Execution ends after returning from invoke' );
194 .namespace ['Foo']
196 .sub invoke :vtable
197 say "you invoked me!"
198 .return()
199 .end
201 .sub main :main
202 $P0 = newclass "Foo"
203 $P1 = new ['Foo']
204 $P1($P1)   # pass the object it"self"
205 say "got here"
206 .end
207 CODE
208 you invoked me!
209 got here
212 pir_output_is( <<'CODE', <<'OUT', 'params/returns from overridden invoke' );
213 .namespace ['Foo']
215 .sub invoke :vtable
216   .param int a
217   print a
218   print "\n"
219   inc a
220   .return(a)
221 .end
223 .sub main :main
224   $P0 = newclass "Foo"
225   $P1 = new ['Foo']
226   $I0 = $P1($P1, 2) # pass the object it"self"
227   print $I0
228   print "\n"
229 .end
230 CODE
235 pir_error_output_like( <<'CODE', <<'OUT', 'handle too few positional arguments' );
236 .namespace ['Foo']
238 .sub invoke :vtable
239   .param pmc a
240   say 'hi'
241 .end
243 .sub main :main
244     $P0 = newclass "Foo"
245     $P1 = new ['Foo']
246     $P1()
247 .end
248 CODE
249 /too few positional arguments/
252 # '
254 # Local Variables:
255 #   mode: cperl
256 #   cperl-indent-level: 4
257 #   fill-column: 100
258 # End:
259 # vim: expandtab shiftwidth=4: