queryResultValidator = UtilityFactory::getInstance()->newValidatorFactory()->newQueryResultValidator(); $this->semanticDataFactory = UtilityFactory::getInstance()->newSemanticDataFactory(); $this->dataValueFactory = DataValueFactory::getInstance(); $this->queryParser = ApplicationFactory::getInstance()->getQueryFactory()->newQueryParser(); } protected function tearDown(): void { 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->assertSame( 1, $queryResult->getCount() ); $expectedSubjects = [ new DIWikiPage( 'Carol', NS_MAIN, '' ) ]; $this->queryResultValidator->assertThatQueryResultHasSubjects( $expectedSubjects, $queryResult ); $this->subjectsToBeCleared = [ $semanticData->getSubject() ]; } private function newDataValueForPagePropertyValue( $property, $value ) { $property = DIProperty::newFromUserLabel( $property ); $property->setPropertyTypeId( '_wpg' ); $dataItem = new DIWikiPage( $value, NS_MAIN, '' ); return $this->dataValueFactory->newDataValueByItem( $dataItem, $property ); } }