/**
  * Checks if the passed value is valid.
  *
  * @param FileDescriptor|ClassDescriptor|InterfaceDescriptor|TraitDescriptor $value      The value that should
  *     be validated.
  * @param Constraint                                                         $constraint The constraint for
  *     the validation.
  *
  * @throws ConstraintDefinitionException if this is not a constraint on a PropertyDescriptor object.
  */
 public function validate($value, Constraint $constraint)
 {
     if (!$value instanceof FileDescriptor && !$value instanceof ClassDescriptor && !$value instanceof InterfaceDescriptor && !$value instanceof TraitDescriptor) {
         throw new ConstraintDefinitionException('The HasPackageWithSubpackageValidator validator may only be used on files, classes, ' . 'interfaces and traits');
     }
     if ($value->getTags()->get('subpackage', new Collection())->count() > 0 && $value->getTags()->get('package', new Collection())->count() < 1) {
         $this->context->addViolationAt('package', $constraint->message, array(), null, null, $constraint->code);
     }
 }
 /**
  * Checks if the passed value is valid.
  *
  * @param FileDescriptor|ClassDescriptor|InterfaceDescriptor|TraitDescriptor $value      The value that should
  *     be validated.
  * @param Constraint                                                         $constraint The constraint for
  *     the validation.
  *
  * @throws ConstraintDefinitionException if this is not a constraint on a PropertyDescriptor object.
  */
 public function validate($value, Constraint $constraint)
 {
     if (!$value instanceof FileDescriptor && !$value instanceof ClassDescriptor && !$value instanceof InterfaceDescriptor && !$value instanceof TraitDescriptor) {
         throw new ConstraintDefinitionException('The HasSinglePackage validator may only be used on files, classes, interfaces and traits');
     }
     if ($value->getTags()->get('package', new Collection())->count() > 1) {
         $this->context->addViolationAt('package', $constraint->message);
     }
 }
 /**
  * @covers phpDocumentor\Descriptor\TraitDescriptor::getMagicProperties
  */
 public function testMagicPropertiesReturnsExpectedCollectionWithTags()
 {
     $mockTagPropertyDescriptor = m::mock('phpDocumentor\\Descriptor\\Tag\\PropertyDescriptor');
     $mockTagPropertyDescriptor->shouldReceive('getVariableName')->andReturn('Sample');
     $mockTagPropertyDescriptor->shouldReceive('getDescription')->andReturn('Sample description');
     $mockTagPropertyDescriptor->shouldReceive('getTypes')->andReturn(new Collection());
     $propertyCollection = new Collection(array($mockTagPropertyDescriptor));
     $this->fixture->getTags()->set('property', $propertyCollection);
     $this->assertInstanceOf('phpDocumentor\\Descriptor\\Collection', $this->fixture->getMagicProperties());
     $magicPropertiesCollection = $this->fixture->getMagicProperties();
     $this->assertSame(1, $magicPropertiesCollection->count());
     $this->assertSame('Sample', $magicPropertiesCollection[0]->getName());
     $this->assertSame('Sample description', $magicPropertiesCollection[0]->getDescription());
     $this->assertInstanceOf('phpDocumentor\\Descriptor\\Collection', $magicPropertiesCollection[0]->getTypes());
     $this->assertSame(0, $magicPropertiesCollection[0]->getTypes()->count());
     $this->assertSame($this->fixture, $magicPropertiesCollection[0]->getParent());
 }