summaryrefslogtreecommitdiff
path: root/Zend/tests
diff options
context:
space:
mode:
Diffstat (limited to 'Zend/tests')
-rw-r--r--Zend/tests/bug26698.phpt8
-rw-r--r--Zend/tests/bug28444.phpt12
-rw-r--r--Zend/tests/bug60598.phpt4
-rw-r--r--Zend/tests/object_types/invalid_default_value.phpt10
-rw-r--r--Zend/tests/object_types/missing_return_type_inheritance_in_class.phpt15
-rw-r--r--Zend/tests/object_types/missing_return_type_inheritance_in_interface.phpt15
-rw-r--r--Zend/tests/object_types/return_type_in_class.phpt26
-rw-r--r--Zend/tests/object_types/return_type_in_function.phpt16
-rw-r--r--Zend/tests/object_types/return_type_inheritance_in_class.phpt26
-rw-r--r--Zend/tests/object_types/return_type_inheritance_in_interface.phpt26
-rw-r--r--Zend/tests/object_types/return_type_reflection.phpt31
-rw-r--r--Zend/tests/object_types/type_hint_in_class_method.phpt19
-rw-r--r--Zend/tests/object_types/type_hint_in_function.phpt17
-rw-r--r--Zend/tests/object_types/type_hint_reflection.phpt31
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