1
0
mirror of https://github.com/php/php-src.git synced 2026-04-23 07:58:20 +02:00
Files
archived-php-src/Zend/tests/bug72101.phpt
T
Nikita Popov 2f1f34952e Remove $errcontext argument to error handlers
I'm removing the argument entirely here, but we might want to change
this to passing null or and empty array instead, if the impact of
dropping it entirely turns out to be too large.

This was deprecated as part of https://wiki.php.net/rfc/deprecations_php_7_2
as a doc-only deprecation.
2019-02-05 14:12:10 +01:00

86 lines
2.8 KiB
PHP

--TEST--
Bug #72101 (crash on complex code)
--FILE--
<?php
class PHPUnit_Framework_MockObject_Stub_ReturnCallback {
protected $callback;
public function __construct($callback) {
$this->callback = $callback;
}
public function invoke($invocation) {
return call_user_func_array($this->callback, $invocation->parameters);
}
}
class PHPUnit_Framework_MockObject_InvocationMocker {
protected $matchers = [];
public function addMatcher( $matcher) {
$this->matchers[] = $matcher;
}
public function invoke( $invocation) {
foreach ($this->matchers as $match) {
$match->invoked($invocation);
}
}
}
class PHPUnit_Framework_MockObject_Matcher {
public $stub = null;
public function invoked($invocation) {
return $this->stub->invoke($invocation);
}
}
class MethodCallbackByReference {
public function bar(&$a, &$b, $c) {
Legacy::bar($a, $b, $c);
}
public function callback(&$a, &$b, $c) {
$b = 1;
}
}
class PHPUnit_Framework_MockObject_Invocation_Static {
public $parameters;
public function __construct(array $parameters) {
$this->parameters = $parameters;
}
}
class Mock_MethodCallbackByReference_7b180d26 extends MethodCallbackByReference {
public $inv_mocker;
public function bar(&$a, &$b, $c) {
$arguments = array($a, $b, $c);
$result = $this->inv_mocker->invoke(
new PHPUnit_Framework_MockObject_Invocation_Static(
$arguments
)
);
return $result;
}
}
set_error_handler(function() {
// var_dump(func_get_args());
DoesNotExists::$nope = true;
}, E_ALL);
$foo = new Mock_MethodCallbackByReference_7b180d26();
$InvMocker = new PHPUnit_Framework_MockObject_InvocationMocker();
$foo->inv_mocker = $InvMocker;
$OuterMatcher = new PHPUnit_Framework_MockObject_Matcher();
$InvMocker->addMatcher($OuterMatcher);
$OuterMatcher->methodNameMatcher = null;
$OuterMatcher->stub = new PHPUnit_Framework_MockObject_Stub_ReturnCallback([$foo, 'callback']);
$a = $b = $c = 0;
$foo->bar($a, $b, $c);
--EXPECTF--
Fatal error: Uncaught Error: Class 'DoesNotExists' not found in %sbug72101.php:61
Stack trace:
#0 %sbug72101.php(8): {closure}(2, 'Parameter 1 to ...', '%s', 8)
#1 %sbug72101.php(27): PHPUnit_Framework_MockObject_Stub_ReturnCallback->invoke(Object(PHPUnit_Framework_MockObject_Invocation_Static))
#2 %sbug72101.php(19): PHPUnit_Framework_MockObject_Matcher->invoked(Object(PHPUnit_Framework_MockObject_Invocation_Static))
#3 %sbug72101.php(52): PHPUnit_Framework_MockObject_InvocationMocker->invoke(Object(PHPUnit_Framework_MockObject_Invocation_Static))
#4 %sbug72101.php(72): Mock_MethodCallbackByReference_7b180d26->bar(0, 0, 0)
#5 {main}
thrown in %sbug72101.php on line 61