Skip to content

Commit

Permalink
Record information about the types doubled (stubbed or mocked) in a test
Browse files Browse the repository at this point in the history
  • Loading branch information
sebastianbergmann committed Feb 7, 2019
1 parent 843e1ba commit cd3067a
Showing 1 changed file with 46 additions and 0 deletions.
46 changes: 46 additions & 0 deletions src/Framework/TestCase.php
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,11 @@ abstract class TestCase extends Assert implements Test, SelfDescribing
*/
private $customComparators = [];

/**
* @var string[]
*/
private $doubledTypes = [];

/**
* Returns a matcher that matches when the method is executed
* zero or more times.
Expand Down Expand Up @@ -440,6 +445,13 @@ public function count(): int
return 1;
}

/**
* @return string[]
*/
public function doubledTypes(): array {
return \array_unique($this->doubledTypes);
}

public function getGroups(): array
{
return $this->groups;
Expand Down Expand Up @@ -1052,6 +1064,8 @@ public function registerMockObject(MockObject $mockObject): void
*/
public function getMockBuilder($className): MockBuilder
{
$this->recordDoubledType($className);

return new MockBuilder($this, $className);
}

Expand Down Expand Up @@ -1388,6 +1402,8 @@ protected function createTestProxy(string $originalClassName, array $constructor
*/
protected function getMockClass($originalClassName, $methods = [], array $arguments = [], $mockClassName = '', $callOriginalConstructor = false, $callOriginalClone = true, $callAutoload = true, $cloneArguments = false): string
{
$this->recordDoubledType($originalClassName);

$mock = $this->getMockObjectGenerator()->getMock(
$originalClassName,
$methods,
Expand Down Expand Up @@ -1421,6 +1437,8 @@ protected function getMockClass($originalClassName, $methods = [], array $argume
*/
protected function getMockForAbstractClass($originalClassName, array $arguments = [], $mockClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true, $mockedMethods = [], $cloneArguments = false): MockObject
{
$this->recordDoubledType($originalClassName);

$mockObject = $this->getMockObjectGenerator()->getMockForAbstractClass(
$originalClassName,
$arguments,
Expand Down Expand Up @@ -1452,6 +1470,8 @@ protected function getMockForAbstractClass($originalClassName, array $arguments
*/
protected function getMockFromWsdl($wsdlFile, $originalClassName = '', $mockClassName = '', array $methods = [], $callOriginalConstructor = true, array $options = []): MockObject
{
$this->recordDoubledType('SoapClient');

if ($originalClassName === '') {
$fileName = \pathinfo(\basename(\parse_url($wsdlFile)['path']), \PATHINFO_FILENAME);
$originalClassName = \preg_replace('/[^a-zA-Z0-9_]/', '', $fileName);
Expand Down Expand Up @@ -1502,6 +1522,8 @@ protected function getMockFromWsdl($wsdlFile, $originalClassName = '', $mockClas
*/
protected function getMockForTrait($traitName, array $arguments = [], $mockClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true, $mockedMethods = [], $cloneArguments = false): MockObject
{
$this->recordDoubledType($traitName);

$mockObject = $this->getMockObjectGenerator()->getMockForTrait(
$traitName,
$arguments,
Expand Down Expand Up @@ -1535,6 +1557,8 @@ protected function getMockForTrait($traitName, array $arguments = [], $mockClass
*/
protected function getObjectForTrait($traitName, array $arguments = [], $traitClassName = '', $callOriginalConstructor = true, $callOriginalClone = true, $callAutoload = true)/*: object*/
{
$this->recordDoubledType($traitName);

return $this->getMockObjectGenerator()->getObjectForTrait(
$traitName,
$arguments,
Expand All @@ -1554,6 +1578,10 @@ protected function getObjectForTrait($traitName, array $arguments = [], $traitCl
*/
protected function prophesize($classOrInterface = null): ObjectProphecy
{
if (is_string($classOrInterface)) {
$this->recordDoubledType($classOrInterface);
}

return $this->getProphet()->prophesize($classOrInterface);
}

Expand Down Expand Up @@ -2138,4 +2166,22 @@ private function runInSeparateProcess(): bool
return ($this->runTestInSeparateProcess === true || $this->runClassInSeparateProcess === true) &&
$this->inIsolation !== true && !$this instanceof PhptTestCase;
}

/**
* @param string|string[] $originalClassName
*/
private function recordDoubledType($originalClassName): void
{
if (is_string($originalClassName)) {
$this->doubledTypes[] = $originalClassName;
}

if (is_array($originalClassName)) {
foreach ($originalClassName as $_originalClassName) {
if (is_string($_originalClassName)) {
$this->doubledTypes[] = $_originalClassName;
}
}
}
}
}

0 comments on commit cd3067a

Please sign in to comment.