You are here

public function PHPUnit_Framework_MockObject_Generator::generateClassFromWsdl in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 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();
}