/**
  * @dataProvider annotationDataProvider
  */
 public function testChainableDecoratorAnnotation(array $parameters, array $expected)
 {
     $pageInfoProvider = $this->getMockBuilder('\\SMW\\PageInfo')->disableOriginalConstructor()->getMock();
     $pageInfoProvider->expects($this->atLeastOnce())->method('getModificationDate')->will($this->returnValue($parameters['modificationDate']));
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__);
     $this->applicationFactory->registerObject('Settings', Settings::newFromArray($parameters['settings']));
     $instance = new CategoryPropertyAnnotator(new NullPropertyAnnotator($semanticData), $parameters['categories']);
     $instance = new SortKeyPropertyAnnotator($instance, $parameters['sortkey']);
     $instance = new PredefinedPropertyAnnotator($instance, $pageInfoProvider);
     $instance->addAnnotation();
     $this->semanticDataValidator->assertThatPropertiesAreSet($expected, $instance->getSemanticData());
 }
 /**
  * @dataProvider specialPropertiesDataProvider
  */
 public function testAddSpecialProperties(array $parameters, array $expected)
 {
     $semanticData = $this->semanticDataFactory->setSubject($parameters['subject'])->newEmptySemanticData();
     $pageInfo = $this->getMockBuilder('\\SMW\\PageInfo')->disableOriginalConstructor()->getMock();
     foreach ($parameters['pageInfo'] as $method => $returnValue) {
         $pageInfo->expects($this->any())->method($method)->will($this->returnValue($returnValue));
     }
     $this->applicationFactory->registerObject('Settings', Settings::newFromArray($parameters['settings']));
     $instance = new PredefinedPropertyAnnotator(new NullPropertyAnnotator($semanticData), $pageInfo);
     $instance->addAnnotation();
     $this->semanticDataValidator->assertThatPropertiesAreSet($expected, $instance->getSemanticData());
 }