diff options
Diffstat (limited to 'Zend/tests')
-rw-r--r-- | Zend/tests/bug26698.phpt | 8 | ||||
-rw-r--r-- | Zend/tests/bug28444.phpt | 12 | ||||
-rw-r--r-- | Zend/tests/bug60598.phpt | 4 | ||||
-rw-r--r-- | Zend/tests/object_types/invalid_default_value.phpt | 10 | ||||
-rw-r--r-- | Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt | 15 | ||||
-rw-r--r-- | Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt | 15 | ||||
-rw-r--r-- | Zend/tests/object_types/return_type_in_class.phpt | 26 | ||||
-rw-r--r-- | Zend/tests/object_types/return_type_in_function.phpt | 16 | ||||
-rw-r--r-- | Zend/tests/object_types/return_type_inheritance_in_class.phpt | 26 | ||||
-rw-r--r-- | Zend/tests/object_types/return_type_inheritance_in_interface.phpt | 26 | ||||
-rw-r--r-- | Zend/tests/object_types/return_type_reflection.phpt | 31 | ||||
-rw-r--r-- | Zend/tests/object_types/type_hint_in_class_method.phpt | 19 | ||||
-rw-r--r-- | Zend/tests/object_types/type_hint_in_function.phpt | 17 | ||||
-rw-r--r-- | Zend/tests/object_types/type_hint_reflection.phpt | 31 |
14 files changed, 244 insertions, 12 deletions
diff --git a/Zend/tests/bug26698.phpt b/Zend/tests/bug26698.phpt index aecc708a0d..a4d6ad13f8 100644 --- a/Zend/tests/bug26698.phpt +++ b/Zend/tests/bug26698.phpt @@ -5,7 +5,7 @@ Bug #26698 (Thrown exceptions while evaluting argument to pass as parameter cras ini_set("report_memleaks", 0); // the exception thrown in this test results in a memory leak, which is fine -class Object +class ObjectOne { function getNone() { @@ -23,7 +23,7 @@ class Proxy { try { - $res = new Object(); + $res = new ObjectOne(); $this->three($res->getNone()); } catch(Exception $e) @@ -36,7 +36,7 @@ class Proxy { try { - $res = new Object(); + $res = new ObjectOne(); $this->three(1, $res->getNone()); } catch(Exception $e) @@ -49,7 +49,7 @@ class Proxy { try { - $res = new Object(); + $res = new ObjectOne(); $this->three(1, 2, $res->getNone()); } catch(Exception $e) diff --git a/Zend/tests/bug28444.phpt b/Zend/tests/bug28444.phpt index 78c08d2fc6..b7e863da92 100644 --- a/Zend/tests/bug28444.phpt +++ b/Zend/tests/bug28444.phpt @@ -9,7 +9,7 @@ function my_error_handler($errno, $errstr, $errfile, $errline) { set_error_handler('my_error_handler'); -class Object +class ObjectOne { public $x; @@ -26,7 +26,7 @@ class Overloaded function __construct($x) { - $this->x = new Object($x); + $this->x = new ObjectOne($x); } function __get($prop) @@ -47,7 +47,7 @@ var_dump($y->x->x); var_dump($y->x->x = 3); var_dump($y->y = 3); var_dump($y->y); -var_dump($y->z = new Object(4)); +var_dump($y->z = new ObjectOne(4)); var_dump($y->z->x); $t = $y->z; var_dump($t->x = 5); @@ -56,7 +56,7 @@ var_dump($y->z->x = 6); ?> ===DONE=== --EXPECTF-- -object(Object)#%d (1) { +object(ObjectOne)#%d (1) { ["x"]=> int(2) } @@ -66,9 +66,9 @@ Overloaded::__set(y,3) int(3) Overloaded::__get(y) int(3) -string(55) "Object of class Object could not be converted to string" +string(58) "Object of class ObjectOne could not be converted to string" Overloaded::__set(z,) -object(Object)#%d (1) { +object(ObjectOne)#%d (1) { ["x"]=> int(4) } diff --git a/Zend/tests/bug60598.phpt b/Zend/tests/bug60598.phpt index eeee75a19d..143ac79504 100644 --- a/Zend/tests/bug60598.phpt +++ b/Zend/tests/bug60598.phpt @@ -6,7 +6,7 @@ define('OBJECT_COUNT', 10000); $containers = array(); -class Object { +class ObjectOne { protected $_guid = 0; public function __construct() { global $containers; @@ -20,7 +20,7 @@ class Object { } for ($i = 0; $i < OBJECT_COUNT; ++$i) { - new Object(); + new ObjectOne(); } // You probably won't see this because of the "zend_mm_heap corrupted" diff --git a/Zend/tests/object_types/invalid_default_value.phpt b/Zend/tests/object_types/invalid_default_value.phpt new file mode 100644 index 0000000000..7317c5f2b5 --- /dev/null +++ b/Zend/tests/object_types/invalid_default_value.phpt @@ -0,0 +1,10 @@ +--TEST-- +Object type can only default to null +--FILE-- +<?php + +function test(object $obj = 42) { } + +?> +--EXPECTF-- +Fatal error: Default value for parameters with a object type can only be NULL in %s on line %d diff --git a/Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt b/Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt new file mode 100644 index 0000000000..138ae1f5b5 --- /dev/null +++ b/Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt @@ -0,0 +1,15 @@ +--TEST-- +Missing class method a object return type during inheritance +--FILE-- +<?php + +class One { + public function a() : object {} +} + +class Two extends One { + public function a() {} +} + +--EXPECTF-- +Fatal error: Declaration of Two::a() must be compatible with One::a(): object in %s on line 9
\ No newline at end of file diff --git a/Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt b/Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt new file mode 100644 index 0000000000..af9032949c --- /dev/null +++ b/Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt @@ -0,0 +1,15 @@ +--TEST-- +Missing interface method a object return type during inheritance +--FILE-- +<?php + +interface One { + public function a() : object; +} + +interface Two extends One { + public function a(); +} + +--EXPECTF-- +Fatal error: Declaration of Two::a() must be compatible with One::a(): object in %s on line %d diff --git a/Zend/tests/object_types/return_type_in_class.phpt b/Zend/tests/object_types/return_type_in_class.phpt new file mode 100644 index 0000000000..2d0f771106 --- /dev/null +++ b/Zend/tests/object_types/return_type_in_class.phpt @@ -0,0 +1,26 @@ +--TEST-- +Adding a class method object return type +--FILE-- +<?php + +interface One { + public function a() : object; +} + +class Two implements One { + public function a() : object {} +} + +$three = new class extends Two { + public function a() : object { + return 12345; + } +}; +$three->a(); +--EXPECTF-- + +Fatal error: Uncaught TypeError: Return value of class@anonymous::a() must be an object, integer returned in %s:13 +Stack trace: +#0 %s(16): class@anonymous->a() +#1 {main} + thrown in %s on line 13 diff --git a/Zend/tests/object_types/return_type_in_function.phpt b/Zend/tests/object_types/return_type_in_function.phpt new file mode 100644 index 0000000000..e8ae75f490 --- /dev/null +++ b/Zend/tests/object_types/return_type_in_function.phpt @@ -0,0 +1,16 @@ +--TEST-- +Adding a function object return type +--FILE-- +<?php + +function a() : object { + return 12345; +} +a(); +--EXPECTF-- + +Fatal error: Uncaught TypeError: Return value of a() must be an object, integer returned in %s:4 +Stack trace: +#0 %s(6): a() +#1 {main} + thrown in %s on line 4
\ No newline at end of file diff --git a/Zend/tests/object_types/return_type_inheritance_in_class.phpt b/Zend/tests/object_types/return_type_inheritance_in_class.phpt new file mode 100644 index 0000000000..152c4f95d0 --- /dev/null +++ b/Zend/tests/object_types/return_type_inheritance_in_class.phpt @@ -0,0 +1,26 @@ +--TEST-- +Adding class method a object return type during inheritance is allowed +--FILE-- +<?php + +class One { + public function a() {} +} + +class Two extends One { + public function a() : object {} +} + +$three = new class extends Two { + public function a() : object { + return 12345; + } +}; +$three->a(); + +--EXPECTF-- +Fatal error: Uncaught TypeError: Return value of class@anonymous::a() must be an object, integer returned in %s:13 +Stack trace: +#0 %s(16): class@anonymous->a() +#1 {main} + thrown in /%s on line 13 diff --git a/Zend/tests/object_types/return_type_inheritance_in_interface.phpt b/Zend/tests/object_types/return_type_inheritance_in_interface.phpt new file mode 100644 index 0000000000..2631ec8918 --- /dev/null +++ b/Zend/tests/object_types/return_type_inheritance_in_interface.phpt @@ -0,0 +1,26 @@ +--TEST-- +Adding interface method a object return type during inheritance is allowed +--FILE-- +<?php + +interface One { + public function a(); +} + +interface Two extends One { + public function a() : object; +} + +$three = new class implements Two { + public function a() : object { + return 12345; + } +}; +$three->a(); + +--EXPECTF-- +Fatal error: Uncaught TypeError: Return value of class@anonymous::a() must be an object, integer returned in %s:13 +Stack trace: +#0 %s(16): class@anonymous->a() +#1 {main} + thrown in /%s on line 13 diff --git a/Zend/tests/object_types/return_type_reflection.phpt b/Zend/tests/object_types/return_type_reflection.phpt new file mode 100644 index 0000000000..461199febe --- /dev/null +++ b/Zend/tests/object_types/return_type_reflection.phpt @@ -0,0 +1,31 @@ +--TEST-- +Reflecting object return type +--FILE-- +<?php + +interface One { + public function a() : object; +} + +class Two implements One { + public function a() : object {} +} + +function a() : object {} + +$returnTypeOne = (new ReflectionClass(One::class))->getMethod('a')->getReturnType(); +var_dump($returnTypeOne->isBuiltin(), (string)$returnTypeOne); + +$returnTypeTwo = (new ReflectionClass(Two::class))->getMethod('a')->getReturnType(); +var_dump($returnTypeTwo->isBuiltin(), (string)$returnTypeTwo); + +$returnTypea = (new ReflectionFunction('a'))->getReturnType(); +var_dump($returnTypea->isBuiltin(), (string)$returnTypea); + +--EXPECTF-- +bool(true) +string(6) "object" +bool(true) +string(6) "object" +bool(true) +string(6) "object"
\ No newline at end of file diff --git a/Zend/tests/object_types/type_hint_in_class_method.phpt b/Zend/tests/object_types/type_hint_in_class_method.phpt new file mode 100644 index 0000000000..e41caa0e70 --- /dev/null +++ b/Zend/tests/object_types/type_hint_in_class_method.phpt @@ -0,0 +1,19 @@ +--TEST-- +Adding a class method object type hint +--FILE-- +<?php + +class One { + public function a(object $obj) {} +} + +$one = new One(); +$one->a(new One()); +$one->a(123); +--EXPECTF-- + +Fatal error: Uncaught TypeError: Argument 1 passed to One::a() must be an object, integer given, called in %s:4 +Stack trace: +#0 %s(9): One->a(123) +#1 {main} + thrown in %s on line 4
\ No newline at end of file diff --git a/Zend/tests/object_types/type_hint_in_function.phpt b/Zend/tests/object_types/type_hint_in_function.phpt new file mode 100644 index 0000000000..917726ce2e --- /dev/null +++ b/Zend/tests/object_types/type_hint_in_function.phpt @@ -0,0 +1,17 @@ +--TEST-- +Adding a function object type hint +--FILE-- +<?php + +class A {} +function a(object $obj) {} + +a(new A()); +a(123); +--EXPECTF-- + +Fatal error: Uncaught TypeError: Argument 1 passed to a() must be an object, integer given, called in %s.php on line 7 and defined in %s:4 +Stack trace: +#0 %s(7): a(123) +#1 {main} + thrown in %s on line 4
\ No newline at end of file diff --git a/Zend/tests/object_types/type_hint_reflection.phpt b/Zend/tests/object_types/type_hint_reflection.phpt new file mode 100644 index 0000000000..8968e35d6c --- /dev/null +++ b/Zend/tests/object_types/type_hint_reflection.phpt @@ -0,0 +1,31 @@ +--TEST-- +Reflecting object type hint +--FILE-- +<?php + +interface One { + public function a(object $obj); +} + +class Two implements One { + public function a(object $obj) {} +} + +function a(object $obj) {} + +$typeHintOne = (new ReflectionClass(One::class))->getMethod('a')->getParameters()[0]->getType(); +var_dump($typeHintOne->isBuiltin(), (string)$typeHintOne); + +$typeHintTwo = (new ReflectionClass(Two::class))->getMethod('a')->getParameters()[0]->getType(); +var_dump($typeHintTwo->isBuiltin(), (string)$typeHintTwo); + +$typeHinta = (new ReflectionFunction('a'))->getParameters()[0]->getType(); +var_dump($typeHinta->isBuiltin(), (string)$typeHinta); + +--EXPECTF-- +bool(true) +string(6) "object" +bool(true) +string(6) "object" +bool(true) +string(6) "object"
\ No newline at end of file |