/**
  * @depends testDefaultPropertyImplementationWithAccessorsButWithoutStyle
  */
 public function testDefaultPropertyImplementationWithAccessorsAndStyle()
 {
     $this->object->setAccessorsEnabled(true)->setAccessorsStyle(new CamelCaseStyle());
     $propertyName = 'inferior';
     $propertyImplementation = $this->object->getImplementationForProperty($propertyName);
     $this->assertSame('setInferior', $propertyImplementation->getSetter(), 'setter name should be null');
     $this->assertSame('getInferior', $propertyImplementation->getGetter(), 'getter name should be null');
 }
 public function testDefaultClassImplementationIsCreatedWhenThereIsNoDefinedClassTypeImplementation()
 {
     $implementation = new ClassTypeImplementation('helicopter');
     $implementation->setClassName('ConcreteXylophone');
     $implementation->setAccessorsEnabled(false);
     $this->classMap->registerClass('helicopter', 'ConcreteXylophone');
     $result = $this->object->getClassTypeImplementation('helicopter');
     $this->assertEquals($implementation, $result);
 }
 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;
 }
 protected function createClassImplementation($typeName, $options)
 {
     $globalClassOptions = $this->implementation->getGlobalClassImplementation();
     $classImplementation = new ClassTypeImplementation($typeName);
     // default class implementation from global class implementation settings
     $classImplementation->setAccessorsEnabled($globalClassOptions->isAccessorsEnabled());
     if ($globalClassOptions->isAccessorsEnabled() && $globalClassOptions->getAccessorsStyle()) {
         $classImplementation->setAccessorsStyle($globalClassOptions->getAccessorsStyle());
     }
     if (isset($options['class'])) {
         $classImplementation->setClassName($options['class']);
     }
     if (isset($options['accessors'])) {
         $accessors = $options['accessors'];
         if (isset($accessors['style'])) {
             $styleName = $accessors['style'];
             if (!$this->styles->hasStyle($styleName)) {
                 $msg = sprintf('Cannot set global setters and getters style to "%s" since style does not exist', $styleName);
                 throw new ImplementationLoadingException($msg);
             }
             $classImplementation->setAccessorsStyle($this->styles->getStyle($styleName))->setAccessorsEnabled(true);
         }
         if (isset($accessors['enabled'])) {
             $classImplementation->setAccessorsEnabled($accessors['enabled']);
         }
     }
     foreach ((array) @$options['properties'] as $propertyName => $propertyOptions) {
         $propertyImplementation = $this->createPropertyImplementation($propertyName, $propertyOptions, $classImplementation);
         $classImplementation->addPropertyImplementation($propertyImplementation);
     }
     return $classImplementation;
 }