]> granicus.if.org Git - php/commitdiff
Add missing observer tests
authorSammy Kaye Powers <sammyk@php.net>
Fri, 23 Oct 2020 20:38:42 +0000 (13:38 -0700)
committerSammy Kaye Powers <sammyk@php.net>
Mon, 26 Oct 2020 22:15:17 +0000 (15:15 -0700)
Closes GH-6378

ext/zend_test/tests/observer_call_user_func_01.phpt [new file with mode: 0644]
ext/zend_test/tests/observer_call_user_func_02.phpt [new file with mode: 0644]
ext/zend_test/tests/observer_call_user_func_03.phpt [new file with mode: 0644]
ext/zend_test/tests/observer_call_user_func_04.phpt [new file with mode: 0644]
ext/zend_test/tests/observer_generator_05.phpt [new file with mode: 0644]
ext/zend_test/tests/observer_types_01.phpt [new file with mode: 0644]

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 (file)
index 0000000..0f12fa6
--- /dev/null
@@ -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 (file)
index 0000000..28dd6a9
--- /dev/null
@@ -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 (file)
index 0000000..1ff841d
--- /dev/null
@@ -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 (file)
index 0000000..9df131d
--- /dev/null
@@ -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 (file)
index 0000000..d13f6fa
--- /dev/null
@@ -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 (file)
index 0000000..31c1206
--- /dev/null
@@ -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