/** * @test */ public function createAbstractClassGenerator() { $class = new Stagehand_PHP_Class('Example'); $class->defineAbstract(); $generator = Stagehand_PHP_Class_CodeGenerator::create($class); $this->assertType('Stagehand_PHP_Class_CodeGenerator_AbstractClass', $generator); }
/** * Creates a code generator. * * @param Stagehand_PHP_Class $class * @param mixed */ public static function create(Stagehand_PHP_Class $class) { if ($class->isAbstract()) { return new Stagehand_PHP_Class_CodeGenerator_AbstractClass($class); } elseif ($class->isInterface()) { return new Stagehand_PHP_Class_CodeGenerator_Interface($class); } else { return new Stagehand_PHP_Class_CodeGenerator_Class($class); } }
/** * unticked_class_declaration_statement_2 * interface_entry T_STRING interface_extends_list '{' class_statement_list '}' */ protected function unticked_class_declaration_statement_2($params) { $className = $params[1]->getValue(); $class = new Stagehand_PHP_Class($className); $class->defineInterface(); if ($params[2] && is_array($params[2])) { foreach ($params[2] as $interface) { $class->addInterface($interface); } } $this->_declarClass($class); return parent::execute(__FUNCTION__, $params); }
/** * @test */ public function handlePreAndPostCodeOfClassDeclaration() { $preCode = '$preCode = 10;'; $postCode = '$postCode = 20;'; $class = new Stagehand_PHP_Class('ExampleForPreAndPostCode'); $class->setPreCode($preCode); $class->setPostCode($postCode); $this->assertEquals($class->getPreCode(), $preCode); $this->assertEquals($class->getPostCode(), $postCode); }
/** * A function for test of code generator. * * @param string $name class name */ function define_class_for_code_genration_test() { $className = 'ExampleForCodeGenerationTest'; $class = new Stagehand_PHP_Class($className); $publicProperty = new Stagehand_PHP_Class_Property('a'); $protectedProperty = new Stagehand_PHP_Class_Property('b', 100); $privateProperty = new Stagehand_PHP_Class_Property('c', array(1, 3, 5)); $staticProperty = new Stagehand_PHP_Class_Property('d', 'static'); $protectedProperty->defineProtected(); $privateProperty->definePrivate(); $staticProperty->defineStatic(); $argumentA = new Stagehand_PHP_Class_Method_Argument('a'); $argumentB = new Stagehand_PHP_Class_Method_Argument('b'); $argumentC = new Stagehand_PHP_Class_Method_Argument('c'); $argumentD = new Stagehand_PHP_Class_Method_Argument('d'); $argumentE = new Stagehand_PHP_Class_Method_Argument('e'); $argumentF = new Stagehand_PHP_Class_Method_Argument('f'); $argumentB->setTypeHinting('array'); $argumentC->setRequirement(false); $argumentD->setRequirement(false); $argumentD->setValue('d'); $argumentE->setRequirement(false); $argumentE->setValue(array(2, 4, 6)); $argumentF->setReference(); $publicMethod = new Stagehand_PHP_Class_Method('foo'); $protectedMethod = new Stagehand_PHP_Class_Method('bar'); $privateMethod = new Stagehand_PHP_Class_Method('baz'); $staticMethod = new Stagehand_PHP_Class_Method('qux'); $abstractMethod = new Stagehand_PHP_Class_Method('quux'); $abstractStaticMethod = new Stagehand_PHP_Class_Method('corge'); $finalMethod = new Stagehand_PHP_Class_Method('grault'); $finalStaticMethod = new Stagehand_PHP_Class_Method('garply'); $referenceMethod = new Stagehand_PHP_Class_Method('waldo'); $protectedMethod->defineProtected(); $protectedMethod->addArgument($argumentA); $protectedMethod->addArgument($argumentB); $protectedMethod->setCode('return true;'); $privateMethod->definePrivate(); $privateMethod->addArgument($argumentC); $privateMethod->addArgument($argumentD); $privateMethod->setCode('$c += 1; return $d;'); $staticMethod->defineStatic(); $staticMethod->addArgument($argumentE); $abstractMethod->defineAbstract(); $abstractStaticMethod->defineAbstract(); $abstractStaticMethod->defineStatic(); $finalMethod->defineFinal(); $finalMethod->addArgument($argumentF); $finalStaticMethod->defineFinal(); $finalStaticMethod->defineStatic(); $referenceMethod->setReference(); $constant1 = new Stagehand_PHP_Class_Constant('A'); $constant2 = new Stagehand_PHP_Class_Constant('B', 10); $constant3 = new Stagehand_PHP_Class_Constant('C', 'text constant'); $class->addProperty($publicProperty); $class->addProperty($protectedProperty); $class->addProperty($privateProperty); $class->addProperty($staticProperty); $class->addMethod($publicMethod); $class->addMethod($protectedMethod); $class->addMethod($privateMethod); $class->addMethod($staticMethod); $class->addMethod($abstractMethod); $class->addMethod($abstractStaticMethod); $class->addMethod($finalMethod); $class->addMethod($finalStaticMethod); $class->addMethod($referenceMethod); $class->addConstant($constant1); $class->addConstant($constant2); $class->addConstant($constant3); return $class; }
/** * @test */ public function generateFinalClassCode() { $className = 'ExampleForFinalClassGeneration'; $class = new Stagehand_PHP_Class($className); $class->defineFinal(); $generator = new Stagehand_PHP_Class_CodeGenerator_Class($class); $code = $generator->generate(); $this->assertRegExp("/^final class {$className}/", $code); }