| Current File : /home/jvzmxxx/wiki/extensions/Wikibase/view/tests/phpunit/TermsListViewTest.php |
<?php
namespace Wikibase\View\Tests;
use PHPUnit_Framework_TestCase;
use Wikibase\DataModel\Entity\EntityDocument;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\Term\Fingerprint;
use Wikibase\Lib\LanguageNameLookup;
use Wikibase\View\LanguageDirectionalityLookup;
use Wikibase\View\TermsListView;
use Wikibase\View\DummyLocalizedTextProvider;
use Wikibase\View\LocalizedTextProvider;
use Wikibase\View\Template\TemplateFactory;
/**
* @covers Wikibase\View\TermsListView
*
* @uses Wikibase\View\Template\Template
* @uses Wikibase\View\Template\TemplateFactory
* @uses Wikibase\View\Template\TemplateRegistry
*
* @group Wikibase
* @group WikibaseView
*
* @license GPL-2.0+
* @author Bene* < benestar.wikimedia@gmail.com >
* @author Thiemo Mättig
* @author Adrian Heine <adrian.heine@wikimedia.de>
*/
class TermsListViewTest extends PHPUnit_Framework_TestCase {
private function getTermsListView(
$languageNameCalls = 0,
LocalizedTextProvider $textProvider = null
) {
$languageNameLookup = $this->getMock( LanguageNameLookup::class );
$languageNameLookup->expects( $this->exactly( $languageNameCalls ) )
->method( 'getName' )
->will( $this->returnCallback( function( $languageCode ) {
return "<LANGUAGENAME-$languageCode>";
} ) );
$textProvider = $textProvider ?: new DummyLocalizedTextProvider( 'lkt' );
$languageDirectionalityLookup = $this->getMock( LanguageDirectionalityLookup::class );
$languageDirectionalityLookup->expects( $this->any() )
->method( 'getDirectionality' )
->will( $this->returnCallback( function( $languageCode ) {
return [
'en' => 'ltr',
'arc' => 'rtl',
'lkt' => 'ltr'
][ $languageCode ];
} ) );
return new TermsListView(
TemplateFactory::getDefaultInstance(),
$languageNameLookup,
$textProvider,
$languageDirectionalityLookup
);
}
private function getFingerprint( $languageCode = 'en' ) {
$fingerprint = new Fingerprint();
$fingerprint->setLabel( $languageCode, '<LABEL>' );
$fingerprint->setDescription( $languageCode, '<DESCRIPTION>' );
$fingerprint->setAliasGroup( $languageCode, array( '<ALIAS1>', '<ALIAS2>' ) );
return $fingerprint;
}
public function getTermsListViewProvider() {
$item = new Item(
new ItemId( 'Q1' ),
$this->getFingerprint( 'arc' )
);
return [
[
$item, 'arc', true, true, true
],
[
new Item(), 'lkt', false, false, false
],
[
new Item(
new ItemId( 'Q1' ),
new Fingerprint()
),
'en',
false,
false,
false
]
];
}
/**
* @dataProvider getTermsListViewProvider
*/
public function testGetTermsListView(
EntityDocument $entity,
$languageCode,
$hasLabel,
$hasDescription,
$hasAliases
) {
$languageDirectionality = $languageCode === 'arc' ? 'rtl' : 'ltr';
$view = $this->getTermsListView( 1 );
$html = $view->getHtml( $entity, $entity, $entity, [ $languageCode ] );
$this->assertContains( '(wikibase-entitytermsforlanguagelistview-language)', $html );
$this->assertContains( 'wikibase-entitytermsforlanguageview-' . $languageCode, $html );
$this->assertContains( '<LANGUAGENAME-' . $languageCode . '>', $html );
if ( !$hasLabel || !$hasDescription || !$hasAliases ) {
$this->assertContains( 'wb-empty', $html );
}
if ( $hasLabel ) {
$this->assertContains(
'class="wikibase-labelview " dir="' . $languageDirectionality . '" lang="' . $languageCode . '"',
$html
);
$this->assertNotContains( '(wikibase-label-empty)', $html );
$this->assertContains( '<LABEL>', $html );
} else {
$this->assertContains( 'class="wikibase-labelview wb-empty" dir="ltr" lang="lkt"', $html );
$this->assertContains( '(wikibase-label-empty)', $html );
}
if ( $hasDescription ) {
$this->assertContains(
'class="wikibase-descriptionview " dir="' . $languageDirectionality . '" lang="' . $languageCode . '"',
$html
);
$this->assertNotContains( '(wikibase-description-empty)', $html );
$this->assertContains( '<DESCRIPTION>', $html );
} else {
$this->assertContains( 'class="wikibase-descriptionview wb-empty" dir="ltr" lang="lkt"', $html );
$this->assertContains( '(wikibase-description-empty)', $html );
}
if ( $hasAliases ) {
$this->assertContains( '<ALIAS1>', $html );
$this->assertContains( '<ALIAS2>', $html );
$this->assertContains(
'class="wikibase-aliasesview-list" dir="' . $languageDirectionality . '" lang="' . $languageCode . '"',
$html
);
}
$this->assertNotContains( '(wikibase-aliases-empty)', $html );
// List headings
$this->assertContains( '(wikibase-entitytermsforlanguagelistview-label)', $html );
$this->assertContains( '(wikibase-entitytermsforlanguagelistview-description)', $html );
$this->assertContains( '(wikibase-entitytermsforlanguagelistview-aliases)', $html );
$this->assertNotContains( '&', $html, 'no double escaping' );
}
public function testGetTermsListView_isEscaped() {
$textProvider = $this->getMock( LocalizedTextProvider::class );
$textProvider->expects( $this->any() )
->method( 'get' )
->will( $this->returnCallback( function( $key ) {
return $key === 'wikibase-entitytermsforlanguagelistview-language' ? '"RAW"' : "($key)";
} ) );
$item = new Item(
new ItemId( 'Q1' ),
new Fingerprint()
);
$view = $this->getTermsListView( 0, $textProvider );
$html = $view->getHtml( $item, $item, $item, [] );
$this->assertContains( '"RAW"', $html );
$this->assertNotContains( '"RAW"', $html );
}
public function testGetTermsListView_noAliasesProvider() {
$item = new Item(
new ItemId( 'Q1' ),
$this->getFingerprint()
);
$view = $this->getTermsListView( 1 );
$html = $view->getHtml( $item, $item, null, array( 'en' ) );
$this->assertContains( '(wikibase-entitytermsforlanguagelistview-language)', $html );
$this->assertContains( '(wikibase-entitytermsforlanguagelistview-label)', $html );
$this->assertContains( '(wikibase-entitytermsforlanguagelistview-description)', $html );
$this->assertContains( '(wikibase-entitytermsforlanguagelistview-aliases)', $html );
$this->assertContains( 'wikibase-entitytermsforlanguageview-en', $html );
$this->assertContains( '<LANGUAGENAME-en>', $html );
$this->assertContains( '<LABEL>', $html );
$this->assertContains( '<DESCRIPTION>', $html );
$this->assertNotContains( '<ALIAS1>', $html );
$this->assertNotContains( '<ALIAS2>', $html );
$this->assertNotContains( '&', $html, 'no double escaping' );
}
}