260 lines
5.6 KiB
PHP
260 lines
5.6 KiB
PHP
<?php
|
|
|
|
namespace SMW\Tests\Exporter;
|
|
|
|
use SMW\DIProperty;
|
|
use SMW\DIWikiPage;
|
|
use SMW\Exporter\Element;
|
|
use SMW\Exporter\Escaper;
|
|
use SMW\Exporter\ExpResourceMapper;
|
|
use SMW\InMemoryPoolCache;
|
|
|
|
/**
|
|
* @covers \SMW\Exporter\ExpResourceMapper
|
|
* @group semantic-mediawiki
|
|
*
|
|
* @license GPL-2.0-or-later
|
|
* @since 2.2
|
|
*
|
|
* @author mwjames
|
|
*/
|
|
class ExpResourceMapperTest extends \PHPUnit\Framework\TestCase {
|
|
|
|
private $inMemoryPoolCache;
|
|
|
|
protected function setUp(): void {
|
|
$this->inMemoryPoolCache = InMemoryPoolCache::getInstance();
|
|
}
|
|
|
|
protected function tearDown(): void {
|
|
$this->inMemoryPoolCache->clear();
|
|
}
|
|
|
|
public function testInvalidateCache() {
|
|
$subject = new DIWikiPage( 'Foo', NS_MAIN );
|
|
|
|
$poolCache = $this->inMemoryPoolCache->getPoolCacheById( 'exporter.expresource.mapper' );
|
|
|
|
$poolCache->save(
|
|
$subject->getHash(),
|
|
true
|
|
);
|
|
|
|
$poolCache->save(
|
|
$subject->getHash() . ExpResourceMapper::AUX_MARKER,
|
|
true
|
|
);
|
|
|
|
$store = $this->getMockBuilder( '\SMW\Store' )
|
|
->disableOriginalConstructor()
|
|
->getMockForAbstractClass();
|
|
|
|
$instance = new ExpResourceMapper(
|
|
$store
|
|
);
|
|
|
|
$instance->invalidateCache(
|
|
$subject
|
|
);
|
|
|
|
$this->assertFalse(
|
|
$poolCache->contains( $subject->getHash() )
|
|
);
|
|
}
|
|
|
|
public function testMapPropertyToResourceElement() {
|
|
$store = $this->getMockBuilder( '\SMW\Store' )
|
|
->disableOriginalConstructor()
|
|
->getMockForAbstractClass();
|
|
|
|
$instance = new ExpResourceMapper(
|
|
$store
|
|
);
|
|
|
|
$this->assertInstanceOf(
|
|
'\SMW\Exporter\Element\ExpNsResource',
|
|
$instance->mapPropertyToResourceElement( new DIProperty( 'Foo' ) )
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider diWikiPageProvider
|
|
*/
|
|
public function testMapWikiPageToResourceElement( $dataItem, $modifier, $expected ) {
|
|
$store = $this->getMockBuilder( '\SMW\Store' )
|
|
->disableOriginalConstructor()
|
|
->getMockForAbstractClass();
|
|
|
|
$instance = new ExpResourceMapper(
|
|
$store
|
|
);
|
|
|
|
$resource = $instance->mapWikiPageToResourceElement( $dataItem, $modifier );
|
|
|
|
$this->assertSame(
|
|
$expected,
|
|
$resource->getSerialization()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* @dataProvider importDataProvider
|
|
*/
|
|
public function testMapWikiPageToResourceElementForImportMatch( $dataItem, $expected ) {
|
|
$store = $this->getMockBuilder( '\SMW\Store' )
|
|
->disableOriginalConstructor()
|
|
->getMockForAbstractClass();
|
|
|
|
$store->expects( $this->once() )
|
|
->method( 'getPropertyValues' )
|
|
->willReturn( [ new \SMWDIBlob( 'foo:bar:fom:fuz' ) ] );
|
|
|
|
$instance = new ExpResourceMapper(
|
|
$store
|
|
);
|
|
|
|
$resource = $instance->mapWikiPageToResourceElement(
|
|
$dataItem
|
|
);
|
|
|
|
$this->assertTrue(
|
|
$resource->isImported()
|
|
);
|
|
|
|
$this->assertSame(
|
|
$expected,
|
|
$resource->getSerialization()
|
|
);
|
|
}
|
|
|
|
public function diWikiPageProvider() {
|
|
// Constant
|
|
$wiki = \SMWExporter::getInstance()->getNamespaceUri( 'wiki' );
|
|
$property = \SMWExporter::getInstance()->getNamespaceUri( 'property' );
|
|
|
|
# 0
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo', NS_MAIN, '', '' ),
|
|
'',
|
|
[
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "Foo|{$wiki}|wiki",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo#0##' ]
|
|
]
|
|
];
|
|
|
|
# 1
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo', NS_MAIN, 'bar', '' ),
|
|
'',
|
|
[
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "bar-3AFoo|{$wiki}|wiki",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo#0#bar#' ]
|
|
]
|
|
];
|
|
|
|
# 2
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo', NS_MAIN, 'bar', '1234' ),
|
|
'',
|
|
[
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "bar-3AFoo-231234|{$wiki}|wiki",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo#0#bar#1234' ]
|
|
]
|
|
];
|
|
|
|
# 3 Extra modififer doesn't not alter the object when a subobject is used
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo', NS_MAIN, 'bar', '1234' ),
|
|
'abc',
|
|
[
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "bar-3AFoo-231234|{$wiki}|wiki",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo#0#bar#1234' ]
|
|
]
|
|
];
|
|
|
|
# 4
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo', SMW_NS_PROPERTY, '', '' ),
|
|
'',
|
|
[
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "Foo|{$property}|property",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo#102##' ]
|
|
]
|
|
];
|
|
|
|
# 5
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo', SMW_NS_PROPERTY, '', '' ),
|
|
true,
|
|
[
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "Foo-23aux|{$property}|property",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo#102##' ]
|
|
]
|
|
];
|
|
|
|
# 6
|
|
$name = Escaper::encodePage(
|
|
new DIWikiPage( '-Foo', SMW_NS_PROPERTY, '', '' )
|
|
);
|
|
|
|
$provider[] = [
|
|
new DIWikiPage( '-Foo', SMW_NS_PROPERTY, '', '' ),
|
|
true,
|
|
[
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "$name-23aux|{$wiki}|wiki",
|
|
'dataitem' => [ 'type' => 9, 'item' => '-Foo#102##' ]
|
|
]
|
|
];
|
|
|
|
# 7
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo/Bar', SMW_NS_PROPERTY, '', '' ),
|
|
'',
|
|
[
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "Property-3AFoo-2FBar|{$wiki}|wiki",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo/Bar#102##' ]
|
|
]
|
|
];
|
|
|
|
return $provider;
|
|
}
|
|
|
|
public function importDataProvider() {
|
|
// || is not the result we normally would expect but mocking the
|
|
// dataValueFactory at this point is not worth the hassle therefore
|
|
// we live with || output
|
|
$expected = [
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "||",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo#102##' ]
|
|
];
|
|
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo', SMW_NS_PROPERTY, '', '' ),
|
|
$expected
|
|
];
|
|
|
|
$expected = [
|
|
'type' => Element::TYPE_NSRESOURCE,
|
|
'uri' => "||",
|
|
'dataitem' => [ 'type' => 9, 'item' => 'Foo#14##' ]
|
|
];
|
|
|
|
$provider[] = [
|
|
new DIWikiPage( 'Foo', NS_CATEGORY, '', '' ),
|
|
$expected
|
|
];
|
|
|
|
return $provider;
|
|
}
|
|
|
|
}
|