summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSammy Kaye Powers <sammyk@php.net>2020-10-23 13:38:42 -0700
committerSammy Kaye Powers <sammyk@php.net>2020-10-26 15:15:17 -0700
commit4a6932c0766f4fa94febad70801503146d714ab3 (patch)
tree39cff116f9d38b8ea91d1135a1821024a168a88f
parentba525a68d9a76f8b4c9109a7b9f75f796b84586c (diff)
downloadphp-git-4a6932c0766f4fa94febad70801503146d714ab3.tar.gz
Add missing observer tests
Closes GH-6378
-rw-r--r--ext/zend_test/tests/observer_call_user_func_01.phpt40
-rw-r--r--ext/zend_test/tests/observer_call_user_func_02.phpt40
-rw-r--r--ext/zend_test/tests/observer_call_user_func_03.phpt39
-rw-r--r--ext/zend_test/tests/observer_call_user_func_04.phpt39
-rw-r--r--ext/zend_test/tests/observer_generator_05.phpt53
-rw-r--r--ext/zend_test/tests/observer_types_01.phpt28
6 files changed, 239 insertions, 0 deletions
diff --git a/ext/zend_test/tests/observer_call_user_func_01.phpt b/ext/zend_test/tests/observer_call_user_func_01.phpt
new file mode 100644
index 0000000000..0f12fa6835
--- /dev/null
+++ b/ext/zend_test/tests/observer_call_user_func_01.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Observer: call_user_func() from root namespace
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+namespace Test {
+ final class MyClass
+ {
+ public static function myMethod()
+ {
+ echo 'MyClass::myMethod called' . PHP_EOL;
+ }
+ }
+
+ function my_function()
+ {
+ echo 'my_function called' . PHP_EOL;
+ }
+}
+namespace {
+ call_user_func('Test\\MyClass::myMethod');
+ call_user_func('Test\\my_function');
+}
+?>
+--EXPECTF--
+<!-- init '%s/observer_call_user_func_%d.php' -->
+<file '%s/observer_call_user_func_%d.php'>
+ <!-- init Test\MyClass::myMethod() -->
+ <Test\MyClass::myMethod>
+MyClass::myMethod called
+ </Test\MyClass::myMethod>
+ <!-- init Test\my_function() -->
+ <Test\my_function>
+my_function called
+ </Test\my_function>
+</file '%s/observer_call_user_func_%d.php'>
diff --git a/ext/zend_test/tests/observer_call_user_func_02.phpt b/ext/zend_test/tests/observer_call_user_func_02.phpt
new file mode 100644
index 0000000000..28dd6a9825
--- /dev/null
+++ b/ext/zend_test/tests/observer_call_user_func_02.phpt
@@ -0,0 +1,40 @@
+--TEST--
+Observer: call_user_func_array() from root namespace
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+namespace Test {
+ final class MyClass
+ {
+ public static function myMethod(string $msg)
+ {
+ echo 'MyClass::myMethod ' . $msg . PHP_EOL;
+ }
+ }
+
+ function my_function(string $msg)
+ {
+ echo 'my_function ' . $msg . PHP_EOL;
+ }
+}
+namespace {
+ call_user_func_array('Test\\MyClass::myMethod', ['called']);
+ call_user_func_array('Test\\my_function', ['called']);
+}
+?>
+--EXPECTF--
+<!-- init '%s/observer_call_user_func_%d.php' -->
+<file '%s/observer_call_user_func_%d.php'>
+ <!-- init Test\MyClass::myMethod() -->
+ <Test\MyClass::myMethod>
+MyClass::myMethod called
+ </Test\MyClass::myMethod>
+ <!-- init Test\my_function() -->
+ <Test\my_function>
+my_function called
+ </Test\my_function>
+</file '%s/observer_call_user_func_%d.php'>
diff --git a/ext/zend_test/tests/observer_call_user_func_03.phpt b/ext/zend_test/tests/observer_call_user_func_03.phpt
new file mode 100644
index 0000000000..1ff841d434
--- /dev/null
+++ b/ext/zend_test/tests/observer_call_user_func_03.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Observer: call_user_func() from namespace
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+namespace Test {
+ final class MyClass
+ {
+ public static function myMethod()
+ {
+ echo 'MyClass::myMethod called' . PHP_EOL;
+ }
+ }
+
+ function my_function()
+ {
+ echo 'my_function called' . PHP_EOL;
+ }
+
+ call_user_func('Test\\MyClass::myMethod');
+ call_user_func('Test\\my_function');
+}
+?>
+--EXPECTF--
+<!-- init '%s/observer_call_user_func_%d.php' -->
+<file '%s/observer_call_user_func_%d.php'>
+ <!-- init Test\MyClass::myMethod() -->
+ <Test\MyClass::myMethod>
+MyClass::myMethod called
+ </Test\MyClass::myMethod>
+ <!-- init Test\my_function() -->
+ <Test\my_function>
+my_function called
+ </Test\my_function>
+</file '%s/observer_call_user_func_%d.php'>
diff --git a/ext/zend_test/tests/observer_call_user_func_04.phpt b/ext/zend_test/tests/observer_call_user_func_04.phpt
new file mode 100644
index 0000000000..9df131db4d
--- /dev/null
+++ b/ext/zend_test/tests/observer_call_user_func_04.phpt
@@ -0,0 +1,39 @@
+--TEST--
+Observer: call_user_func_array() from namespace
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+--FILE--
+<?php
+namespace Test {
+ final class MyClass
+ {
+ public static function myMethod(string $msg)
+ {
+ echo 'MyClass::myMethod ' . $msg . PHP_EOL;
+ }
+ }
+
+ function my_function(string $msg)
+ {
+ echo 'my_function ' . $msg . PHP_EOL;
+ }
+
+ call_user_func_array('Test\\MyClass::myMethod', ['called']);
+ call_user_func_array('Test\\my_function', ['called']);
+}
+?>
+--EXPECTF--
+<!-- init '%s/observer_call_user_func_%d.php' -->
+<file '%s/observer_call_user_func_%d.php'>
+ <!-- init Test\MyClass::myMethod() -->
+ <Test\MyClass::myMethod>
+MyClass::myMethod called
+ </Test\MyClass::myMethod>
+ <!-- init Test\my_function() -->
+ <Test\my_function>
+my_function called
+ </Test\my_function>
+</file '%s/observer_call_user_func_%d.php'>
diff --git a/ext/zend_test/tests/observer_generator_05.phpt b/ext/zend_test/tests/observer_generator_05.phpt
new file mode 100644
index 0000000000..d13f6fa39b
--- /dev/null
+++ b/ext/zend_test/tests/observer_generator_05.phpt
@@ -0,0 +1,53 @@
+--TEST--
+Observer: Generator with uncaught exception
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+zend_test.observer.show_return_value=1
+--FILE--
+<?php
+function fooResults() {
+ yield 0;
+ yield 1;
+ throw new RuntimeException('Oops!');
+}
+
+function doSomething() {
+ $generator = fooResults();
+ foreach ($generator as $value) {
+ echo $value . PHP_EOL;
+ }
+
+ return 'You should not see this';
+}
+
+echo doSomething() . PHP_EOL;
+?>
+--EXPECTF--
+<!-- init '%s/observer_generator_%d.php' -->
+<file '%s/observer_generator_%d.php'>
+ <!-- init doSomething() -->
+ <doSomething>
+ <!-- init fooResults() -->
+ <fooResults>
+ </fooResults:0>
+0
+ <fooResults>
+ </fooResults:1>
+1
+ <fooResults>
+ <!-- Exception: RuntimeException -->
+ </fooResults:NULL>
+ <!-- Exception: RuntimeException -->
+ </doSomething:NULL>
+ <!-- Exception: RuntimeException -->
+</file '%s/observer_generator_%d.php'>
+
+Fatal error: Uncaught RuntimeException: Oops! in %s/observer_generator_%d.php:%d
+Stack trace:
+#0 %s/observer_generator_%d.php(%d): fooResults()
+#1 %s/observer_generator_%d.php(%d): doSomething()
+#2 {main}
+ thrown in %s/observer_generator_%d.php on line %d
diff --git a/ext/zend_test/tests/observer_types_01.phpt b/ext/zend_test/tests/observer_types_01.phpt
new file mode 100644
index 0000000000..31c1206714
--- /dev/null
+++ b/ext/zend_test/tests/observer_types_01.phpt
@@ -0,0 +1,28 @@
+--TEST--
+Observer: Observe basic TypeError
+--SKIPIF--
+<?php if (!extension_loaded('zend-test')) die('skip: zend-test extension required'); ?>
+--INI--
+zend_test.observer.enabled=1
+zend_test.observer.observe_all=1
+zend_test.observer.show_return_value=1
+--FILE--
+<?php
+function foo(array $a) { return 1; }
+foo(42);
+?>
+--EXPECTF--
+<!-- init '%s/observer_types_%d.php' -->
+<file '%s/observer_types_%d.php'>
+ <!-- init foo() -->
+ <foo>
+ <!-- Exception: TypeError -->
+ </foo:NULL>
+ <!-- Exception: TypeError -->
+</file '%s/observer_types_%d.php'>
+
+Fatal error: Uncaught TypeError: foo(): Argument #1 ($a) must be of type array, int given, called in %s:%d
+Stack trace:
+#0 %s/observer_types_%d.php(%d): foo(42)
+#1 {main}
+ thrown in %s/observer_types_%d.php on line %d