dataValueFactory = DataValueFactory::getInstance(); $this->semanticDataFactory = new SemanticDataFactory(); $this->queryResultValidator = new QueryResultValidator(); $this->queryParser = new QueryParser(); } protected function tearDown() { foreach ( $this->subjectsToBeCleared as $subject ) { $this->getStore()->deleteSubject( $subject->getTitle() ); } parent::tearDown(); } /** * {{#ask: [[-Has mother::Michael]] }} */ public function testParentChildInverseRelationshipQuery() { $semanticData = $this->semanticDataFactory ->setTitle( 'Michael' ) ->newEmptySemanticData(); $semanticData->addDataValue( $this->newDataValueForPagePropertyValue( 'Has mother', 'Carol' ) ); $this->getStore()->updateData( $semanticData ); $description = new SomeProperty( DIProperty::newFromUserLabel( 'Has mother', true )->setPropertyTypeId( '_wpg' ), new ValueDescription( new DIWikiPage( 'Michael', NS_MAIN, '' ), DIProperty::newFromUserLabel( 'Has mother', true )->setPropertyTypeId( '_wpg' ), SMW_CMP_EQ ) ); $this->assertEquals( $description, $this->queryParser->getQueryDescription( '[[-Has mother::Michael]]' ) ); $query = new Query( $description, false, false ); $query->querymode = Query::MODE_INSTANCES; $queryResult = $this->getStore()->getQueryResult( $query ); $this->assertEquals( 1, $queryResult->getCount() ); $expectedSubjects = array( new DIWikiPage( 'Carol', NS_MAIN, '' ) ); $this->queryResultValidator->assertThatQueryResultHasSubjects( $expectedSubjects, $queryResult ); $this->subjectsToBeCleared = array( $semanticData->getSubject() ); } private function newDataValueForPagePropertyValue( $property, $value ) { $property = DIProperty::newFromUserLabel( $property ); $property->setPropertyTypeId( '_wpg' ); $dataItem = new DIWikiPage( $value, NS_MAIN, '' ); return $this->dataValueFactory->newDataItemValue( $dataItem, $property ); } }