/**
  * @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);
 }
Пример #2
0
 /**
  * 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);
     }
 }
Пример #3
0
 /**
  * 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);
 }
Пример #4
0
 /**
  * @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);
 }
Пример #5
0
/**
 * 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;
}
Пример #6
0
 /**
  * @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);
 }