/**
  * @depends testDefaultClassImplementationIsCreatedWhenThereIsNoDefinedClassTypeImplementation
  */
 public function testDefaultClassImplementationIsCreatedBasedOnGlobalClassTypeImplementation()
 {
     $this->globalClassOptions->setAccessorsEnabled(true)->setAccessorsStyle(new CamelCaseStyle());
     $this->classMap->registerClass('helicopter', 'ConcreteXylophone');
     $implementation = new ClassTypeImplementation('helicopter');
     $implementation->setClassName('ConcreteXylophone')->setAccessorsEnabled(true)->setAccessorsStyle(new CamelCaseStyle());
     $this->assertEquals($implementation, $this->object->getClassTypeImplementation('helicopter'));
 }
 public function getClassTypeImplementation($name)
 {
     if (isset($this->classImplementations[$name])) {
         $classOptions = $this->classImplementations[$name];
     } else {
         $classOptions = new ClassTypeImplementation($name);
         if ($this->globalClassOptions->getAccessorsStyle()) {
             $classOptions->setAccessorsStyle($this->globalClassOptions->getAccessorsStyle());
         }
         $classOptions->setAccessorsEnabled($this->globalClassOptions->isAccessorsEnabled());
     }
     if (!$classOptions->getClassName()) {
         $classOptions->setClassName($this->classMap->getClass($name));
     }
     return $classOptions;
 }
 public function testProperHandlingOfCircularReferences()
 {
     $user = new ClassOutline('User');
     $admin = new ClassOutline('Admin');
     $user->addProperty(new PropertyOutline('admin', $admin));
     $admin->addProperty(new PropertyOutline('user', $user));
     $this->classMap->registerClass('User', 'User')->registerClass('Admin', 'Admin');
     $userType = $this->object->generate($user, $this->implementation);
     $properties = $userType->getProperties();
     $adminType = $properties['admin']->getType();
     $properties = $adminType->getProperties();
     $this->assertSame($userType, $properties['user']->getType());
 }