public function PHPUnit_Framework_MockObject_Generator::generateClassFromWsdl in Zircon Profile 8.0
Same name and namespace in other branches
- 8 vendor/phpunit/phpunit-mock-objects/src/Framework/MockObject/Generator.php \PHPUnit_Framework_MockObject_Generator::generateClassFromWsdl()
Parameters
string $wsdlFile:
string $className:
array $methods:
array $options:
Return value
string
Throws
PHPUnit_Framework_MockObject_RuntimeException
File
- vendor/
phpunit/ phpunit-mock-objects/ src/ Framework/ MockObject/ Generator.php, line 533
Class
- PHPUnit_Framework_MockObject_Generator
- Mock Object Code Generator
Code
public function generateClassFromWsdl($wsdlFile, $className, array $methods = array(), array $options = array()) {
if (!extension_loaded('soap')) {
throw new PHPUnit_Framework_MockObject_RuntimeException('The SOAP extension is required to generate a mock object from WSDL.');
}
$options = array_merge($options, array(
'cache_wsdl' => WSDL_CACHE_NONE,
));
$client = new SoapClient($wsdlFile, $options);
$_methods = array_unique($client
->__getFunctions());
unset($client);
sort($_methods);
$templateDir = dirname(__FILE__) . DIRECTORY_SEPARATOR . 'Generator' . DIRECTORY_SEPARATOR;
$methodTemplate = new Text_Template($templateDir . 'wsdl_method.tpl');
$methodsBuffer = '';
foreach ($_methods as $method) {
$nameStart = strpos($method, ' ') + 1;
$nameEnd = strpos($method, '(');
$name = substr($method, $nameStart, $nameEnd - $nameStart);
if (empty($methods) || in_array($name, $methods)) {
$args = explode(',', substr($method, $nameEnd + 1, strpos($method, ')') - $nameEnd - 1));
$numArgs = count($args);
for ($i = 0; $i < $numArgs; $i++) {
$args[$i] = substr($args[$i], strpos($args[$i], '$'));
}
$methodTemplate
->setVar(array(
'method_name' => $name,
'arguments' => implode(', ', $args),
));
$methodsBuffer .= $methodTemplate
->render();
}
}
$optionsBuffer = 'array(';
foreach ($options as $key => $value) {
$optionsBuffer .= $key . ' => ' . $value;
}
$optionsBuffer .= ')';
$classTemplate = new Text_Template($templateDir . 'wsdl_class.tpl');
$namespace = '';
if (strpos($className, '\\') !== false) {
$parts = explode('\\', $className);
$className = array_pop($parts);
$namespace = 'namespace ' . implode('\\', $parts) . ';' . "\n\n";
}
$classTemplate
->setVar(array(
'namespace' => $namespace,
'class_name' => $className,
'wsdl' => $wsdlFile,
'options' => $optionsBuffer,
'methods' => $methodsBuffer,
));
return $classTemplate
->render();
}