convert ***sort builtins to use inout instead of references
[hiphop-php.git] / hphp / test / slow / lang / reflection.php
blob64ae47b457dd0d6600d9890fc5a51e99c7ddd613
1 <?hh
3 print "Test begin\n";
5 const SOME_CONSTANT = "some string";
7 #===============================================================================
8 # ReflectionFunction.
10 class State { static $staticX = 4; }
12 /**
13 * This is f's doc comment.
15 function f($a, &$b, $c=null, $d=array(1, 2, SOME_CONSTANT)) {
16 print "In f()\n";
17 State::$staticX++;
18 $x = State::$staticX;
19 return $x;
22 $rf = new ReflectionFunction("f");
24 print "--- getDocComment(\"f\") ---\n";
25 var_dump($rf->getDocComment());
26 print "\n";
28 print "--- getStartLine(\"f\") ---\n";
29 var_dump($rf->getStartLine());
30 print "\n";
32 print "--- getEndLine(\"f\") ---\n";
33 var_dump($rf->getEndLine());
34 print "\n";
36 print "--- getFileName(\"f\") ---\n";
37 var_dump($rf->getFileName());
38 print "\n";
40 print "--- getName(\"f\") ---\n";
41 var_dump($rf->getName());
42 print "\n";
44 print "--- getNumberOfParameters(\"f\") ---\n";
45 var_dump($rf->getNumberOfParameters());
46 print "\n";
48 print "--- getNumberOfRequiredParameters(\"f\") ---\n";
49 var_dump($rf->getNumberOfRequiredParameters());
50 print "\n";
52 print "--- getParameters(\"f\") ---\n";
53 var_dump($rf->getParameters());
54 print "\n";
60 print "--- isInternal(\"f\") ---\n";
61 var_dump($rf->isInternal());
62 print "\n";
64 print "--- isUserDefined(\"f\") ---\n";
65 var_dump($rf->isUserDefined());
66 print "\n";
68 print "--- export(\"f\") ---\n";
69 var_dump(ReflectionFunction::export('f', true));
70 print "\n";
85 /**
86 * This is g's doc comment.
88 function g($a=null, $b=array(1, 2, 3), $c=SOME_CONSTANT) {
89 print "In g($a, $b, $c)\n";
92 $rg = new ReflectionFunction("g");
94 print "--- invoke(\"g\") ---\n";
95 var_dump($rg->invoke("a", "b"));
96 var_dump($rg->invoke("a", "b"));
97 print "\n";
99 print "--- export(\"g\") ---\n";
100 var_dump(ReflectionFunction::export('g', true));
101 print "\n";
103 #===============================================================================
104 # ReflectionClass.
106 interface H {
107 public function methH();
109 interface I {
110 public function methI();
112 interface J {
113 public function methJ();
115 interface K extends I, J {
116 public function methK();
118 interface L {}
120 class A implements H {
121 public function methH() {}
122 protected function methA() {}
125 * This is B's doc comment.
127 class B extends A implements I, K {
128 const C0 = "B::C0";
129 const C1 = "B::C1";
130 static $s0 = 42;
131 static $s1 = "hello";
132 static $s2;
133 private $p0 = 1;
134 protected $p1 = 2;
135 public $p2 = 3;
136 public $p3;
137 static public function smethB0() {}
138 static private function smethB1() {}
139 public function methI() {}
140 public function methJ() {}
141 public function methK() {}
142 private function methB() {}
144 class C {}
146 $rb = new ReflectionClass("B");
148 print "--- export() ---\n";
149 var_dump(ReflectionClass::export('B', true));
150 print "\n";
152 print "--- getConstant() ---\n";
153 var_dump($rb->getConstant('C0'));
154 var_dump($rb->getConstant('C1'));
155 print "\n";
157 print "--- getConstants() ---\n";
158 var_dump($rb->getConstants());
159 print "\n";
161 print "--- getConstructor() ---\n";
162 var_dump($rb->getConstructor());
163 print "\n";
165 print "--- getDocComment() ---\n";
166 var_dump($rb->getDocComment());
167 print "\n";
169 print "--- getStartLine() ---\n";
170 var_dump($rb->getStartLine());
171 print "\n";
173 print "--- getEndLine() ---\n";
174 var_dump($rb->getEndLine());
175 print "\n";
177 print "--- getFileName() ---\n";
178 var_dump($rb->getFileName());
179 print "\n";
181 print "--- getInterfaceNames() ---\n";
182 var_dump($rb->getInterfaceNames());
183 print "\n";
185 print "--- getInterfaces() ---\n";
186 # Very verbose.
187 #var_dump(
188 $rb->getInterfaces()
191 print "\n";
193 print "--- getMethod() ---\n";
194 print "\n";
196 print "--- getMethods() ---\n";
197 # Very verbose.
198 #var_dump(
199 $rb->getMethods()
202 print "\n";
204 print "--- getModifiers() ---\n";
205 var_dump($rb->getModifiers());
206 print "\n";
208 print "--- getName() ---\n";
209 var_dump($rb->getName());
210 print "\n";
212 print "--- getParentClass() ---\n";
213 var_dump($rb->getParentClass());
214 var_dump($rb->getParentClass()->getName());
215 print "\n";
217 print "--- getProperties() ---\n";
218 # Very verbose.
219 #var_dump(
220 $rb->getProperties()
223 print "\n";
225 print "--- getProperty() ---\n";
226 # Very verbose.
227 #var_dump(
228 $rb->getProperty('p0')
231 print "\n";
233 print "--- getStaticProperties() ---\n";
234 # Very verbose.
235 #var_dump(
236 $rb->getStaticProperties()
239 print "\n";
241 print "--- setStaticPropertyValue() ---\n";
242 var_dump($rb->setStaticPropertyValue('s0', 'new value for s0'));
243 print "\n";
245 print "--- getStaticPropertyValue() ---\n";
246 var_dump($rb->getStaticPropertyValue('s0'));
247 var_dump($rb->getStaticPropertyValue('s2'));
248 print "\n";
250 print "--- hasConstant() ---\n";
251 var_dump($rb->hasConstant('C0'));
252 var_dump($rb->hasConstant('C4'));
253 print "\n";
255 print "--- hasMethod() ---\n";
256 var_dump($rb->hasMethod('methB'));
257 var_dump($rb->hasMethod('methX'));
258 print "\n";
260 print "--- hasProperty() ---\n";
261 var_dump($rb->hasProperty('p0'));
262 var_dump($rb->hasProperty('p4'));
263 print "\n";
265 print "--- implementsInterface() ---\n";
266 var_dump($rb->implementsInterface('H'));
267 var_dump($rb->implementsInterface('L'));
268 print "\n";
270 print "--- isAbstract() ---\n";
271 var_dump($rb->isAbstract());
272 print "\n";
274 print "--- isFinal() ---\n";
275 var_dump($rb->isFinal());
276 print "\n";
278 print "--- isInstance() ---\n";
279 var_dump($rb->isInstance(new B));
280 var_dump($rb->isInstance(new C));
281 print "\n";
283 print "--- isInstantiable() ---\n";
284 var_dump($rb->isInstantiable());
285 print "\n";
287 print "--- isInterface() ---\n";
288 var_dump($rb->isInterface());
289 print "\n";
291 print "--- isInternal() ---\n";
292 var_dump($rb->isInternal());
293 print "\n";
295 print "--- isIterateable() ---\n";
296 var_dump($rb->isIterateable());
297 print "\n";
299 print "--- isSubclassOf() ---\n";
300 var_dump($rb->isSubclassOf('A'));
301 var_dump($rb->isSubclassOf('C'));
302 print "\n";
304 print "--- isUserDefined() ---\n";
305 var_dump($rb->isUserDefined());
306 print "\n";
308 print "--- newInstance() ---\n";
309 var_dump($rb->newInstance());
310 print "\n";
312 print "--- newInstanceArgs() ---\n";
313 var_dump($rb->newInstanceArgs());
314 print "\n";
316 print "--- get_defined_functions() ---\n";
317 $a = get_defined_functions()["user"];
318 sort(inout $a);
319 var_dump($a);
321 print "--- get_defined_constants() ---\n";
322 $a = get_defined_constants();
323 print "SOME_CONSTANT: " . $a["SOME_CONSTANT"] . "\n";
324 if (isset($a["ANOTHER_CONSTANT"])) {
325 print "ANOTHER_CONSTANT: ".$a["ANOTHER_CONSTANT"]."\n";
327 const ANOTHER_CONSTANT ="some other string";
328 $a = get_defined_constants();
329 print "SOME_CONSTANT: " . $a["SOME_CONSTANT"] . "\n";
330 print "ANOTHER_CONSTANT: ".$a["ANOTHER_CONSTANT"]."\n";
332 print "--- get_declared_classes() ---\n";
333 $a = array_flip(get_declared_classes());
334 $classes = array("A", "B", "C");
335 foreach ($classes as $c) {
336 if (isset($a[$c])) {
337 print "Found class $c\n";
338 } else {
339 print "Missing class $c\n";
343 print "--- get_declared_interfaces() ---\n";
344 $a = array_flip(get_declared_interfaces());
345 $interfaces = array("H", "I", "J", "K", "L");
346 foreach ($interfaces as $i) {
347 if (isset($a[$i])) {
348 print "Found interface $i\n";
349 } else {
350 print "Missing interface $i\n";
354 print "Test end\n";