/**
  * @since 2.0
  *
  * @param SemanticData $semanticData
  * @param array $categories
  *
  * @return CategoryPropertyAnnotator
  */
 public function newCategoryPropertyAnnotator(SemanticData $semanticData, array $categories)
 {
     $categoryPropertyAnnotator = new CategoryPropertyAnnotator($this->newNullPropertyAnnotator($semanticData), $categories);
     $categoryPropertyAnnotator->setShowHiddenCategoriesState(ApplicationFactory::getInstance()->getSettings()->get('smwgShowHiddenCategories'));
     $categoryPropertyAnnotator->setCategoryInstanceUsageState(ApplicationFactory::getInstance()->getSettings()->get('smwgCategoriesAsInstances'));
     $categoryPropertyAnnotator->setCategoryHierarchyUsageState(ApplicationFactory::getInstance()->getSettings()->get('smwgUseCategoryHierarchy'));
     return $categoryPropertyAnnotator;
 }
 /**
  * @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__);
     $categoryPropertyAnnotator = new CategoryPropertyAnnotator(new NullPropertyAnnotator($semanticData), $parameters['categories']);
     $categoryPropertyAnnotator->setShowHiddenCategoriesState($parameters['settings']['smwgShowHiddenCategories']);
     $categoryPropertyAnnotator->setCategoryInstanceUsageState($parameters['settings']['smwgCategoriesAsInstances']);
     $categoryPropertyAnnotator->setCategoryHierarchyUsageState($parameters['settings']['smwgUseCategoryHierarchy']);
     $sortKeyPropertyAnnotator = new SortKeyPropertyAnnotator($categoryPropertyAnnotator, $parameters['sortkey']);
     $predefinedPropertyAnnotator = new PredefinedPropertyAnnotator($sortKeyPropertyAnnotator, $pageInfoProvider);
     $predefinedPropertyAnnotator->setPredefinedPropertyList($parameters['settings']['smwgPageSpecialProperties']);
     $predefinedPropertyAnnotator->addAnnotation();
     $this->semanticDataValidator->assertThatPropertiesAreSet($expected, $predefinedPropertyAnnotator->getSemanticData());
 }
 /**
  * @dataProvider hiddenCategoriesDataProvider
  */
 public function testAddCategoriesWithHiddenCategories(array $parameters, array $expected)
 {
     $expectedPageLookup = $parameters['settings']['smwgShowHiddenCategories'] ? $this->never() : $this->atLeastOnce();
     $wikiPage = $this->getMockBuilder('\\WikiPage')->disableOriginalConstructor()->getMock();
     $wikiPage->expects($expectedPageLookup)->method('getHiddenCategories')->will($this->returnValue($parameters['hidCategories']));
     $pageCreator = $this->getMockBuilder('\\SMW\\MediaWiki\\PageCreator')->disableOriginalConstructor()->getMock();
     $pageCreator->expects($expectedPageLookup)->method('createPage')->will($this->returnValue($wikiPage));
     $semanticData = $this->semanticDataFactory->setSubject(new DIWikiPage(__METHOD__, $parameters['namespace'], ''))->newEmptySemanticData();
     $this->applicationFactory->registerObject('PageCreator', $pageCreator);
     $instance = new CategoryPropertyAnnotator(new NullPropertyAnnotator($semanticData), $parameters['categories']);
     $instance->setShowHiddenCategoriesState($parameters['settings']['smwgShowHiddenCategories']);
     $instance->setCategoryInstanceUsageState($parameters['settings']['smwgCategoriesAsInstances']);
     $instance->setCategoryHierarchyUsageState($parameters['settings']['smwgUseCategoryHierarchy']);
     $instance->addAnnotation();
     $this->semanticDataValidator->assertThatPropertiesAreSet($expected, $semanticData);
 }