/** * @param \Box\TestScribe\Mock\MockClass $mockClass * @param string $injectMethodName * * @return string */ public function genInjectedMockStatement(MockClass $mockClass, $injectMethodName) { $createMockObjectStatement = $this->mockRenderer->renderAMock($mockClass); $injectStatement = $this->genInjectionStatement($mockClass, $injectMethodName); // @TODO (ryang 8/6/14) : better handling of indentations. $combinedStatements = ArrayUtil::joinNonEmptyStringsWithNewLine([$createMockObjectStatement, $injectStatement], 1); return $combinedStatements; }
/** * Generate the argument list as a string and * its referenced mock statements. * * @param \Box\TestScribe\ArgumentInfo\Arguments $argsObj * * @return \Box\TestScribe\Renderers\ArgumentsRenderResult */ public function renderArguments(Arguments $argsObj) { $expressions = $argsObj->getExpressions(); $argumentsString = implode(', ', $expressions); $mocks = $argsObj->getMocks(); $mockObjectStatementArray = []; foreach ($mocks as $mock) { $mockObjectStatement = $this->mockRenderer->renderAMock($mock); $mockObjectStatementArray[] = $mockObjectStatement; } $mockObjectStatementsString = ArrayUtil::joinNonEmptyStringsWithNewLine($mockObjectStatementArray, 2); $result = new ArgumentsRenderResult($argumentsString, $mockObjectStatementsString); return $result; }
/** * Return statements for invoking the test and verifying the result. * * @param \Box\TestScribe\Execution\ExecutionResult $executionResult * * @return string */ public function renderMethodInvocation(ExecutionResult $executionResult) { $mockClassUnderTest = $executionResult->getMockClassUnderTest(); $config = $this->globalComputedConfig; $inMethod = $config->getInMethod(); $reflectionMethod = $inMethod->getReflectionMethod(); $isStatic = $reflectionMethod->isStatic(); $fullyQualifiedClassName = $config->getFullClassName(); $constructorArguments = $executionResult->getConstructorArguments(); $constructorArgumentsRenderedResult = $this->argumentsRenderer->renderArguments($constructorArguments); $constructorArgumentsString = $constructorArgumentsRenderedResult->getArgumentString(); $mockObjectForConstructorStatements = $constructorArgumentsRenderedResult->getMockStatements(); if ($mockObjectForConstructorStatements) { $mockObjectForConstructorStatements = "// Setup mocks for parameters to the constructor.\n\n" . $mockObjectForConstructorStatements; } $methodArguments = $executionResult->getMethodArguments(); $argumentsToTheMethodRenderedResult = $this->argumentsRenderer->renderArguments($methodArguments); $mockMethodArgumentsStatements = $argumentsToTheMethodRenderedResult->getMockStatements(); if ($mockMethodArgumentsStatements) { $mockMethodArgumentsStatements = "// Setup mocks for parameters to the method under test.\n\n" . $mockMethodArgumentsStatements; } $mockAndComment = ArrayUtil::joinNonEmptyStringsWithNewLine(["{$mockMethodArgumentsStatements}", "// Execute the method under test."], 2); $isPartialMocking = $this->partialMockUtil->isClassUnderTestPartiallyMocked($mockClassUnderTest); $createObjectWithMocksStatement = ''; $targetObjectName = ''; if (!$isStatic) { if ($isPartialMocking) { // @TODO (ryang 3/4/15) : move the generated mock statements for the constructor into this scope. $createObjectWithMocksStatement = $this->mockRenderer->renderPartialMock($mockClassUnderTest, $constructorArgumentsString, $mockObjectForConstructorStatements); $targetObjectName = $mockClassUnderTest->getMockObjectName(); } else { $targetObjectName = 'objectUnderTest'; $createObjectStatement = "\${$targetObjectName} = new {$fullyQualifiedClassName}({$constructorArgumentsString});"; $createObjectWithMocksStatement = ArrayUtil::joinNonEmptyStringsWithNewLine([$mockObjectForConstructorStatements, $createObjectStatement], 2); } } $invocationStatement = $this->executionAndVerificationRenderer->genExecutionAndVerification($executionResult, $targetObjectName); $result = ArrayUtil::joinNonEmptyStringsWithNewLine([$mockAndComment, $createObjectWithMocksStatement, $invocationStatement], 2); return $result; }