Chris@12: supports('getMock')) { Chris@12: $mock = $this->getMockBuilder($originalClassName) Chris@12: ->setMethods($methods) Chris@12: ->setConstructorArgs($arguments) Chris@12: ->setMockClassName($mockClassName) Chris@12: ->setProxyTarget($proxyTarget); Chris@12: if ($callOriginalConstructor) { Chris@12: $mock->enableOriginalConstructor(); Chris@12: } Chris@12: else { Chris@12: $mock->disableOriginalConstructor(); Chris@12: } Chris@12: if ($callOriginalClone) { Chris@12: $mock->enableOriginalClone(); Chris@12: } Chris@12: else { Chris@12: $mock->disableOriginalClone(); Chris@12: } Chris@12: if ($callAutoload) { Chris@12: $mock->enableAutoload(); Chris@12: } Chris@12: else { Chris@12: $mock->disableAutoload(); Chris@12: } Chris@12: if ($cloneArguments) { Chris@12: $mock->enableArgumentCloning(); Chris@12: } Chris@12: else { Chris@12: $mock->disableArgumentCloning(); Chris@12: } Chris@12: if ($callOriginalMethods) { Chris@12: $mock->enableProxyingToOriginalMethods(); Chris@12: } Chris@12: else { Chris@12: $mock->disableProxyingToOriginalMethods(); Chris@12: } Chris@12: return $mock->getMock(); Chris@12: } Chris@12: else { Chris@12: return parent::getMock($originalClassName, $methods, $arguments, $mockClassName, $callOriginalConstructor, $callOriginalClone, $callAutoload, $cloneArguments, $callOriginalMethods, $proxyTarget); Chris@12: } Chris@12: } Chris@12: Chris@12: /** Chris@12: * Returns a mock object for the specified class using the available method. Chris@12: * Chris@12: * The createMock method does not exist in PHPUnit 4. To provide forward Chris@12: * compatibility this trait provides the createMock method and uses createMock Chris@12: * if this method is available on the parent class or falls back to getMock if Chris@12: * it isn't. Chris@12: * Chris@12: * @param string $originalClassName Chris@12: * Name of the class to mock. Chris@12: * Chris@12: * @see \PHPUnit_Framework_TestCase::getMock Chris@12: * Chris@12: * @return \PHPUnit_Framework_MockObject_MockObject Chris@12: */ Chris@12: public function createMock($originalClassName) { Chris@12: if ($this->supports('createMock')) { Chris@12: return parent::createMock($originalClassName); Chris@12: } Chris@12: else { Chris@12: return $this->getMock($originalClassName, [], [], '', FALSE, FALSE); Chris@12: } Chris@12: } Chris@12: Chris@12: /** Chris@14: * Compatibility layer for PHPUnit 6 to support PHPUnit 4 code. Chris@14: * Chris@14: * @param mixed $class Chris@14: * The expected exception class. Chris@14: * @param string $message Chris@14: * The expected exception message. Chris@14: * @param int $exception_code Chris@14: * The expected exception code. Chris@14: */ Chris@14: public function setExpectedException($class, $message = '', $exception_code = NULL) { Chris@14: if (method_exists($this, 'expectException')) { Chris@14: $this->expectException($class); Chris@14: if (!empty($message)) { Chris@14: $this->expectExceptionMessage($message); Chris@14: } Chris@14: if ($exception_code !== NULL) { Chris@14: $this->expectExceptionCode($exception_code); Chris@14: } Chris@14: } Chris@14: else { Chris@14: parent::setExpectedException($class, $message, $exception_code); Chris@14: } Chris@14: } Chris@14: Chris@14: /** Chris@12: * Checks if the trait is used in a class that has a method. Chris@12: * Chris@12: * @param string $method Chris@12: * Method to check. Chris@12: * Chris@12: * @return bool Chris@12: * TRUE if the method is supported, FALSE if not. Chris@12: */ Chris@12: private function supports($method) { Chris@12: // Get the parent class of the currently running test class. Chris@12: $parent = get_parent_class($this); Chris@12: // Ensure that the method_exists() check on the createMock method is carried Chris@12: // out on the first parent of $this that does not have access to this Chris@12: // trait's methods. This is because the trait also has a method called Chris@12: // createMock(). Most often the check will be made on Chris@12: // \PHPUnit\Framework\TestCase. Chris@12: while (method_exists($parent, 'supports')) { Chris@12: $parent = get_parent_class($parent); Chris@12: } Chris@12: return method_exists($parent, $method); Chris@12: } Chris@12: Chris@12: }