gplx/mediawiki/extensions/SemanticMediaWiki/tests/phpunit/Integration/PropertyLabelCanonicalMatch...

159 lines
2.9 KiB
PHP

<?php
namespace SMW\Tests\Integration;
use SMW\DIProperty;
use SMW\PropertyRegistry;
/**
* @group semantic-mediawiki
*
* @license GPL-2.0-or-later
* @since 2.5
*
* @author mwjames
*/
class PropertyLabelCanonicalMatchTest extends \PHPUnit\Framework\TestCase {
/**
* @dataProvider canonicalLabelProvider
*/
public function testFindPropertyIdByLabel( $label, $expectedKey, $expectedLabel ) {
[ $labelMatch, $property ] = $this->findPropertyIdByLabel( $label );
$this->assertEquals(
$expectedLabel,
$labelMatch
);
$this->assertEquals(
$expectedKey,
$property->getKey()
);
}
/**
* @dataProvider canonicalLabelProvider
*/
public function testNewFromUserLabel( $label, $expectedKey, $expectedLabel ) {
[ $labelMatch, $property ] = $this->newFromUserLabel( $label );
$this->assertEquals(
$expectedLabel,
$labelMatch
);
$this->assertEquals(
$expectedKey,
$property->getKey()
);
}
/**
* @dataProvider canonicalLabelWithLanguageProvider
*/
public function testNewFromUserLabelWithLanguage( $label, $languageCode, $expectedKey, $expectedLabel ) {
[ $labelMatch, $property ] = $this->newFromUserLabel( $label, $languageCode );
$this->assertEquals(
$expectedLabel,
$labelMatch
);
$this->assertEquals(
$expectedKey,
$property->getKey()
);
}
private function findPropertyIdByLabel( $label ) {
$property = new DIProperty(
PropertyRegistry::getInstance()->findPropertyIdByLabel( $label )
);
$canonicalLabel = $property->getCanonicalLabel();
// #1966 and #1968
// In case something goes wrong, a recursive loop will kill PHP
// and we know we messed up
if ( $canonicalLabel !== '' && $label !== $canonicalLabel ) {
$this->findPropertyIdByLabel(
$property->getCanonicalDiWikiPage()->getTitle()->getText()
);
}
return [ $label, $property ];
}
private function newFromUserLabel( $label, $languageCode = false ) {
$property = DIProperty::newFromUserLabel( $label, false, $languageCode );
$canonicalLabel = $property->getCanonicalLabel();
// #1966 and #1968
// In case something goes wrong, a recursive loop will kill PHP
// and we know we messed up
if ( $canonicalLabel !== '' && $label !== $canonicalLabel ) {
$this->newFromUserLabel(
$property->getCanonicalDiWikiPage()->getTitle()->getText()
);
}
return [ $label, $property ];
}
public function canonicalLabelProvider() {
$provider[] = [
'Number',
'_num',
'Number',
];
$provider[] = [
'Float',
'_num',
'Float'
];
$provider[] = [
'Telephone number',
'_tel',
'Telephone number'
];
$provider[] = [
'Phone number',
'_tel',
'Phone number'
];
return $provider;
}
public function canonicalLabelWithLanguageProvider() {
$provider[] = [
'Number',
'en',
'_num',
'Number'
];
$provider[] = [
'Number',
'fr',
'_num',
'Number'
];
$provider[] = [
'Booléen',
'fr',
'_boo',
'Booléen'
];
return $provider;
}
}