first commit
This commit is contained in:
121
vendor/hamcrest/hamcrest-php/generator/FactoryFile.php
vendored
Normal file
121
vendor/hamcrest/hamcrest-php/generator/FactoryFile.php
vendored
Normal file
@ -0,0 +1,121 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Copyright (c) 2009 hamcrest.org
|
||||
*/
|
||||
|
||||
abstract class FactoryFile
|
||||
{
|
||||
/**
|
||||
* Hamcrest standard is two spaces for each level of indentation.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
const INDENT = ' ';
|
||||
|
||||
private $indent;
|
||||
|
||||
private $file;
|
||||
|
||||
private $code;
|
||||
|
||||
public function __construct($file, $indent)
|
||||
{
|
||||
$this->file = $file;
|
||||
$this->indent = $indent;
|
||||
}
|
||||
|
||||
abstract public function addCall(FactoryCall $call);
|
||||
|
||||
abstract public function build();
|
||||
|
||||
public function addFileHeader()
|
||||
{
|
||||
$this->code = '';
|
||||
$this->addPart('file_header');
|
||||
}
|
||||
|
||||
public function addPart($name)
|
||||
{
|
||||
$this->addCode($this->readPart($name));
|
||||
}
|
||||
|
||||
public function addCode($code)
|
||||
{
|
||||
$this->code .= $code;
|
||||
}
|
||||
|
||||
public function readPart($name)
|
||||
{
|
||||
return file_get_contents(__DIR__ . "/parts/$name.txt");
|
||||
}
|
||||
|
||||
public function generateFactoryCall(FactoryCall $call)
|
||||
{
|
||||
$method = $call->getMethod();
|
||||
$code = $method->getComment($this->indent) . "\n";
|
||||
$code .= $this->generateDeclaration($call->getName(), $method);
|
||||
$code .= $this->generateCall($method);
|
||||
$code .= $this->generateClosing();
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function generateDeclaration($name, FactoryMethod $method)
|
||||
{
|
||||
$code = $this->indent . $this->getDeclarationModifiers()
|
||||
. 'function ' . $name . '('
|
||||
. $this->generateDeclarationArguments($method)
|
||||
. ')' . "\n" . $this->indent . '{' . "\n";
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function getDeclarationModifiers()
|
||||
{
|
||||
return '';
|
||||
}
|
||||
|
||||
public function generateDeclarationArguments(FactoryMethod $method)
|
||||
{
|
||||
if ($method->acceptsVariableArguments()) {
|
||||
return '/* args... */';
|
||||
} else {
|
||||
return $method->getParameterDeclarations();
|
||||
}
|
||||
}
|
||||
|
||||
public function generateImport(FactoryMethod $method)
|
||||
{
|
||||
return $this->indent . self::INDENT . "require_once '" . $method->getClass()->getFile() . "';" . "\n";
|
||||
}
|
||||
|
||||
public function generateCall(FactoryMethod $method)
|
||||
{
|
||||
$code = '';
|
||||
if ($method->acceptsVariableArguments()) {
|
||||
$code .= $this->indent . self::INDENT . '$args = func_get_args();' . "\n";
|
||||
}
|
||||
|
||||
$code .= $this->indent . self::INDENT . 'return ';
|
||||
if ($method->acceptsVariableArguments()) {
|
||||
$code .= 'call_user_func_array(array(\''
|
||||
. '\\' . $method->getClassName() . '\', \''
|
||||
. $method->getName() . '\'), $args);' . "\n";
|
||||
} else {
|
||||
$code .= '\\' . $method->getClassName() . '::'
|
||||
. $method->getName() . '('
|
||||
. $method->getParameterInvocations() . ');' . "\n";
|
||||
}
|
||||
|
||||
return $code;
|
||||
}
|
||||
|
||||
public function generateClosing()
|
||||
{
|
||||
return $this->indent . '}' . "\n";
|
||||
}
|
||||
|
||||
public function write()
|
||||
{
|
||||
file_put_contents($this->file, $this->code);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user