<?php
/**
* @author @ct-jensschulze <jens.schulze@commercetools.de>
*/
class PHPUnit_Framework_MockObject_Invocation_Object extends PHPUnit_Framework_MockObject_Invocation_Static
{
/**
* @var object
*/
public $object;
/**
* @param string $className
* @param string $methodname
* @param array $parameters
* @param object $object
* @param object $cloneObjects
*/
public function __construct($className, $methodName, array $parameters, $object, $cloneObjects = false)
{
parent::__construct($className, $methodName, $parameters, $cloneObjects);
$this->object = $object;
}
}
class PHPUnit_Framework_MockObject_Invocation_Static
{
/**
* @var array
*/
protected static $uncloneableExtensions = array(
'mysqli' => true,
'SQLite' => true,
'sqlite3' => true,
'tidy' => true,
'xmlwriter' => true,
'xsl' => true
);
/**
* @var array
*/
protected static $uncloneableClasses = array(
'Closure',
'COMPersistHelper',
'IteratorIterator',
'RecursiveIteratorIterator',
'SplFileObject',
'PDORow',
'ZipArchive'
);
/**
* @var string
*/
public $className;
/**
* @var string
*/
public $methodName;
/**
* @var array
*/
public $parameters;
/**
* @param string $className
* @param string $methodname
* @param array $parameters
* @param boolean $cloneObjects
*/
public function __construct($className, $methodName, array $parameters, $cloneObjects = false)
{
$this->className = $className;
$this->methodName = $methodName;
$this->parameters = $parameters;
if (!$cloneObjects) {
return;
}
foreach ($this->parameters as $key => $value) {
if (is_object($value)) {
$this->parameters[$key] = $this->cloneObject($value);
}
}
}
/**
* @param object $original
* @return object
*/
protected function cloneObject($original)
{
return clone $original;
}
}
interface MyInterface {
public function doSomethingDifferent();
}
abstract class MyClass implements MyInterface
{
public function doSomething()
{
return "doneSomething";
}
abstract public function doSomethingElse();
}
class MyClassTest
{
public function getMockForAbstractClass($className)
{
$mockClassName = 'Mock_' . $className;
$class = <<<EOF
class $mockClassName extends $className {
private \$__phpunit_invocationMocker;
private \$__phpunit_originalObject;
public function __clone()
{
\$this->__phpunit_invocationMocker = clone \$this->__phpunit_getInvocationMocker();
}
public function doSomethingElse() {}
public function doSomethingDifferent() {
\$arguments = array();
\$count = func_num_args();
if (\$count > 0) {
\$_arguments = func_get_args();
for (\$i = 0; \$i < \$count; \$i++) {
\$arguments[] = \$_arguments[\$i];
}
}
\$result = \$this->__phpunit_getInvocationMocker()->invoke(
new PHPUnit_Framework_MockObject_Invocation_Object(
'MyInterface', 'httpRequest', \$arguments, \$this, FALSE
)
);
return \$result;
}
}
EOF;
eval($class);
return new $mockClassName();
}
public function testDoSomething()
{
$object = $this->getMockForAbstractClass('MyClass');
assert('"doneSomething" == "' . $object->doSomething() . '"');
}
}
$test = new MyClassTest();
$test->testDoSomething();
- Output for git.master, git.master_jit, rfc.property-hooks
This tab shows result from various feature-branches currently under review by the php developers. Contact me to have additional branches featured.
Active branches
Archived branches
Once feature-branches are merged or declined, they are no longer available. Their functionality (when merged) can be viewed from the main output page
preferences:
58.83 ms | 401 KiB | 8 Q