Skip to content

Instantly share code, notes, and snippets.

@justinrainbow
Created February 20, 2014 15:52
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save justinrainbow/9116789 to your computer and use it in GitHub Desktop.
Save justinrainbow/9116789 to your computer and use it in GitHub Desktop.
Create PhpSpec base specs from existing code
<?php
require_once 'vendor/autoload.php';
$class = $argv[1];
$class = str_replace('/', '\\', $class);
$refl = new ReflectionClass($class);
$constructor = $refl->getConstructor();
$mocks = [];
$uses = [
'PhpSpec\ObjectBehavior',
'Prophecy\Argument'
];
$vars = [];
$args = [];
if ($constructor instanceof ReflectionMethod) {
$parameters = $constructor->getParameters();
foreach ($parameters as $param) {
$paramClass = $param->getClass();
if ($paramClass instanceof ReflectionClass) {
$uses[] = $paramClass->getName();
$mocks[] = sprintf('%s $%s', $paramClass->getShortName(), $param->getName());
} else {
$vars[] = sprintf(
'$%s = %s',
$param->getName(),
$param->isArray() ? 'array()' : 'null'
);
}
$args[] = sprintf('$%s', $param->getName());
}
}
$tmpl = ltrim(substr(file_get_contents(__FILE__), __COMPILER_HALT_OFFSET__));
$tokens = [
'{uses}' => 'use ' . join(";\nuse ", array_unique($uses)) . ';',
'{namespace}' => $refl->getNamespaceName(),
'{class}' => $refl->getShortName(),
'{vars}' => '',
'{mocks}' => join(', ', $mocks),
'{args}' => join(', ', $args),
];
if (count($vars)) {
$tokens['{vars}'] = join("\n; ", $vars) . ";\n\n ";
}
$file = 'spec/' . str_replace('\\', '/', $refl->getName()) . 'Spec.php';
$dir = dirname($file);
if (! is_dir($dir)) {
mkdir($dir, 0755, true);
}
file_put_contents($file, strtr($tmpl, $tokens));
__halt_compiler();
<?php
namespace {namespace};
{uses}
class {class}Spec extends ObjectBehavior
{
function let({mocks})
{
{vars}$this->beConstructedWith({args});
}
function it_is_initializable()
{
$this->shouldHaveType('{namespace}\{class}');
}
}
@jkille
Copy link

jkille commented Jul 29, 2021

Hey what's up. thieving piece of shit bitch mother fucker
I should come to Arizona and beat ur fucking face in. And curb stomp on your head

@jkille
Copy link

jkille commented Jul 29, 2021

You stupid fuck

@jkille
Copy link

jkille commented Jul 29, 2021

Gonna get u. And ur lil circle jerkin group

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment