fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / pmc / namespace-subs.t
blob19ee5dec915e055389a3ddf906733267a7a1ab91
1 #!./parrot
2 # Copyright (C) 2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/pmc/namepspace-subs.t - test NameSpace PMC
9 =head1 SYNOPSIS
11     % prove t/pmc/namespace-subs.t
13 =head1 DESCRIPTION
15 Tests subroutines stored in the NameSpace PMC, specifically focusing on the
16 specified behavior for :method, :vtable, :nsentry, and :anon.
18 =cut
20 .namespace []
22 .sub 'main' :main
23     .include 'test_more.pir'
24     plan(17)
25     anon_sub_and_method()
26     anon_vtable()
27     store_method()
28     store_nsentry()
29     store_multisub()
30 .end
33 # Subs marked with :anon should not be stored in the namespace. Methods marked
34 # with :anon should not be stored in the class.
36 .sub 'anon_sub_and_method'
37     $P2 = get_hll_global ['AnonTest'], 'anonsub'
38     is_null($P2, "Anon sub not stored in namespace")
40     $P0 = newclass 'AnonTest'
41     $P1 = new 'AnonTest'
43     push_eh method_not_in_namespace
44     $I1 = $P1.'anonmethod'()
45     ok(0, "Anon method not stored in class")
46     pop_eh
47     goto failed
48   method_not_in_namespace:
49     ok(1, "Anon method not stored in class")
50   failed:
52     $P2 = get_hll_global ['AnonTest'], 'anonmethod'
53     is_null($P2, "Anon method not stored in namespace")
55 .end
57 # Vtable overrides marked with :anon should be stored in the class anyway. See
58 # RT #44471
59 .sub 'anon_vtable'
60     $P1 = new 'AnonTest'
62     $I0 = $P1
63     is($I0, 414, "Anon vtable override stored in class")
64 .end
67 # Methods should not be stored in the namespace. See TT #389.
68 .sub 'store_method'
69     $P0 = newclass 'MethodTest'
70     $P1 = new 'MethodTest'
72     $I1 = $P1.'methodtest'()
73     is($I1, 75, "Invoked stored method")
75     $P2 = get_hll_global ['MethodTest'], 'methodtest'
76     is_null($P2, "Method not stored in namespace")
77 .end
79 .sub 'store_nsentry'
80     $P0 = newclass 'NsentryTest'
81     $P1 = new 'NsentryTest'
83     $I1 = $P1.'nsentrymethodtest'()
84     is($I1, 63, "Invoked nsentry method")
86     $P2 = get_hll_global ['NsentryTest'], 'renamedmethod'
87     isa_ok($P2, "Sub", "Nsentry method stored in namespace")
89     $I2 = $P1.$P2()
90     is($I2, 63, "Invoked nsentry method from namespace")
92     $P3 = get_hll_global ['NsentryTest'], 'renamedsub'
93     isa_ok($P3, "Sub", "Nsentry sub stored in namespace")
95     $I3 = $P3()
96     is($I3, 36, "Invoked nsentry sub from namespace")
98     $P4 = get_hll_global ['NsentryTest'], 'renamedvtable'
99     isa_ok($P4, "Sub", "Nsentry vtable stored in namespace")
101     $I4 = $P4()
102     is($I4, 363, "Invoked nsentry vtable from namespace")
103 .end
105 .sub 'store_multisub'
106     $P1 = get_hll_global ['MultiSubTest'], 'multisubtest'
107     isa_ok($P1, "MultiSub", "Multi sub stored in namespace")
109     $S1 = $P1(7)
110     is($S1, "called int variant", "Multi sub int stored in namespace")
112     $S2 = $P1('foo')
113     is($S2, "called string variant", "Multi sub string stored in namespace")
115     $S3 = $P1(5.5)
116     is($S3, "called num variant", "Anon multi sub num stored in namespace")
118 .end
120 .namespace ['AnonTest']
121 .sub 'anonsub' :anon
122     .return(14)
123 .end
125 .sub 'anonmethod' :anon :method
126     .return(41)
127 .end
129 .sub 'get_integer' :anon :vtable
130     .return(414)
131 .end
134 .namespace ['MethodTest']
135 .sub 'methodtest' :method
136     .return(75)
137 .end
139 .namespace ['NsentryTest']
140 .sub 'nsentrymethodtest' :method :nsentry('renamedmethod')
141     .return(63)
142 .end
143 .sub 'nsentrysubtest' :nsentry('renamedsub')
144     .return(36)
145 .end
146 .sub 'nsentryvtabletest' :nsentry('renamedvtable')
147     .return(363)
148 .end
150 .namespace ['MultiSubTest']
151 .sub 'multisubtest' :multi(int)
152    .return("called int variant")
153 .end
154 .sub 'multisubtest' :multi(string)
155    .return("called string variant")
156 .end
157 .sub 'multisubtest' :anon :multi(num)
158    .return("called num variant")
159 .end
162 # Local Variables:
163 #   mode: pir
164 #   fill-column: 100
165 # End:
166 # vim: expandtab shiftwidth=4 ft=pir: