/**
  * @test
  */
 public function parseAnAbstractAndLoadWithOriginalClass()
 {
     $fooClass = Stagehand_PHP_Class_Parser::parse($this->_basic);
     $fooClass->setName('Stagehand_PHP_Class_Parser_AbstractTest_FooDummyTwo');
     $property = $fooClass->getProperty('baz');
     $property->setValue('Qux');
     $barClass = Stagehand_PHP_Class_Parser::parse($this->_extended);
     $barClass->setName('Stagehand_PHP_Class_Parser_AbstractTest_BarDummyTwo');
     $barClass->setParentClass($fooClass);
     $method = $barClass->getMethod('abstractPublicMethod');
     $method->setCode('return 10;');
     $barClass->load();
     $dummy = new Stagehand_PHP_Class_Parser_AbstractTest_BarDummyTwo();
     $this->assertEquals($dummy->abstractPublicMethod(), 10);
     $this->assertEquals($dummy->baz, 'Qux');
 }
    /**
     * @test
     */
    public function parseSomeClassesWithPreAndPostCodeOfClassDeclaration()
    {
        $classes = Stagehand_PHP_Class_Parser::parse(dirname(__FILE__) . '/ClassTest/HasOtherCodesTwo.php');
        $this->assertEquals(count($classes), 3);
        $foo = $classes[0];
        $bar = $classes[1];
        $baz = $classes[2];
        $this->assertType('Stagehand_PHP_Class', $foo);
        $this->assertEquals($foo->getName(), 'Stagehand_PHP_Class_Parser_ClassTest_HasOtherCodesTwo_Foo');
        $this->assertEquals($foo->getPreCode(), '$a = 10;');
        $this->assertEquals($foo->getPostCode(), '

$b = 20;');
        $this->assertType('Stagehand_PHP_Class', $bar);
        $this->assertEquals($bar->getName(), 'Stagehand_PHP_Class_Parser_ClassTest_HasOtherCodesTwo_Bar');
        $this->assertEquals($bar->getPreCode(), '

$b = 20;');
        $this->assertEquals($bar->getPostCode(), '

$c = 30;');
        $this->assertType('Stagehand_PHP_Class', $baz);
        $this->assertEquals($baz->getName(), 'Stagehand_PHP_Class_Parser_ClassTest_HasOtherCodesTwo_Baz');
        $this->assertEquals($baz->getPreCode(), '

$c = 30;');
        $this->assertEquals($baz->getPostCode(), '

$d = 40;');
    }
 /**
  * @test
  */
 public function parseAnInterfaceWithSetInterfaces()
 {
     $class = Stagehand_PHP_Class_Parser::parse(dirname(__FILE__) . '/InterfaceTest/HasOneInterface.php');
     $this->assertType('Stagehand_PHP_Class', $class);
     $this->assertEquals($class->getName(), 'Stagehand_PHP_Class_Parser_InterfaceTest_HasOneInterface');
     $this->assertTrue($class->isInterface());
     $interfaces = $class->getInterfaces();
     $this->assertEquals(count($interfaces), 1);
     $this->assertEquals($interfaces['Stagehand_PHP_Class_Parser_InterfaceTest_InterfaceOne'], 'Stagehand_PHP_Class_Parser_InterfaceTest_InterfaceOne');
     $class = Stagehand_PHP_Class_Parser::parse(dirname(__FILE__) . '/InterfaceTest/HasThreeInterfaces.php');
     $this->assertType('Stagehand_PHP_Class', $class);
     $this->assertEquals($class->getName(), 'Stagehand_PHP_Class_Parser_InterfaceTest_HasThreeInterface');
     $interfaces = $class->getInterfaces();
     $this->assertEquals(count($interfaces), 3);
     $this->assertEquals($interfaces['Stagehand_PHP_Class_Parser_InterfaceTest_InterfaceOne'], 'Stagehand_PHP_Class_Parser_InterfaceTest_InterfaceOne');
     $this->assertEquals($interfaces['Stagehand_PHP_Class_Parser_InterfaceTest_InterfaceTwo'], 'Stagehand_PHP_Class_Parser_InterfaceTest_InterfaceTwo');
     $this->assertEquals($interfaces['Stagehand_PHP_Class_Parser_InterfaceTest_InterfaceThree'], 'Stagehand_PHP_Class_Parser_InterfaceTest_InterfaceThree');
 }
    /**
     * @test
     */
    public function parseFromTextContents()
    {
        $contents = <<<CONTENTS
<?php
class Stagehand_PHP_Class_ParserTest_TextContents
{
}
CONTENTS;
        $class = Stagehand_PHP_Class_Parser::parseContents($contents);
        $this->assertType('Stagehand_PHP_Class', $class);
        $this->assertEquals($class->getName(), 'Stagehand_PHP_Class_ParserTest_TextContents');
    }