Skip to content

Commit 4fc91b2

Browse files
committed
add and update tests
1 parent 700684a commit 4fc91b2

8 files changed

+208
-1
lines changed

ext/reflection/tests/ReflectionClass_toString_001.phpt

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ Class [ <internal:Reflection> class ReflectionClass implements Stringable, Refle
3030
Property [ public string $name ]
3131
}
3232

33-
- Methods [64] {
33+
- Methods [68] {
3434
Method [ <internal:Reflection> private method __clone ] {
3535

3636
- Parameters [0] {
@@ -514,5 +514,33 @@ Class [ <internal:Reflection> class ReflectionClass implements Stringable, Refle
514514
}
515515
- Return [ array ]
516516
}
517+
518+
Method [ <internal:Reflection> public method isInnerClass ] {
519+
520+
- Parameters [0] {
521+
}
522+
- Return [ bool ]
523+
}
524+
525+
Method [ <internal:Reflection> public method isPrivate ] {
526+
527+
- Parameters [0] {
528+
}
529+
- Return [ bool ]
530+
}
531+
532+
Method [ <internal:Reflection> public method isPublic ] {
533+
534+
- Parameters [0] {
535+
}
536+
- Return [ bool ]
537+
}
538+
539+
Method [ <internal:Reflection> public method isProtected ] {
540+
541+
- Parameters [0] {
542+
}
543+
- Return [ bool ]
544+
}
517545
}
518546
}
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
--TEST--
2+
ensure private autoloading works
3+
--FILE--
4+
<?php
5+
spl_autoload_register(static function ($class_name) {
6+
require_once(__DIR__ . '/' . explode('\\', $class_name)[0] . '.inc');
7+
echo 'autoload(' . $class_name . ")\n";
8+
});
9+
10+
$line = new inner_classes\Line();
11+
var_dump($line);
12+
?>
13+
--EXPECTF--
14+
autoload(inner_classes\Line)
15+
16+
Fatal error: Uncaught Error: Cannot instantiate class inner_classes\Line from the global scope in %s:%d
17+
Stack trace:
18+
#0 {main}
19+
thrown in %s on line %d
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
--TEST--
2+
test return types
3+
--FILE--
4+
<?php
5+
6+
class Outer {
7+
class Inner {
8+
public static function test(): Outer\Inner {
9+
return new Outer\Inner();
10+
}
11+
}
12+
}
13+
14+
var_dump(Outer\Inner::test());
15+
?>
16+
--EXPECT--
17+
object(Outer\Inner)#1 (0) {
18+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
--TEST--
2+
private inner class
3+
--FILE--
4+
<?php
5+
6+
class Outer {
7+
private class Inner {}
8+
9+
private function getInner(): Inner {
10+
return new Inner();
11+
}
12+
13+
public function getInner2(): mixed {
14+
return $this->getInner();
15+
}
16+
}
17+
18+
class Foo extends Outer {
19+
public function getInner(): Outer\Inner {
20+
var_dump(parent::getInner2());
21+
return new Outer\Inner();
22+
}
23+
}
24+
25+
$outer = new Foo();
26+
var_dump($outer->getInner());
27+
?>
28+
--EXPECTF--
29+
object(Outer\Inner)#2 (0) {
30+
}
31+
32+
Fatal error: Uncaught Error: Cannot instantiate private class Outer\Inner from Foo in %s:%d
33+
Stack trace:
34+
#0 %s(%d): Foo->getInner()
35+
#1 {main}
36+
thrown in %s on line %d
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
--TEST--
2+
protected inner class
3+
--FILE--
4+
<?php
5+
6+
class Outer {
7+
protected class Inner {}
8+
9+
protected function getInner(): Inner {
10+
return new Inner();
11+
}
12+
}
13+
14+
class Foo extends Outer {
15+
public function getInner(): Outer\Inner {
16+
var_dump(parent::getInner());
17+
return new Outer\Inner();
18+
}
19+
}
20+
21+
$outer = new Foo();
22+
var_dump($outer->getInner());
23+
var_dump(new Outer\Inner());
24+
?>
25+
--EXPECTF--
26+
object(Outer\Inner)#2 (0) {
27+
}
28+
29+
Fatal error: Uncaught TypeError: Public method getInner cannot return protected class Outer\Inner in %s:%d
30+
Stack trace:
31+
#0 %s(%d): Foo->getInner()
32+
#1 {main}
33+
thrown in %s on line %d
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
private return types
3+
--FILE--
4+
<?php
5+
6+
class Outer {
7+
private class Inner {}
8+
9+
public static function getInner(): Inner {
10+
return new Inner();
11+
}
12+
}
13+
14+
$r = Outer::getInner();
15+
function test($r): Outer\Inner {
16+
return $r;
17+
}
18+
var_dump($r);
19+
test($r);
20+
?>
21+
--EXPECTF--
22+
Fatal error: Uncaught TypeError: Public method getInner cannot return private class Outer\Inner in %s:%d
23+
Stack trace:
24+
#0 %s(%d): Outer::getInner()
25+
#1 {main}
26+
thrown in %s on line %d
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
--TEST--
2+
protected return types
3+
--FILE--
4+
<?php
5+
6+
class Outer {
7+
protected class Inner {}
8+
9+
public static function getInner(): Inner {
10+
return new Inner();
11+
}
12+
}
13+
14+
$r = Outer::getInner();
15+
function test($r): Outer\Inner {
16+
return $r;
17+
}
18+
var_dump($r);
19+
test($r);
20+
?>
21+
--EXPECTF--
22+
Fatal error: Uncaught TypeError: Public method getInner cannot return protected class Outer\Inner in %s:%d
23+
Stack trace:
24+
#0 %s(%d): Outer::getInner()
25+
#1 {main}
26+
thrown in %s on line %d
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
--TEST--
2+
returning private inner from inner method
3+
--FILE--
4+
<?php
5+
6+
class Outer {
7+
private class PrivateInner {
8+
public function test() {
9+
return new PrivateInner();
10+
}
11+
}
12+
13+
public function test(): mixed { return new PrivateInner()->test(); }
14+
}
15+
16+
$foo = new Outer()->test();
17+
var_dump($foo);
18+
?>
19+
--EXPECT--
20+
object(Outer\PrivateInner)#3 (0) {
21+
}

0 commit comments

Comments
 (0)