fix codetest failure - ASSERT_ARGS does not have a ; after and
[parrot.git] / t / oo / methods.t
blob7f4ea7ba84e03bd9589ebaed766c47883e363333
1 #!./parrot
2 # Copyright (C) 2007-2010, Parrot Foundation.
3 # $Id$
5 =head1 NAME
7 t/oo/methods.t - Test OO methods
9 =head1 SYNOPSIS
11     % prove t/oo/methods.t
13 =head1 DESCRIPTION
15 Tests features related to the creation, addition, and execution of OO methods.
17 =cut
19 .const string library_file = "method_library.pir"
21 .sub main :main
22     .include 'test_more.pir'
24     create_library()
26     plan(6)
28     loading_methods_from_file()
29     loading_methods_from_eval()
30     overridden_find_method()
32     overridden_core_pmc()
34     try_delete_library()
36 .end
38 .sub create_library
39     .local pmc file
41     file = new ['FileHandle']
42     file.'open'(library_file, 'w')
44     $S0 = <<'END'
45     .namespace['Foo']
46     .sub 'bar_method' :method
47         .return (1)
48     .end
49 END
51     print file, $S0
52     file.'close'()
54 .end
56 .sub try_delete_library
57     .local pmc os
58     $P0 = loadlib 'os'
59     unless $P0 goto no_os
60     os = new 'OS'
61     os.'rm'(library_file)
62     .return ()
64   no_os:
65     $S1 = concat "WARNING: could not delete test file `", library_file
66     $S1 = concat $S1, "' because the OS PMC is unavailable"
67     diag($S1)
68 .end
70 .sub loading_methods_from_file
71     $P0 = newclass 'Foo'
72     $P1 = new 'Foo'
73     $I0 = $P1.'foo_method'()
74     ok ($I0, 'calling foo_method')
76     load_bytecode library_file
77     $P1 = new 'Foo'
78     $I0 = $P1.'bar_method'()
79     ok ($I0, 'calling bar_method')
80     $P0 = null
81 .end
83 .namespace ['Foo']
84 .sub 'foo_method' :method
85     .return (1)
86 .end
87 .namespace []
89 .sub loading_methods_from_eval
90     $P0 = newclass 'Bar'
91     $P1 = new 'Bar'
93     $I0 = $P1.'foo_method'()
94     ok ($I0, 'calling foo_method')
96     $S2 = <<'END'
97         .namespace ['Bar']
98         .sub 'bar_method' :method
99             .return (1)
100         .end
102     $P2 = compreg 'PIR'
103     $P2($S2)
105     $P1 = new 'Bar'
106     $I0 = $P1.'bar_method'()
107     ok ($I0, 'calling bar_method')
108 .end
110 .namespace ['Bar']
111 .sub 'foo_method' :method
112     .return (1)
113 .end
114 .namespace []
116 .sub overridden_find_method
117     $P0 = newclass 'Obj'
118     $P2 = new 'Obj'
119     $I0 = $P2.'some_method'(42)
120     is ($I0, 42, 'calling overriden method')
121 .end
123 .namespace ['Obj']
125 .sub 'meth' :method
126     .param pmc a
127     .return (a)
128 .end
130 .sub 'find_method' :vtable :method
131     .param string meth_name
133     .const 'Sub' meth = 'meth'
134     .return (meth)
135 .end
137 .namespace []
139 .sub 'overridden_core_pmc'
140     .local string msg
141     msg = "able to invoke overridden method on core PMC (TT #1596)"
142     $P0 = new 'ResizablePMCArray'
143     $I0 = $P0.'foo'()
144     is($I0, 1, msg)
145     .return()
146 .end
148 .namespace ['ResizablePMCArray']
149 .sub 'foo' :method
150     .return(1)
151 .end
153 # Local Variables:
154 #   mode: pir
155 #   fill-column: 100
156 # End:
157 # vim: expandtab shiftwidth=4 ft=pir: