public function testImportOfRecordValues()
 {
     $this->importedTitles = array('Property:Has record number field', 'Property:Has record page field', 'Property:Has record text field', 'Property:Has record type', 'Property:Has record type for single test', 'RecordDataTypePage', 'RecordDataTypeRegressionTest/WithSubpage', 'RecordDataTypeRegressionTest');
     $this->titleValidator->assertThatTitleIsKnown($this->importedTitles);
     $title = Title::newFromText('RecordDataTypeRegressionTest');
     $expectedCategoryAsWikiValue = array('property' => new DIProperty('_INST'), 'propertyValues' => array('Regression test', 'Data type regression test', 'Record type regression test'));
     $expectedSomeProperties = array('properties' => array(DIProperty::newFromUserLabel('RecordDataTypePage'), DIProperty::newFromUserLabel('BarText'), DIProperty::newFromUserLabel('BooPage'), DIProperty::newFromUserLabel('FooPage'), DIProperty::newFromUserLabel('QyuPage'), new DIProperty('_ASK'), new DIProperty('_MDAT'), new DIProperty('_SKEY'), new DIProperty('_SOBJ'), new DIProperty('_INST')));
     $property = DIProperty::newFromUserLabel('Has record type for single test');
     $valueString = 'ForSingleTestAsPage;ForSingleTestAsText;3333';
     if ($property->findPropertyTypeID() === '_rec') {
         $valueString = 'ForSingleTestAsPage; ForSingleTestAsText; 3333';
     }
     $expectedRecordTypeValuesAsWikiValue = array('subject' => DIWikiPage::newFromTitle($title), 'record' => $property, 'property' => $property, 'propertyValues' => array($valueString, '?; ?; ?'));
     $expectedRecordPageFieldValuesAsWikiValue = array('subject' => DIWikiPage::newFromTitle($title), 'record' => DIProperty::newFromUserLabel('Has record type'), 'property' => DIProperty::newFromUserLabel('Has record page field'), 'propertyValues' => array('FooPage', 'QyuPageOnSubobject', 'QyuPage', 'XeuiPageOnSubobject', 'RecordDataTypePage', 'BooPage'));
     $expectedRecordTextFieldValuesAsWikiValue = array('subject' => DIWikiPage::newFromTitle($title), 'record' => DIProperty::newFromUserLabel('Has record type'), 'property' => DIProperty::newFromUserLabel('Has record text field'), 'propertyValues' => array('BarText', 'ForSingleTestAsText', 'FooText', 'XeuiTextOnSubobject'));
     $expectedRecordNumberFieldValuesAsNumber = array('subject' => DIWikiPage::newFromTitle(Title::newFromText('RecordDataTypeRegressionTest/WithSubpage')), 'record' => DIProperty::newFromUserLabel('Has record type'), 'property' => DIProperty::newFromUserLabel('Has record number field'), 'propertyValues' => array(1111, 9001, 9999, 1009));
     $semanticDataFinder = new ByPageSemanticDataFinder();
     $semanticDataFinder->setTitle($title)->setStore($this->getStore());
     $semanticDataBatches = array($this->getStore()->getSemanticData(DIWikiPage::newFromTitle($title)));
     foreach ($semanticDataBatches as $semanticData) {
         $this->semanticDataValidator->assertThatCategoriesAreSet($expectedCategoryAsWikiValue, $semanticData);
         $this->semanticDataValidator->assertThatPropertiesAreSet($expectedSomeProperties, $semanticData);
         $this->assertThatSemanticDataValuesAreSet($expectedRecordTypeValuesAsWikiValue, $semanticData);
     }
     $this->assertThatRecordValuesAreSet($expectedRecordTypeValuesAsWikiValue);
     $this->assertThatRecordValuesAreSet($expectedRecordPageFieldValuesAsWikiValue);
     $this->assertThatRecordValuesAreSet($expectedRecordTextFieldValuesAsWikiValue);
     $this->assertThatRecordValuesAreSet($expectedRecordNumberFieldValuesAsNumber);
 }
 /**
  * @see SMWStore::deleteSubject
  *
  * @since 1.8
  * @param Title $title
  */
 public function deleteSubject(Title $title)
 {
     // @deprecated since 2.1, use 'SMW::SQLStore::BeforeDeleteSubjectComplete'
     wfRunHooks('SMWSQLStore3::deleteSubjectBefore', array($this->store, $title));
     wfRunHooks('SMW::SQLStore::BeforeDeleteSubjectComplete', array($this->store, $title));
     $id = $this->store->getObjectIds()->getSMWPageID($title->getDBkey(), $title->getNamespace(), $title->getInterwiki(), '', false);
     $emptySemanticData = new SemanticData(DIWikiPage::newFromTitle($title));
     $subobjects = $this->getSubobjects($emptySemanticData->getSubject());
     $this->doDataUpdate($emptySemanticData);
     if ($title->getNamespace() === SMW_NS_CONCEPT) {
         // make sure to clear caches
         $db = $this->store->getConnection();
         $db->delete('smw_fpt_conc', array('s_id' => $id), 'SMW::deleteSubject::Conc');
         $db->delete(SMWSQLStore3::CONCEPT_CACHE_TABLE, array('o_id' => $id), 'SMW::deleteSubject::Conccache');
     }
     // Mark subject/subobjects with a special IW, the final removal is being
     // triggered by the `ByIdDataRebuildDispatcher`
     $this->store->getObjectIds()->updateInterwikiField($id, $emptySemanticData->getSubject(), SMW_SQL3_SMWDELETEIW);
     foreach ($subobjects as $smw_id => $subobject) {
         $this->store->getObjectIds()->updateInterwikiField($smw_id, $subobject, SMW_SQL3_SMWDELETEIW);
     }
     // 1.9.0.1
     // The update of possible associative entities is handled by DeleteSubjectJob which is invoked during
     // the ArticleDelete hook
     // @deprecated since 2.1, use 'SMW::SQLStore::AfterDeleteSubjectComplete'
     wfRunHooks('SMWSQLStore3::deleteSubjectAfter', array($this->store, $title));
     wfRunHooks('SMW::SQLStore::AfterDeleteSubjectComplete', array($this->store, $title));
 }
 protected function createDataItemByPropertyId($propertyId)
 {
     $dataItem = null;
     switch ($propertyId) {
         case DIProperty::TYPE_MODIFICATION_DATE:
             $dataItem = DITime::newFromTimestamp($this->pageInfo->getModificationDate());
             break;
         case DIProperty::TYPE_CREATION_DATE:
             $dataItem = DITime::newFromTimestamp($this->pageInfo->getCreationDate());
             break;
         case DIProperty::TYPE_NEW_PAGE:
             $dataItem = new DIBoolean($this->pageInfo->isNewPage());
             break;
         case DIProperty::TYPE_LAST_EDITOR:
             $dataItem = $this->pageInfo->getLastEditor() ? DIWikiPage::newFromTitle($this->pageInfo->getLastEditor()) : null;
             break;
         case DIProperty::TYPE_MEDIA:
             $dataItem = $this->pageInfo->isFilePage() && $this->pageInfo->getMediaType() !== '' && $this->pageInfo->getMediaType() !== null ? new DIBlob($this->pageInfo->getMediaType()) : null;
             break;
         case DIProperty::TYPE_MIME:
             $dataItem = $this->pageInfo->isFilePage() && $this->pageInfo->getMimeType() !== '' && $this->pageInfo->getMimeType() !== null ? new DIBlob($this->pageInfo->getMimeType()) : null;
             break;
     }
     return $dataItem;
 }
 /**
  * @see PropertyAnnotatorDecorator::addPropertyValues
  */
 protected function addPropertyValues()
 {
     if (!$this->redirectTargetFinder->hasRedirectTarget()) {
         return;
     }
     $this->getSemanticData()->addPropertyObjectValue(new DIProperty('_REDI'), DIWikiPage::newFromTitle($this->redirectTargetFinder->getRedirectTarget()));
 }
 public function semanticDataProvider()
 {
     // Is a dataprovider therefore can't use the setUp
     $this->semanticDataFactory = UtilityFactory::getInstance()->newSemanticDataFactory();
     $this->dataValueFactory = DataValueFactory::getInstance();
     $title = Title::newFromText('Foo');
     #0 Empty container
     $foo = $this->semanticDataFactory->setSubject(DIWikiPage::newFromTitle($title))->newEmptySemanticData();
     $provider[] = array($foo);
     #1 Single entry
     $foo = $this->semanticDataFactory->setSubject(DIWikiPage::newFromTitle($title))->newEmptySemanticData();
     $foo->addDataValue($this->dataValueFactory->newPropertyValue('Has fooQuex', 'Bar'));
     $provider[] = array($foo);
     // #2 Single + single subobject entry
     $foo = $this->semanticDataFactory->setSubject(DIWikiPage::newFromTitle($title))->newEmptySemanticData();
     $foo->addDataValue($this->dataValueFactory->newPropertyValue('Has fooQuex', 'Bar'));
     $subobject = new Subobject($title);
     $subobject->setSemanticData('Foo');
     $subobject->addDataValue($this->dataValueFactory->newPropertyValue('Has subobjects', 'Bam'));
     $foo->addPropertyObjectValue($subobject->getProperty(), $subobject->getContainer());
     $provider[] = array($foo);
     #3 Multiple entries
     $foo = $this->semanticDataFactory->setSubject(DIWikiPage::newFromTitle($title))->newEmptySemanticData();
     $foo->addDataValue($this->dataValueFactory->newPropertyValue('Has fooQuex', 'Bar'));
     $foo->addDataValue($this->dataValueFactory->newPropertyValue('Has queez', 'Xeey'));
     $subobject = new Subobject($title);
     $subobject->setSemanticData('Foo');
     $subobject->addDataValue($this->dataValueFactory->newPropertyValue('Has subobjects', 'Bam'));
     $subobject->addDataValue($this->dataValueFactory->newPropertyValue('Has fooQuex', 'Fuz'));
     $subobject->setSemanticData('Bar');
     $subobject->addDataValue($this->dataValueFactory->newPropertyValue('Has fooQuex', 'Fuz'));
     $foo->addPropertyObjectValue($subobject->getProperty(), $subobject->getContainer());
     $provider[] = array($foo);
     return $provider;
 }
 private function addListenersToCollection()
 {
     $this->eventListenerCollection->registerCallback('factbox.cache.delete', function ($dispatchContext) {
         if ($dispatchContext->has('subject')) {
             $title = $dispatchContext->get('subject')->getTitle();
         } else {
             $title = $dispatchContext->get('title');
         }
         $applicationFactory = ApplicationFactory::getInstance();
         $applicationFactory->getCache()->delete($applicationFactory->newCacheFactory()->getFactboxCacheKey($title->getArticleID()));
     });
     $this->eventListenerCollection->registerCallback('exporter.reset', function () {
         Exporter::getInstance()->clear();
     });
     $this->eventListenerCollection->registerCallback('query.comparator.reset', function () {
         QueryComparator::getInstance()->clear();
     });
     /**
      * Emitted during NewRevisionFromEditComplete, UpdateJob, ArticleDelete
      */
     $this->eventListenerCollection->registerCallback('cached.propertyvalues.prefetcher.reset', function ($dispatchContext) {
         if ($dispatchContext->has('title')) {
             $subject = DIWikiPage::newFromTitle($dispatchContext->get('title'));
         } else {
             $subject = $dispatchContext->get('subject');
         }
         wfDebugLog('smw', 'Clear CachedPropertyValuesPrefetcher for ' . $subject->getHash());
         $applicationFactory = ApplicationFactory::getInstance();
         $applicationFactory->getCachedPropertyValuesPrefetcher()->resetCacheBy($subject);
         $dispatchContext->set('propagationstop', true);
     });
     $this->registerStateChangeEvents();
     return $this->eventListenerCollection;
 }
 protected function createDataItemByPropertyId($propertyId)
 {
     $dataItem = null;
     switch ($propertyId) {
         case DIProperty::TYPE_MODIFICATION_DATE:
             $dataItem = DITime::newFromTimestamp($this->pageInfo->getModificationDate());
             break;
         case DIProperty::TYPE_CREATION_DATE:
             $dataItem = DITime::newFromTimestamp($this->pageInfo->getCreationDate());
             break;
         case DIProperty::TYPE_NEW_PAGE:
             $dataItem = new DIBoolean($this->pageInfo->isNewPage());
             break;
         case DIProperty::TYPE_LAST_EDITOR:
             $dataItem = $this->pageInfo->getLastEditor() ? DIWikiPage::newFromTitle($this->pageInfo->getLastEditor()) : null;
             break;
         case DIProperty::TYPE_MEDIA:
             // @codingStandardsIgnoreStart phpcs, ignore --sniffs=Generic.Files.LineLength
             $dataItem = $this->pageInfo->isFilePage() && $this->pageInfo->getMediaType() !== '' && $this->pageInfo->getMediaType() !== null ? new DIBlob($this->pageInfo->getMediaType()) : null;
             // @codingStandardsIgnoreEnd
             break;
         case DIProperty::TYPE_MIME:
             // @codingStandardsIgnoreStart phpcs, ignore --sniffs=Generic.Files.LineLength
             $dataItem = $this->pageInfo->isFilePage() && $this->pageInfo->getMimeType() !== '' && $this->pageInfo->getMimeType() !== null ? new DIBlob($this->pageInfo->getMimeType()) : null;
             // @codingStandardsIgnoreEnd
             break;
     }
     return $dataItem;
 }
 public function testGetPropertyValues()
 {
     $instance = StubSemanticData::newFromSemanticData(new SemanticData(DIWikiPage::newFromTitle(Title::newFromText(__METHOD__))), $this->store);
     $this->assertInstanceOf('SMW\\DIWikiPage', $instance->getSubject());
     $this->assertEmpty($instance->getPropertyValues(new DIProperty('unknownInverseProperty', true)));
     $this->assertEmpty($instance->getPropertyValues(new DIProperty('unknownProperty')));
 }
 public function testPageImportToCreateRedirect()
 {
     $this->importedTitles = array('SimplePageRedirectRegressionTest', 'ToBeSimplePageRedirect');
     $this->titleValidator->assertThatTitleIsKnown($this->importedTitles);
     $main = Title::newFromText('SimplePageRedirectRegressionTest');
     $expectedCategoryAsWikiValue = array('property' => new DIProperty(DIProperty::TYPE_CATEGORY), 'propertyValues' => array('Regression test', 'Redirect test', 'Simple redirect test'));
     $expectedSomeProperties = array('properties' => array(new DIProperty('Has regression test')));
     $expectedRedirectAsWikiValue = array('property' => new DIProperty('_REDI'), 'propertyValues' => array('ToBeSimplePageRedirect', 'NewPageRedirectRegressionTest', 'NewTargetPageRedirectRegressionTest'));
     $newRedirectPage = $this->createPageWithRedirectFor('NewPageRedirectRegressionTest', 'SimplePageRedirectRegressionTest');
     $this->testEnvironment->executePendingDeferredUpdates();
     $this->movePageToTargetRedirect($newRedirectPage, 'NewTargetPageRedirectRegressionTest');
     $this->testEnvironment->executePendingDeferredUpdates();
     $this->pageRefresher->doRefreshPoolOfPages(array($main, $newRedirectPage, 'NewTargetPageRedirectRegressionTest'));
     $this->testEnvironment->executePendingDeferredUpdates();
     $semanticDataBatches = array($this->getStore()->getSemanticData(DIWikiPage::newFromTitle($main)));
     $this->assertThatCategoriesAreSet($expectedCategoryAsWikiValue, $semanticDataBatches);
     $this->assertThatPropertiesAreSet($expectedSomeProperties, $semanticDataBatches);
     $inSemanticDataFetcher = new InSemanticDataFetcher($this->getStore());
     $inSemanticData = $inSemanticDataFetcher->getSemanticData(DIWikiPage::newFromTitle($main));
     // When running sqlite, the database select returns an empty result which
     // is probably due to some DB-prefix issues in MW's DatabaseBaseSqlite
     // implementation and for non-sqlite see #212 / bug 62856
     if ($inSemanticData->getProperties() === array()) {
         $this->markTestSkipped("Skipping test either because of sqlite or MW-{$GLOBALS['wgVersion']} / bug 62856");
     }
     $this->assertThatSemanticDataValuesForPropertyAreSet($expectedRedirectAsWikiValue, $inSemanticData);
 }
 /**
  * @dataProvider removePropertyObjectProvider
  */
 public function testRemovePropertyObjectValue($title, $property, $dataItem)
 {
     $instance = StubSemanticData::newFromSemanticData(new SemanticData(DIWikiPage::newFromTitle($title)), $this->store);
     $instance->addPropertyObjectValue($property, $dataItem);
     $this->assertFalse($instance->isEmpty());
     $instance->removePropertyObjectValue($property, $dataItem);
     $this->assertTrue($instance->isEmpty());
 }
 public function dataItemDataProvider()
 {
     // Single
     $subject = array(DIWikiPage::newFromTitle(Title::newFromText(__METHOD__)));
     // Multiple
     $subjects = array(DIWikiPage::newFromTitle(Title::newFromText(__METHOD__ . 'm-0')), DIWikiPage::newFromTitle(Title::newFromText(__METHOD__ . 'm-1')), DIWikiPage::newFromTitle(Title::newFromText(__METHOD__ . 'm-2')));
     return array(array($subjects, array(), array('_PVAL', '_LIST'), array('diff' => true, 'job' => true)), array(array(), $subjects, array('_PVAL', '_LIST'), array('diff' => true, 'job' => true)), array($subject, $subjects, array('_PVAL', '_LIST'), array('diff' => true, 'job' => true)), array($subject, array(), array('_PVAL', '_LIST'), array('diff' => true, 'job' => true)), array($subject, array(), array('_PVAL'), array('diff' => true, 'job' => true)), array($subjects, $subjects, array('_PVAL'), array('diff' => false, 'job' => false)), array($subject, $subject, array('_PVAL'), array('diff' => false, 'job' => false)), array($subjects, $subjects, array('_PVAL', '_LIST'), array('diff' => true, 'job' => true)), array($subject, $subject, array('_PVAL', '_LIST'), array('diff' => true, 'job' => true)));
 }
 public function outputDataProvider()
 {
     $language = Language::factory('en');
     $title = MockTitle::buildMockForMainNamespace(__METHOD__ . 'mock-subject');
     $title->expects($this->atLeastOnce())->method('exists')->will($this->returnValue(true));
     $subject = DIWikiPage::newFromTitle($title);
     $semanticData = $this->getMockBuilder('\\SMW\\SemanticData')->disableOriginalConstructor()->getMock();
     $semanticData->expects($this->atLeastOnce())->method('getSubject')->will($this->returnValue($subject));
     $semanticData->expects($this->atLeastOnce())->method('hasVisibleProperties')->will($this->returnValue(true));
     $semanticData->expects($this->atLeastOnce())->method('getPropertyValues')->will($this->returnValue(array(DIWikiPage::newFromTitle($title))));
     $semanticData->expects($this->atLeastOnce())->method('getProperties')->will($this->returnValue(array(new DIProperty(__METHOD__ . 'property'))));
     #0 Simple factbox build, returning content
     $title = MockTitle::buildMock(__METHOD__ . 'title-with-content');
     $title->expects($this->atLeastOnce())->method('exists')->will($this->returnValue(true));
     $title->expects($this->atLeastOnce())->method('getNamespace')->will($this->returnValue(NS_MAIN));
     $title->expects($this->atLeastOnce())->method('getPageLanguage')->will($this->returnValue($language));
     $title->expects($this->atLeastOnce())->method('getArticleID')->will($this->returnValue(9098));
     $outputPage = $this->getMockBuilder('\\OutputPage')->disableOriginalConstructor()->getMock();
     $outputPage->expects($this->atLeastOnce())->method('getTitle')->will($this->returnValue($title));
     $outputPage->expects($this->atLeastOnce())->method('getContext')->will($this->returnValue(new \RequestContext()));
     $provider[] = array(array('smwgNamespacesWithSemanticLinks' => array(NS_MAIN => true), 'outputPage' => $outputPage, 'parserOutput' => $this->makeParserOutput($semanticData)), array('text' => $subject->getDBKey()));
     #1 Disabled namespace, no return value expected
     $title = MockTitle::buildMock(__METHOD__ . 'title-ns-disabled');
     $title->expects($this->atLeastOnce())->method('getNamespace')->will($this->returnValue(NS_MAIN));
     $title->expects($this->atLeastOnce())->method('getPageLanguage')->will($this->returnValue($language));
     $title->expects($this->atLeastOnce())->method('getArticleID')->will($this->returnValue(90000));
     $outputPage = $this->getMockBuilder('\\OutputPage')->disableOriginalConstructor()->getMock();
     $outputPage->expects($this->atLeastOnce())->method('getTitle')->will($this->returnValue($title));
     $outputPage->expects($this->atLeastOnce())->method('getContext')->will($this->returnValue(new \RequestContext()));
     $provider[] = array(array('smwgNamespacesWithSemanticLinks' => array(NS_MAIN => false), 'outputPage' => $outputPage, 'parserOutput' => $this->makeParserOutput($semanticData)), array('text' => ''));
     // #2 Specialpage, no return value expected
     $title = MockTitle::buildMock(__METHOD__ . 'mock-specialpage');
     $title->expects($this->atLeastOnce())->method('getPageLanguage')->will($this->returnValue($language));
     $title->expects($this->atLeastOnce())->method('isSpecialPage')->will($this->returnValue(true));
     $outputPage = $this->getMockBuilder('\\OutputPage')->disableOriginalConstructor()->getMock();
     $outputPage->expects($this->atLeastOnce())->method('getTitle')->will($this->returnValue($title));
     $outputPage->expects($this->atLeastOnce())->method('getContext')->will($this->returnValue(new \RequestContext()));
     $provider[] = array(array('smwgNamespacesWithSemanticLinks' => array(NS_MAIN => true), 'outputPage' => $outputPage, 'parserOutput' => $this->makeParserOutput($semanticData)), array('text' => ''));
     // #3 Redirect, no return value expected
     $title = MockTitle::buildMock(__METHOD__ . 'mock-redirect');
     $title->expects($this->atLeastOnce())->method('getPageLanguage')->will($this->returnValue($language));
     $title->expects($this->atLeastOnce())->method('isRedirect')->will($this->returnValue(true));
     $outputPage = $this->getMockBuilder('\\OutputPage')->disableOriginalConstructor()->getMock();
     $outputPage->expects($this->atLeastOnce())->method('getTitle')->will($this->returnValue($title));
     $outputPage->expects($this->atLeastOnce())->method('getContext')->will($this->returnValue(new \RequestContext()));
     $provider[] = array(array('smwgNamespacesWithSemanticLinks' => array(NS_MAIN => true), 'outputPage' => $outputPage, 'parserOutput' => $this->makeParserOutput($semanticData)), array('text' => ''));
     // #4 Oldid
     $title = MockTitle::buildMockForMainNamespace(__METHOD__ . 'mock-oldid');
     $title->expects($this->atLeastOnce())->method('exists')->will($this->returnValue(true));
     $title->expects($this->atLeastOnce())->method('getPageLanguage')->will($this->returnValue($language));
     $outputPage = $this->getMockBuilder('\\OutputPage')->disableOriginalConstructor()->getMock();
     $outputPage->expects($this->atLeastOnce())->method('getTitle')->will($this->returnValue($title));
     $context = new \RequestContext();
     $context->setRequest(new \FauxRequest(array('oldid' => 9001), true));
     $outputPage->expects($this->atLeastOnce())->method('getContext')->will($this->returnValue($context));
     $provider[] = array(array('smwgNamespacesWithSemanticLinks' => array(NS_MAIN => true), 'outputPage' => $outputPage, 'parserOutput' => $this->makeParserOutput($semanticData)), array('text' => $subject->getDBKey()));
     return $provider;
 }
 public function testPageDelete()
 {
     $this->title = Title::newFromText(__METHOD__);
     $pageCreator = new PageCreator();
     $pageCreator->createPage($this->title)->doEdit('[[Has function hook test::page delete]]');
     $this->semanticDataValidator->assertThatSemanticDataIsNotEmpty($this->getStore()->getSemanticData(DIWikiPage::newFromTitle($this->title)));
     $this->pageDeleter->deletePage($this->title);
     $this->semanticDataValidator->assertThatSemanticDataIsEmpty($this->getStore()->getSemanticData(DIWikiPage::newFromTitle($this->title)));
 }
 public function testAskToCreatePropertyAnnotationFromTranscludedTemplate()
 {
     $subject = DIWikiPage::newFromTitle(Title::newFromText(__METHOD__));
     $this->pageCreator->createPage(Title::newFromText('AskTemplateToAddPropertyAnnotation', NS_TEMPLATE))->doEdit('<includeonly>{{#set:|SetPropertyByAskTemplate=1234}}</includeonly>');
     $this->pageCreator->createPage(Title::newFromText(__METHOD__ . '00'))->doEdit('{{#set:|TestPropertyByAskTemplate=TestValueByAskTemplate}}');
     $this->pageCreator->createPage($subject->getTitle())->doEdit('{{#ask:[[TestPropertyByAskTemplate::TestValueByAskTemplate]]|link=none|sep=|template=AskTemplateToAddPropertyAnnotation}}');
     $expected = array('propertyCount' => 4, 'propertyKeys' => array('_ASK', '_MDAT', '_SKEY', 'SetPropertyByAskTemplate'));
     $this->semanticDataValidator->assertThatPropertiesAreSet($expected, $this->getStore()->getSemanticData($subject));
 }
 public function testAddedCategoryAndChangedDefaultsortWithoutPredefinedPropertiesForNewPage()
 {
     $this->applicationFactory->getSettings()->set('smwgPageSpecialProperties', array());
     $title = Title::newFromText(__METHOD__);
     $subject = DIWikiPage::newFromTitle($title);
     $this->pageCreator->createPage($title)->doEdit('{{DEFAULTSORT:SortForFoo}} [[Category:SingleCategory]]');
     $expected = array('propertyCount' => 2, 'propertyKeys' => array('_SKEY', '_INST'), 'propertyValues' => array('SortForFoo', 'SingleCategory'));
     $this->semanticDataValidator->assertThatPropertiesAreSet($expected, $this->getStore()->getSemanticData($subject));
 }
 private function doUpdate()
 {
     LinkCache::singleton()->clear();
     $this->applicationFactory = ApplicationFactory::getInstance();
     if ($this->getTitle()->exists()) {
         return $this->doPrepareForUpdate();
     }
     $this->applicationFactory->getStore()->clearData(DIWikiPage::newFromTitle($this->getTitle()));
     return true;
 }
 /**
  * @dataProvider titleProvider
  */
 public function testFindParentBreadcrumbs($title, $count, $expected)
 {
     $subject = DIWikiPage::newFromTitle(Title::newFromText($title));
     $instance = new BySubpageLinksFinder();
     $instance->setSubpageDiscoverySupportState(true);
     $this->assertEmpty($instance->getParents());
     $instance->tryToFindLinksFor($subject);
     $this->assertCount($count, $instance->getParents());
     $this->assertEquals($expected, $instance->getParents());
 }
Example #18
0
 /**
  * @since 2.0
  *
  * @param Title|string $title
  */
 public function setTitle($title)
 {
     if (is_string($title)) {
         $title = Title::newFromText($title);
     }
     if ($title instanceof Title) {
         return $this->setSubject(DIWikiPage::newFromTitle($title));
     }
     throw new RuntimeException("Something went wrong");
 }
 /**
  * @dataProvider getPropertiesDataProvider
  */
 public function testGetProperties($titleText, $requestOptions = null)
 {
     $title = Title::newFromText($titleText);
     $subject = DIWikiPage::newFromTitle($title);
     $store = StoreFactory::getStore();
     $result = $store->getProperties($subject, $requestOptions);
     $this->assertTrue(is_array($result));
     foreach ($result as $property) {
         $this->assertInstanceOf('\\SMW\\DIProperty', $property, "Result should be instance of DIProperty.");
     }
 }
 public function testDoUpdate()
 {
     $title = Title::newFromText(__METHOD__);
     $subject = DIWikiPage::newFromTitle($title);
     $pageCreator = new PageCreator();
     $pageCreator->createPage($title)->doEdit('[[Has some property::LinksUpdateConstructedOnEmptyParserOutput]]');
     $propertiesCountBeforeUpdate = count($this->getStore()->getSemanticData($subject)->getProperties());
     $linksUpdate = new LinksUpdate($title, new ParserOutput());
     $linksUpdate->doUpdate();
     $this->assertCount($propertiesCountBeforeUpdate, $this->getStore()->getSemanticData($subject)->getProperties());
 }
 public function testAddAnnotationOnMockShortUrl()
 {
     $title = Title::newFromText(__METHOD__);
     $semanticData = new SemanticData(DIWikiPage::newFromTitle($title));
     $instance = $this->getMock('\\SESP\\Annotator\\ShortUrlAnnotator', array('hasShortUrlUtils', 'getShortUrl'), array($semanticData));
     $instance->expects($this->once())->method('hasShortUrlUtils')->will($this->returnValue(true));
     $instance->expects($this->once())->method('getShortUrl')->with($this->equalTo($title))->will($this->returnValue('example.org'));
     $instance->setShortUrlPrefix('foo');
     $instance->addAnnotation();
     $this->assertArrayHasKey(PropertyRegistry::getInstance()->getPropertyId('_SHORTURL'), $semanticData->getProperties());
 }
 public function doTestStoreUpdate($wgHooks)
 {
     $subject = DIWikiPage::newFromTitle(Title::newFromText(__METHOD__));
     $semanticData = $this->getMockBuilder('\\SMW\\SemanticData')->disableOriginalConstructor()->getMock();
     $semanticData->expects($this->any())->method('getSubject')->will($this->returnValue($subject));
     $semanticData->expects($this->any())->method('getPropertyValues')->will($this->returnValue(array()));
     $semanticData->expects($this->any())->method('getProperties')->will($this->returnValue(array()));
     $store = $this->getMockBuilder('\\SMW\\Store')->disableOriginalConstructor()->getMockForAbstractClass();
     $store->expects($this->any())->method('getSemanticData')->will($this->returnValue($semanticData));
     $this->assertThatHookIsExcutable($wgHooks, 'SMWStore::updateDataBefore', array($store, $semanticData));
 }
 public function testExportRedirect()
 {
     $semanticData = $this->semanticDataFactory->newEmptySemanticData(__METHOD__);
     $redirectProperty = new DIProperty('_REDI');
     $redirectTarget = new DIWikiPage('FooRedirectTarget', NS_MAIN, '');
     $semanticData->addPropertyObjectValue($redirectProperty, DIWikiPage::newFromTitle($redirectTarget->getTitle(), '__red'));
     $exportData = Exporter::getInstance()->makeExportData($semanticData);
     $this->assertCount(1, $exportData->getValues(Exporter::getInstance()->getSpecialNsResource('swivt', 'redirectsTo')));
     $this->assertCount(1, $exportData->getValues(Exporter::getInstance()->getSpecialNsResource('owl', 'sameAs')));
     $expectedResourceElement = new ExpNsResource('FooRedirectTarget', Exporter::getInstance()->getNamespaceUri('wiki'), 'wiki', $redirectTarget);
     $this->exportDataValidator->assertThatExportDataContainsResource($expectedResourceElement, Exporter::getInstance()->getSpecialNsResource('owl', 'sameAs'), $exportData);
 }
 private function buildHierarchicalLinksFromText($text)
 {
     $growinglink = '';
     $links = explode('/', $text);
     // Remove the source
     array_pop($links);
     foreach ($links as $link) {
         $growinglink .= $link;
         $this->antecedentHierarchyLinks[] = DIWikiPage::newFromTitle(Title::newFromText($growinglink));
         $growinglink .= '/';
     }
 }
 public function testCreatePageWithSubobject()
 {
     $this->title = Title::newFromText(__METHOD__);
     $pageCreator = new PageCreator();
     $pageCreator->createPage($this->title)->doEdit('{{#subobject:namedSubobject|AA=Test1|@sortkey=Z}}' . '{{#subobject:|BB=Test2|@sortkey=Z}}');
     $semanticData = $this->getStore()->getSemanticData(DIWikiPage::newFromTitle($this->title));
     $this->assertInstanceOf('SMW\\SemanticData', $semanticData->findSubSemanticData('namedSubobject'));
     $expected = array('propertyCount' => 2, 'properties' => array(new DIProperty('AA'), new DIProperty('BB'), new DIProperty('_SKEY')), 'propertyValues' => array('Test1', 'Test2', 'Z'));
     $semanticDataValidator = new SemanticDataValidator();
     foreach ($semanticData->getSubSemanticData() as $subSemanticData) {
         $semanticDataValidator->assertThatPropertiesAreSet($expected, $subSemanticData);
     }
 }
 public function testRoundtripOfSerializedSemanticDataAfterStoreUpdate()
 {
     $subject = DIWikiPage::newFromTitle(Title::newFromText(__METHOD__));
     $semanticDataBeforeUpdate = new SemanticData($subject);
     $subobject = new Subobject($subject->getTitle());
     $subobject->setEmptyContainerForId('SomeSubobjectToSerialize');
     $subobject->getSemanticData()->addDataValue(DataValueFactory::getInstance()->newPropertyValue('Foo', 'Bar'));
     $semanticDataBeforeUpdate->addSubobject($subobject);
     $this->getStore()->updateData($semanticDataBeforeUpdate);
     $semanticDataAfterUpdate = $this->getStore()->getSemanticData($subject);
     $serializerFactory = new SerializerFactory();
     $this->assertEquals($semanticDataAfterUpdate->getHash(), $serializerFactory->deserialize($serializerFactory->serialize($semanticDataAfterUpdate))->getHash());
 }
 public function testManualRemovalOfRedirectTarget()
 {
     $subject = DIWikiPage::newFromTitle(Title::newFromText(__METHOD__));
     $target = DIWikiPage::newFromTitle(Title::newFromText('ManualRemovalOfRedirectTarget'));
     $target->getSortKey();
     $this->pageCreator->createPage($subject->getTitle())->doEdit('#REDIRECT [[Property:ManualRemovalOfRedirectTarget-NotTheRealTarget]]')->doEdit('#REDIRECT [[ManualRemovalOfRedirectTarget]]');
     $expected = array(new DIProperty('_REDI'));
     $this->assertEquals($target, $this->getStore()->getRedirectTarget($subject));
     $this->semanticDataValidator->assertHasProperties($expected, $this->getStore()->getInProperties($target));
     $this->pageCreator->createPage($subject->getTitle())->doEdit('removed redirect target');
     $this->assertEquals($subject, $this->getStore()->getRedirectTarget($subject));
     $this->assertEmpty($this->getStore()->getInProperties($target));
 }
Example #28
0
 private function matchWikiPageLastModifiedToRevisionLastModified($title)
 {
     if ($this->getParameter('pm') !== ($this->getParameter('pm') | SMW_UJ_PM_CLASTMDATE)) {
         return false;
     }
     $lastModified = $this->getWikiPageLastModifiedTimestamp(DIWikiPage::newFromTitle($title));
     if ($lastModified === \WikiPage::factory($title)->getTimestamp()) {
         $pageUpdater = $this->applicationFactory->newMwCollaboratorFactory()->newPageUpdater();
         $pageUpdater->addPage($title);
         $pageUpdater->doPurgeParserCache();
         return true;
     }
     return false;
 }
 protected function getSemanticDataForExifDataAnnotatorBy($exifData, $parameters = array())
 {
     $expectedToRun = $exifData ? $this->atLeastOnce() : $this->never();
     $exifData = serialize($exifData);
     $semanticData = new SemanticData(DIWikiPage::newFromTitle(Title::newFromText(__METHOD__)));
     $file = $this->getMockBuilder('File')->disableOriginalConstructor()->getMock();
     $file->expects($this->once())->method('exists')->will($this->returnValue(true));
     $file->expects($this->once())->method('getMetadata')->will($this->returnValue($exifData));
     $file->expects($expectedToRun)->method('getWidth')->will($this->returnValue(isset($parameters['getWidth']) ? $parameters['getWidth'] : false));
     $file->expects($expectedToRun)->method('getHeight')->will($this->returnValue(isset($parameters['getHeight']) ? $parameters['getHeight'] : false));
     $instance = new ExifDataAnnotator($semanticData, $file);
     $this->assertTrue($instance->addAnnotation());
     return $semanticData;
 }
 /**
  * @dataProvider titleProvider
  */
 public function testPageDeleteTriggersDeleteSubjectJob($source, $associate)
 {
     $subject = DIWikiPage::newFromTitle($source['title']);
     $this->semanticDataValidator->assertThatSemanticDataIsEmpty($this->getStore()->getSemanticData($subject));
     $this->pageCreator->createPage($source['title'])->doEdit($source['edit']);
     $this->pageCreator->createPage($associate['title'])->doEdit($associate['edit']);
     $this->semanticDataValidator->assertThatSemanticDataIsNotEmpty($this->getStore()->getSemanticData($subject));
     $this->pageDeleter->deletePage($source['title']);
     $this->semanticDataValidator->assertThatSemanticDataIsEmpty($this->getStore()->getSemanticData($subject));
     $this->assertJob('SMW\\DeleteSubjectJob');
     foreach (array('withAssociates', 'asDeferredJob', 'semanticData') as $parameter) {
         $this->assertTrue($this->job->hasParameter($parameter));
     }
     $this->pageDeleter->deletePage($associate['title']);
 }