Skip to content
This repository was archived by the owner on Feb 20, 2023. It is now read-only.

Commit 1294a58

Browse files
More work on Test Proxy feature
1 parent 346591b commit 1294a58

28 files changed

+201
-13
lines changed

PHPUnit/Framework/MockObject/Generator.php

Lines changed: 27 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -159,12 +159,13 @@ class PHPUnit_Framework_MockObject_Generator
159159
* @param boolean $callAutoload
160160
* @param boolean $cloneArguments
161161
* @param boolean $callOriginalMethods
162+
* @param object $proxyTarget
162163
* @return object
163164
* @throws InvalidArgumentException
164165
* @throws PHPUnit_Framework_Exception
165166
* @since Method available since Release 1.0.0
166167
*/
167-
public function getMock($originalClassName, $methods = array(), array $arguments = array(), $mockClassName = '', $callOriginalConstructor = TRUE, $callOriginalClone = TRUE, $callAutoload = TRUE, $cloneArguments = TRUE, $callOriginalMethods = FALSE)
168+
public function getMock($originalClassName, $methods = array(), array $arguments = array(), $mockClassName = '', $callOriginalConstructor = TRUE, $callOriginalClone = TRUE, $callAutoload = TRUE, $cloneArguments = TRUE, $callOriginalMethods = FALSE, $proxyTarget = NULL)
168169
{
169170
if (!is_string($originalClassName)) {
170171
throw PHPUnit_Util_InvalidArgumentHelper::factory(1, 'string');
@@ -229,20 +230,24 @@ public function getMock($originalClassName, $methods = array(), array $arguments
229230
$originalClassName,
230231
$callOriginalConstructor,
231232
$callAutoload,
232-
$arguments
233+
$arguments,
234+
$callOriginalMethods,
235+
$proxyTarget
233236
);
234237
}
235238

236239
/**
237-
* @param string $code
238-
* @param string $className
239-
* @param string $originalClassName
240-
* @param string $callOriginalConstructor
241-
* @param string $callAutoload
242-
* @param array $arguments
240+
* @param string $code
241+
* @param string $className
242+
* @param string $originalClassName
243+
* @param boolean $callOriginalConstructor
244+
* @param boolean $callAutoload
245+
* @param array $arguments
246+
* @param boolean $callOriginalMethods
247+
* @param object $proxyTarget
243248
* @return object
244249
*/
245-
protected function getObject($code, $className, $originalClassName = '', $callOriginalConstructor = FALSE, $callAutoload = FALSE, array $arguments = array())
250+
protected function getObject($code, $className, $originalClassName = '', $callOriginalConstructor = FALSE, $callAutoload = FALSE, array $arguments = array(), $callOriginalMethods = FALSE, $proxyTarget = NULL)
246251
{
247252
$this->evalClass($code, $className);
248253

@@ -259,6 +264,19 @@ protected function getObject($code, $className, $originalClassName = '', $callOr
259264
$object = $class->newInstanceWithoutConstructor();
260265
}
261266

267+
if ($callOriginalMethods) {
268+
if (!is_object($proxyTarget)) {
269+
if (count($arguments) == 0) {
270+
$proxyTarget = new $originalClassName;
271+
} else {
272+
$class = new ReflectionClass($originalClassName);
273+
$proxyTarget = $class->newInstanceArgs($arguments);
274+
}
275+
}
276+
277+
$object->__phpunit_setOriginalObject($proxyTarget);
278+
}
279+
262280
return $object;
263281
}
264282

PHPUnit/Framework/MockObject/Generator/mocked_class.tpl.dist

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
{
33
private static $__phpunit_staticInvocationMocker;
44
private $__phpunit_invocationMocker;
5+
private $__phpunit_originalObject;
56

67
{clone}{mocked_methods}
78
public function expects(PHPUnit_Framework_MockObject_Matcher_Invocation $matcher)
@@ -16,6 +17,11 @@
1617
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
1718
}
1819

20+
public function __phpunit_setOriginalObject($originalObject)
21+
{
22+
$this->__phpunit_originalObject = $originalObject;
23+
}
24+
1925
public function __phpunit_getInvocationMocker()
2026
{
2127
if ($this->__phpunit_invocationMocker === NULL) {

PHPUnit/Framework/MockObject/Generator/proxied_object_method.tpl.dist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@
1818
)
1919
);
2020

21-
return parent::{method_name}({arguments_call});
21+
return $this->__phpunit_originalObject->{method_name}({arguments_call});
2222
}

PHPUnit/Framework/MockObject/MockBuilder.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,11 @@ class PHPUnit_Framework_MockObject_MockBuilder
106106
*/
107107
protected $callOriginalMethods = FALSE;
108108

109+
/**
110+
* @var object
111+
*/
112+
protected $proxyTarget = NULL;
113+
109114
/**
110115
* @param PHPUnit_Framework_TestCase
111116
* @param string
@@ -132,7 +137,8 @@ public function getMock()
132137
$this->originalClone,
133138
$this->autoload,
134139
$this->cloneArguments,
135-
$this->callOriginalMethods
140+
$this->callOriginalMethods,
141+
$this->proxyTarget
136142
);
137143
}
138144

@@ -336,6 +342,20 @@ public function enableProxyingToOriginalMethods()
336342
public function disableProxyingToOriginalMethods()
337343
{
338344
$this->callOriginalMethods = FALSE;
345+
$this->proxyTarget = NULL;
346+
347+
return $this;
348+
}
349+
350+
/**
351+
* Sets the proxy target.
352+
*
353+
* @return PHPUnit_Framework_MockObject_MockBuilder
354+
* @since Method available since Release 1.3.0
355+
*/
356+
public function setProxyTarget($object)
357+
{
358+
$this->proxyTarget = $object;
339359

340360
return $this;
341361
}

Tests/MockObject/class.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
3232
{
3333
private static $__phpunit_staticInvocationMocker;
3434
private $__phpunit_invocationMocker;
35+
private $__phpunit_originalObject;
3536

3637
public function __clone()
3738
{
@@ -94,6 +95,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
9495
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
9596
}
9697

98+
public function __phpunit_setOriginalObject($originalObject)
99+
{
100+
$this->__phpunit_originalObject = $originalObject;
101+
}
102+
97103
public function __phpunit_getInvocationMocker()
98104
{
99105
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/class_call_parent_clone.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
2828
{
2929
private static $__phpunit_staticInvocationMocker;
3030
private $__phpunit_invocationMocker;
31+
private $__phpunit_originalObject;
3132

3233
public function __clone()
3334
{
@@ -47,6 +48,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
4748
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
4849
}
4950

51+
public function __phpunit_setOriginalObject($originalObject)
52+
{
53+
$this->__phpunit_originalObject = $originalObject;
54+
}
55+
5056
public function __phpunit_getInvocationMocker()
5157
{
5258
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/class_call_parent_constructor.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
2828
{
2929
private static $__phpunit_staticInvocationMocker;
3030
private $__phpunit_invocationMocker;
31+
private $__phpunit_originalObject;
3132

3233
public function __clone()
3334
{
@@ -46,6 +47,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
4647
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
4748
}
4849

50+
public function __phpunit_setOriginalObject($originalObject)
51+
{
52+
$this->__phpunit_originalObject = $originalObject;
53+
}
54+
4955
public function __phpunit_getInvocationMocker()
5056
{
5157
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/class_dont_call_parent_clone.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
2828
{
2929
private static $__phpunit_staticInvocationMocker;
3030
private $__phpunit_invocationMocker;
31+
private $__phpunit_originalObject;
3132

3233
public function __clone()
3334
{
@@ -46,6 +47,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
4647
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
4748
}
4849

50+
public function __phpunit_setOriginalObject($originalObject)
51+
{
52+
$this->__phpunit_originalObject = $originalObject;
53+
}
54+
4955
public function __phpunit_getInvocationMocker()
5056
{
5157
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/class_dont_call_parent_constructor.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
2828
{
2929
private static $__phpunit_staticInvocationMocker;
3030
private $__phpunit_invocationMocker;
31+
private $__phpunit_originalObject;
3132

3233
public function __clone()
3334
{
@@ -46,6 +47,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
4647
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
4748
}
4849

50+
public function __phpunit_setOriginalObject($originalObject)
51+
{
52+
$this->__phpunit_originalObject = $originalObject;
53+
}
54+
4955
public function __phpunit_getInvocationMocker()
5056
{
5157
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/class_implementing_interface_call_parent_constructor.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
3333
{
3434
private static $__phpunit_staticInvocationMocker;
3535
private $__phpunit_invocationMocker;
36+
private $__phpunit_originalObject;
3637

3738
public function __clone()
3839
{
@@ -51,6 +52,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
5152
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
5253
}
5354

55+
public function __phpunit_setOriginalObject($originalObject)
56+
{
57+
$this->__phpunit_originalObject = $originalObject;
58+
}
59+
5460
public function __phpunit_getInvocationMocker()
5561
{
5662
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/class_implementing_interface_dont_call_parent_constructor.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
3333
{
3434
private static $__phpunit_staticInvocationMocker;
3535
private $__phpunit_invocationMocker;
36+
private $__phpunit_originalObject;
3637

3738
public function __clone()
3839
{
@@ -51,6 +52,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
5152
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
5253
}
5354

55+
public function __phpunit_setOriginalObject($originalObject)
56+
{
57+
$this->__phpunit_originalObject = $originalObject;
58+
}
59+
5460
public function __phpunit_getInvocationMocker()
5561
{
5662
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/class_partial.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
3333
{
3434
private static $__phpunit_staticInvocationMocker;
3535
private $__phpunit_invocationMocker;
36+
private $__phpunit_originalObject;
3637

3738
public function __clone()
3839
{
@@ -73,6 +74,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
7374
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
7475
}
7576

77+
public function __phpunit_setOriginalObject($originalObject)
78+
{
79+
$this->__phpunit_originalObject = $originalObject;
80+
}
81+
7682
public function __phpunit_getInvocationMocker()
7783
{
7884
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/interface.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ class MockFoo implements PHPUnit_Framework_MockObject_MockObject, Foo
2727
{
2828
private static $__phpunit_staticInvocationMocker;
2929
private $__phpunit_invocationMocker;
30+
private $__phpunit_originalObject;
3031

3132
public function __clone()
3233
{
@@ -67,6 +68,11 @@ class MockFoo implements PHPUnit_Framework_MockObject_MockObject, Foo
6768
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
6869
}
6970

71+
public function __phpunit_setOriginalObject($originalObject)
72+
{
73+
$this->__phpunit_originalObject = $originalObject;
74+
}
75+
7076
public function __phpunit_getInvocationMocker()
7177
{
7278
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/invocation_object_clone_object.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
3434
{
3535
private static $__phpunit_staticInvocationMocker;
3636
private $__phpunit_invocationMocker;
37+
private $__phpunit_originalObject;
3738

3839
public function __clone()
3940
{
@@ -96,6 +97,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
9697
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
9798
}
9899

100+
public function __phpunit_setOriginalObject($originalObject)
101+
{
102+
$this->__phpunit_originalObject = $originalObject;
103+
}
104+
99105
public function __phpunit_getInvocationMocker()
100106
{
101107
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/invocation_static_clone_object.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
3434
{
3535
private static $__phpunit_staticInvocationMocker;
3636
private $__phpunit_invocationMocker;
37+
private $__phpunit_originalObject;
3738

3839
public function __clone()
3940
{
@@ -96,6 +97,11 @@ class MockFoo extends Foo implements PHPUnit_Framework_MockObject_MockObject
9697
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
9798
}
9899

100+
public function __phpunit_setOriginalObject($originalObject)
101+
{
102+
$this->__phpunit_originalObject = $originalObject;
103+
}
104+
99105
public function __phpunit_getInvocationMocker()
100106
{
101107
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/namespaced_class.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ class MockFoo extends NS\Foo implements PHPUnit_Framework_MockObject_MockObject
3535
{
3636
private static $__phpunit_staticInvocationMocker;
3737
private $__phpunit_invocationMocker;
38+
private $__phpunit_originalObject;
3839

3940
public function __clone()
4041
{
@@ -97,6 +98,11 @@ class MockFoo extends NS\Foo implements PHPUnit_Framework_MockObject_MockObject
9798
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
9899
}
99100

101+
public function __phpunit_setOriginalObject($originalObject)
102+
{
103+
$this->__phpunit_originalObject = $originalObject;
104+
}
105+
100106
public function __phpunit_getInvocationMocker()
101107
{
102108
if ($this->__phpunit_invocationMocker === NULL) {

Tests/MockObject/namespaced_class_call_parent_clone.phpt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ class MockFoo extends NS\Foo implements PHPUnit_Framework_MockObject_MockObject
3030
{
3131
private static $__phpunit_staticInvocationMocker;
3232
private $__phpunit_invocationMocker;
33+
private $__phpunit_originalObject;
3334

3435
public function __clone()
3536
{
@@ -49,6 +50,11 @@ class MockFoo extends NS\Foo implements PHPUnit_Framework_MockObject_MockObject
4950
return self::__phpunit_getStaticInvocationMocker()->expects($matcher);
5051
}
5152

53+
public function __phpunit_setOriginalObject($originalObject)
54+
{
55+
$this->__phpunit_originalObject = $originalObject;
56+
}
57+
5258
public function __phpunit_getInvocationMocker()
5359
{
5460
if ($this->__phpunit_invocationMocker === NULL) {

0 commit comments

Comments
 (0)