Adrian Heine has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/284357

Change subject: Split TermsListView out of EntityTermsView
......................................................................

Split TermsListView out of EntityTermsView

Change-Id: Ia516f1fd341ef30f4ced754b2969476ada3919a5
---
M view/src/EntityTermsView.php
M view/src/EntityViewPlaceholderExpander.php
A view/src/TermsListView.php
M view/src/ViewFactory.php
M view/tests/phpunit/EntityTermsViewTest.php
M view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
A view/tests/phpunit/TermsListViewTest.php
7 files changed, 351 insertions(+), 245 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/57/284357/1

diff --git a/view/src/EntityTermsView.php b/view/src/EntityTermsView.php
index 680e3eb..372a3e4 100644
--- a/view/src/EntityTermsView.php
+++ b/view/src/EntityTermsView.php
@@ -9,7 +9,6 @@
 use Wikibase\DataModel\Term\Fingerprint;
 use Wikibase\DataModel\Term\LabelsProvider;
 use Wikibase\DataModel\Term\TermList;
-use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\View\Template\TemplateFactory;
 
 /**
@@ -22,6 +21,7 @@
  * @author Thiemo Mättig
  * @author Bene* < [email protected] >
  * @author H. Snater < [email protected] >
+ * @author Adrian Heine <[email protected]>
  */
 class EntityTermsView {
 
@@ -31,14 +31,9 @@
        private $templateFactory;
 
        /**
-        * @var EditSectionGenerator|null
+        * @var EditSectionGenerator
         */
        private $sectionEditLinkGenerator;
-
-       /**
-        * @var LanguageNameLookup
-        */
-       private $languageNameLookup;
 
        /**
         * @var LocalizedTextProvider
@@ -47,19 +42,16 @@
 
        /**
         * @param TemplateFactory $templateFactory
-        * @param EditSectionGenerator|null $sectionEditLinkGenerator
-        * @param LanguageNameLookup $languageNameLookup
+        * @param EditSectionGenerator $sectionEditLinkGenerator
         * @param LocalizedTextProvider $textProvider
         */
        public function __construct(
                TemplateFactory $templateFactory,
-               EditSectionGenerator $sectionEditLinkGenerator = null,
-               LanguageNameLookup $languageNameLookup,
+               EditSectionGenerator $sectionEditLinkGenerator,
                LocalizedTextProvider $textProvider
        ) {
                $this->sectionEditLinkGenerator = $sectionEditLinkGenerator;
                $this->templateFactory = $templateFactory;
-               $this->languageNameLookup = $languageNameLookup;
                $this->textProvider = $textProvider;
        }
 
@@ -171,140 +163,12 @@
        }
 
        /**
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
-        * @param string[] $languageCodes The languages the user requested to 
be shown
-        *
-        * @return string HTML
-        */
-       public function getEntityTermsForLanguageListView(
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null,
-               array $languageCodes
-       ) {
-               $entityTermsForLanguageViewsHtml = '';
-
-               foreach ( $languageCodes as $languageCode ) {
-                       $entityTermsForLanguageViewsHtml .= 
$this->getEntityTermsForLanguageView(
-                               $labelsProvider,
-                               $descriptionsProvider,
-                               $aliasesProvider,
-                               $languageCode
-                       );
-               }
-
-               return $this->templateFactory->render( 
'wikibase-entitytermsforlanguagelistview',
-                       htmlspecialchars( $this->textProvider->get( 
'wikibase-entitytermsforlanguagelistview-language' ) ),
-                       htmlspecialchars( $this->textProvider->get( 
'wikibase-entitytermsforlanguagelistview-label' ) ),
-                       htmlspecialchars( $this->textProvider->get( 
'wikibase-entitytermsforlanguagelistview-description' ) ),
-                       htmlspecialchars( $this->textProvider->get( 
'wikibase-entitytermsforlanguagelistview-aliases' ) ),
-                       $entityTermsForLanguageViewsHtml
-               );
-       }
-
-       /**
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
-        * @param string $languageCode
-        *
-        * @return string HTML
-        */
-       private function getEntityTermsForLanguageView(
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null,
-               $languageCode
-       ) {
-               $languageName = $this->languageNameLookup->getName( 
$languageCode );
-               $labels = $labelsProvider->getLabels();
-               $descriptions = $descriptionsProvider->getDescriptions();
-
-               return $this->templateFactory->render( 
'wikibase-entitytermsforlanguageview',
-                       'tr',
-                       'td',
-                       $languageCode,
-                       htmlspecialchars( $languageName ),
-                       $this->getTermView(
-                               $labels,
-                               'wikibase-labelview', // Template
-                               'wikibase-label-empty', // Text key
-                               $languageCode
-                       ),
-                       $this->getTermView(
-                               $descriptions,
-                               'wikibase-descriptionview', // Template
-                               'wikibase-description-empty', // Text key
-                               $languageCode
-                       ),
-                       $aliasesProvider ? $this->getAliasesView( 
$aliasesProvider->getAliasGroups(), $languageCode ) : '',
-                       '',
-                       'th'
-               );
-       }
-
-       private function getTermView( TermList $termList, $templateName, 
$emptyTextKey, $languageCode ) {
-               $hasTerm = $termList->hasTermForLanguage( $languageCode );
-               return $this->templateFactory->render( $templateName,
-                       $hasTerm ? '' : 'wb-empty',
-                       htmlspecialchars( $hasTerm
-                               ? $termList->getByLanguage( $languageCode 
)->getText()
-                               : $this->textProvider->get( $emptyTextKey )
-                       ),
-                       '',
-                       'auto', // FIXME DirLookup
-                       $hasTerm ? $languageCode : 
$this->textProvider->getLanguageOf( $emptyTextKey )
-               );
-       }
-
-       /**
-        * @param AliasGroupList $aliasGroups
-        * @param string $languageCode
-        *
-        * @return string HTML
-        */
-       private function getAliasesView( AliasGroupList $aliasGroups, 
$languageCode ) {
-               if ( !$aliasGroups->hasGroupForLanguage( $languageCode ) ) {
-                       return $this->templateFactory->render( 
'wikibase-aliasesview',
-                               'wb-empty',
-                               '',
-                               '',
-                               'auto', // FIXME DirLookup
-                               ''
-                       );
-               } else {
-                       $aliasesHtml = '';
-                       $aliases = $aliasGroups->getByLanguage( $languageCode 
)->getAliases();
-                       foreach ( $aliases as $alias ) {
-                               $aliasesHtml .= $this->templateFactory->render(
-                                       'wikibase-aliasesview-list-item',
-                                       htmlspecialchars( $alias )
-                               );
-                       }
-
-                       return $this->templateFactory->render( 
'wikibase-aliasesview',
-                               '',
-                               $aliasesHtml,
-                               '',
-                               'auto', // FIXME DirLookup
-                               $languageCode
-                       );
-               }
-       }
-
-       /**
         * @param $languageCode The language for which terms should be edited
         * @param EntityId|null $entityId
         *
         * @return string HTML
         */
        private function getHtmlForLabelDescriptionAliasesEditSection( 
$languageCode, EntityId $entityId = null ) {
-               if ( $this->sectionEditLinkGenerator === null ) {
-                       return '';
-               }
-
                return 
$this->sectionEditLinkGenerator->getLabelDescriptionAliasesEditSection(
                        $languageCode,
                        $entityId
diff --git a/view/src/EntityViewPlaceholderExpander.php 
b/view/src/EntityViewPlaceholderExpander.php
index e53c55b..2832a8d 100644
--- a/view/src/EntityViewPlaceholderExpander.php
+++ b/view/src/EntityViewPlaceholderExpander.php
@@ -166,14 +166,13 @@
         */
        public function renderTermBox() {
 
-               $entityTermsView = new EntityTermsView(
+               $termsListView = new TermsListView(
                        $this->templateFactory,
-                       null,
                        $this->languageNameLookup,
                        $this->textProvider
                );
 
-               $html = $entityTermsView->getEntityTermsForLanguageListView(
+               $html = $termsListView->getHtml(
                        $this->labelsProvider,
                        $this->descriptionsProvider,
                        $this->aliasesProvider,
diff --git a/view/src/TermsListView.php b/view/src/TermsListView.php
new file mode 100644
index 0000000..02471a6
--- /dev/null
+++ b/view/src/TermsListView.php
@@ -0,0 +1,192 @@
+<?php
+
+namespace Wikibase\View;
+
+use Wikibase\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\AliasesProvider;
+use Wikibase\DataModel\Term\DescriptionsProvider;
+use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\TermList;
+use Wikibase\Lib\LanguageNameLookup;
+use Wikibase\View\Template\TemplateFactory;
+
+/**
+ * Generates HTML to display terms of an entity in a list.
+ *
+ * @since 0.5
+ *
+ * @license GPL-2.0+
+ * @author Thiemo Mättig
+ * @author Bene* < [email protected] >
+ * @author H. Snater < [email protected] >
+ * @author Adrian Heine <[email protected]>
+ */
+class TermsListView {
+
+       /**
+        * @var TemplateFactory
+        */
+       private $templateFactory;
+
+       /**
+        * @var LanguageNameLookup
+        */
+       private $languageNameLookup;
+
+       /**
+        * @var LocalizedTextProvider
+        */
+       private $textProvider;
+
+       /**
+        * @param TemplateFactory $templateFactory
+        * @param LanguageNameLookup $languageNameLookup
+        * @param LocalizedTextProvider $textProvider
+        */
+       public function __construct(
+               TemplateFactory $templateFactory,
+               LanguageNameLookup $languageNameLookup,
+               LocalizedTextProvider $textProvider
+       ) {
+               $this->templateFactory = $templateFactory;
+               $this->languageNameLookup = $languageNameLookup;
+               $this->textProvider = $textProvider;
+       }
+
+       /**
+        * @param LabelsProvider $labelsProvider
+        * @param DescriptionsProvider $descriptionsProvider
+        * @param AliasesProvider|null $aliasesProvider
+        * @param string[] $languageCodes The languages the user requested to 
be shown
+        *
+        * @return string HTML
+        */
+       public function getHtml(
+               LabelsProvider $labelsProvider,
+               DescriptionsProvider $descriptionsProvider,
+               AliasesProvider $aliasesProvider = null,
+               array $languageCodes
+       ) {
+               $entityTermsForLanguageViewsHtml = '';
+
+               foreach ( $languageCodes as $languageCode ) {
+                       $entityTermsForLanguageViewsHtml .= 
$this->getListItemHtml(
+                               $labelsProvider,
+                               $descriptionsProvider,
+                               $aliasesProvider,
+                               $languageCode
+                       );
+               }
+
+               return $this->getListViewHtml( $entityTermsForLanguageViewsHtml 
);
+       }
+
+       /**
+        * @param string $contentHtml
+        *
+        * @return string HTML
+        */
+       private function getListViewHtml( $contentHtml ) {
+               return $this->templateFactory->render( 
'wikibase-entitytermsforlanguagelistview',
+                       htmlspecialchars( $this->textProvider->get( 
'wikibase-entitytermsforlanguagelistview-language' ) ),
+                       htmlspecialchars( $this->textProvider->get( 
'wikibase-entitytermsforlanguagelistview-label' ) ),
+                       htmlspecialchars( $this->textProvider->get( 
'wikibase-entitytermsforlanguagelistview-description' ) ),
+                       htmlspecialchars( $this->textProvider->get( 
'wikibase-entitytermsforlanguagelistview-aliases' ) ),
+                       $contentHtml
+               );
+
+       }
+
+       /**
+        * @param LabelsProvider $labelsProvider
+        * @param DescriptionsProvider $descriptionsProvider
+        * @param AliasesProvider|null $aliasesProvider
+        * @param string $languageCode
+        *
+        * @return string HTML
+        */
+       private function getListItemHtml(
+               LabelsProvider $labelsProvider,
+               DescriptionsProvider $descriptionsProvider,
+               AliasesProvider $aliasesProvider = null,
+               $languageCode
+       ) {
+               $languageName = $this->languageNameLookup->getName( 
$languageCode );
+               $labels = $labelsProvider->getLabels();
+               $descriptions = $descriptionsProvider->getDescriptions();
+               $hasLabel = $labels->hasTermForLanguage( $languageCode );
+               $hasDescription = $descriptions->hasTermForLanguage( 
$languageCode );
+
+               return $this->templateFactory->render( 
'wikibase-entitytermsforlanguageview',
+                       'tr',
+                       'td',
+                       $languageCode,
+                       htmlspecialchars( $languageName ),
+                       $this->getTermView(
+                               $labels,
+                               'wikibase-labelview', // Template
+                               'wikibase-label-empty', // Text key
+                               $languageCode
+                       ),
+                       $this->getTermView(
+                               $descriptions,
+                               'wikibase-descriptionview', // Template
+                               'wikibase-description-empty', // Text key
+                               $languageCode
+                       ),
+                       $aliasesProvider ? $this->getAliasesView( 
$aliasesProvider->getAliasGroups(), $languageCode ) : '',
+                       '',
+                       'th'
+               );
+       }
+
+       private function getTermView( TermList $termList, $templateName, 
$emptyTextKey, $languageCode ) {
+               $hasTerm = $termList->hasTermForLanguage( $languageCode );
+               return $this->templateFactory->render( $templateName,
+                       $hasTerm ? '' : 'wb-empty',
+                       htmlspecialchars( $hasTerm
+                               ? $termList->getByLanguage( $languageCode 
)->getText()
+                               : $this->textProvider->get( $emptyTextKey )
+                       ),
+                       '',
+                       'auto', // FIXME DirLookup
+                       $hasTerm ? $languageCode : 
$this->textProvider->getLanguageOf( $emptyTextKey )
+               );
+       }
+
+       /**
+        * @param AliasGroupList $aliasGroups
+        * @param string $languageCode
+        *
+        * @return string HTML
+        */
+       private function getAliasesView( AliasGroupList $aliasGroups, 
$languageCode ) {
+               if ( !$aliasGroups->hasGroupForLanguage( $languageCode ) ) {
+                       return $this->templateFactory->render( 
'wikibase-aliasesview',
+                               'wb-empty',
+                               '',
+                               '',
+                               'auto', // FIXME DirLookup
+                               ''
+                       );
+               } else {
+                       $aliasesHtml = '';
+                       $aliases = $aliasGroups->getByLanguage( $languageCode 
)->getAliases();
+                       foreach ( $aliases as $alias ) {
+                               $aliasesHtml .= $this->templateFactory->render(
+                                       'wikibase-aliasesview-list-item',
+                                       htmlspecialchars( $alias )
+                               );
+                       }
+
+                       return $this->templateFactory->render( 
'wikibase-aliasesview',
+                               '',
+                               $aliasesHtml,
+                               '',
+                               'auto', // FIXME DirLookup
+                               $languageCode
+                       );
+               }
+       }
+
+}
diff --git a/view/src/ViewFactory.php b/view/src/ViewFactory.php
index 9a31799..f20ea48 100644
--- a/view/src/ViewFactory.php
+++ b/view/src/ViewFactory.php
@@ -315,7 +315,6 @@
                return new EntityTermsView(
                        $this->templateFactory,
                        $editSectionGenerator,
-                       $this->languageNameLookup,
                        $this->textProvider
                );
        }
diff --git a/view/tests/phpunit/EntityTermsViewTest.php 
b/view/tests/phpunit/EntityTermsViewTest.php
index 66375a5..4884be0 100644
--- a/view/tests/phpunit/EntityTermsViewTest.php
+++ b/view/tests/phpunit/EntityTermsViewTest.php
@@ -6,7 +6,6 @@
 use Wikibase\DataModel\Entity\Item;
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\DataModel\Term\Fingerprint;
-use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\View\EditSectionGenerator;
 use Wikibase\View\EntityTermsView;
 use Wikibase\View\DummyLocalizedTextProvider;
@@ -41,19 +40,11 @@
                        ->method( 'getLabelDescriptionAliasesEditSection' )
                        ->will( $this->returnValue( '<EDITSECTION>' ) );
 
-               $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' );
 
                return new EntityTermsView(
                        TemplateFactory::getDefaultInstance(),
                        $editSectionGenerator,
-                       $languageNameLookup,
                        $textProvider
                );
        }
@@ -210,97 +201,6 @@
 
                $this->assertNotContains( 'wb-empty', $html );
                $this->assertNotContains( '(wikibase-label-empty)', $html );
-       }
-
-       public function testGetEntityTermsForLanguageListView() {
-               $item = new Item(
-                       new ItemId( 'Q1' ),
-                       $this->getFingerprint()
-               );
-               $view = $this->getEntityTermsView( 0, 1 );
-               $html = $view->getEntityTermsForLanguageListView( $item, $item, 
$item, 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( '&lt;LANGUAGENAME-en&gt;', $html );
-               $this->assertContains( '&lt;LABEL&gt;', $html );
-               $this->assertContains( '&lt;DESCRIPTION&gt;', $html );
-               $this->assertContains( '&lt;ALIAS1&gt;', $html );
-               $this->assertContains( '&lt;ALIAS2&gt;', $html );
-               $this->assertNotContains( '&amp;', $html, 'no double escaping' 
);
-       }
-
-       public function testGetEntityTermsForLanguageListView_newEntity() {
-               $item = new Item(
-                       null,
-                       new Fingerprint()
-               );
-               $view = $this->getEntityTermsView( 0, 1 );
-               $html = $view->getEntityTermsForLanguageListView( $item, $item, 
$item, [ 'en' ] );
-
-               $this->assertContains( 'wb-empty', $html );
-               $this->assertContains( '(wikibase-label-empty)', $html );
-               $this->assertContains( '(wikibase-description-empty)', $html );
-               $this->assertNotContains( '(wikibase-aliases-empty)', $html );
-       }
-
-       public function testGetEntityTermsForLanguageListView_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->getEntityTermsView( 0, 0, $textProvider );
-               $html = $view->getEntityTermsForLanguageListView( $item, $item, 
$item, [] );
-
-               $this->assertContains( '&quot;RAW&quot;', $html );
-               $this->assertNotContains( '"RAW"', $html );
-       }
-
-       public function testGetEntityTermsForLanguageListView_isMarkedAsEmpty() 
{
-               $item = new Item(
-                       new ItemId( 'Q1' ),
-                       new Fingerprint()
-               );
-               $view = $this->getEntityTermsView( 0, 1 );
-               $html = $view->getEntityTermsForLanguageListView( $item, $item, 
$item, [ 'en' ] );
-
-               $this->assertContains( 'wb-empty', $html );
-               $this->assertContains( '(wikibase-label-empty)', $html );
-               $this->assertContains( '(wikibase-description-empty)', $html );
-               $this->assertNotContains( '(wikibase-aliases-empty)', $html );
-       }
-
-       public function 
testGetEntityTermsForLanguageListView_noAliasesProvider() {
-               $item = new Item(
-                       new ItemId( 'Q1' ),
-                       $this->getFingerprint()
-               );
-               $view = $this->getEntityTermsView( 0, 1 );
-               $html = $view->getEntityTermsForLanguageListView( $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( '&lt;LANGUAGENAME-en&gt;', $html );
-               $this->assertContains( '&lt;LABEL&gt;', $html );
-               $this->assertContains( '&lt;DESCRIPTION&gt;', $html );
-               $this->assertNotContains( '&lt;ALIAS1&gt;', $html );
-               $this->assertNotContains( '&lt;ALIAS2&gt;', $html );
-               $this->assertNotContains( '&amp;', $html, 'no double escaping' 
);
        }
 
 }
diff --git a/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php 
b/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
index 0af1bc2..a6a0f29 100644
--- a/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
+++ b/view/tests/phpunit/EntityViewPlaceholderExpanderTest.php
@@ -16,7 +16,7 @@
 /**
  * @covers Wikibase\View\EntityViewPlaceholderExpander
  *
- * @uses Wikibase\View\EntityTermsView
+ * @uses Wikibase\View\TermsListView
  * @uses Wikibase\View\Template\Template
  * @uses Wikibase\View\Template\TemplateFactory
  * @uses Wikibase\View\Template\TemplateRegistry
diff --git a/view/tests/phpunit/TermsListViewTest.php 
b/view/tests/phpunit/TermsListViewTest.php
new file mode 100644
index 0000000..86d248a
--- /dev/null
+++ b/view/tests/phpunit/TermsListViewTest.php
@@ -0,0 +1,152 @@
+<?php
+
+namespace Wikibase\View\Tests;
+
+use PHPUnit_Framework_TestCase;
+use Wikibase\DataModel\Entity\Item;
+use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Term\Fingerprint;
+use Wikibase\Lib\LanguageNameLookup;
+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* < [email protected] >
+ * @author Thiemo Mättig
+ * @author Adrian Heine <[email protected]>
+ */
+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' );
+
+               return new TermsListView(
+                       TemplateFactory::getDefaultInstance(),
+                       $languageNameLookup,
+                       $textProvider
+               );
+       }
+
+       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 testGetEntityTermsForLanguageListView() {
+               $item = new Item(
+                       new ItemId( 'Q1' ),
+                       $this->getFingerprint()
+               );
+               $view = $this->getTermsListView( 1 );
+               $html = $view->getHtml( $item, $item, $item, 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( '&lt;LANGUAGENAME-en&gt;', $html );
+               $this->assertContains( '&lt;LABEL&gt;', $html );
+               $this->assertContains( '&lt;DESCRIPTION&gt;', $html );
+               $this->assertContains( '&lt;ALIAS1&gt;', $html );
+               $this->assertContains( '&lt;ALIAS2&gt;', $html );
+               $this->assertNotContains( '&amp;', $html, 'no double escaping' 
);
+       }
+
+       public function testGetEntityTermsForLanguageListView_newEntity() {
+               $item = new Item(
+                       null,
+                       new Fingerprint()
+               );
+               $view = $this->getTermsListView( 1 );
+               $html = $view->getHtml( $item, $item, $item, [ 'en' ] );
+
+               $this->assertContains( 'wb-empty', $html );
+               $this->assertContains( '(wikibase-label-empty)', $html );
+               $this->assertContains( '(wikibase-description-empty)', $html );
+               $this->assertNotContains( '(wikibase-aliases-empty)', $html );
+       }
+
+       public function testGetEntityTermsForLanguageListView_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( '&quot;RAW&quot;', $html );
+               $this->assertNotContains( '"RAW"', $html );
+       }
+
+       public function testGetEntityTermsForLanguageListView_isMarkedAsEmpty() 
{
+               $item = new Item(
+                       new ItemId( 'Q1' ),
+                       new Fingerprint()
+               );
+               $view = $this->getTermsListView( 1 );
+               $html = $view->getHtml( $item, $item, $item, [ 'en' ] );
+
+               $this->assertContains( 'wb-empty', $html );
+               $this->assertContains( '(wikibase-label-empty)', $html );
+               $this->assertContains( '(wikibase-description-empty)', $html );
+               $this->assertNotContains( '(wikibase-aliases-empty)', $html );
+       }
+
+       public function 
testGetEntityTermsForLanguageListView_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( '&lt;LANGUAGENAME-en&gt;', $html );
+               $this->assertContains( '&lt;LABEL&gt;', $html );
+               $this->assertContains( '&lt;DESCRIPTION&gt;', $html );
+               $this->assertNotContains( '&lt;ALIAS1&gt;', $html );
+               $this->assertNotContains( '&lt;ALIAS2&gt;', $html );
+               $this->assertNotContains( '&amp;', $html, 'no double escaping' 
);
+       }
+
+}

-- 
To view, visit https://gerrit.wikimedia.org/r/284357
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ia516f1fd341ef30f4ced754b2969476ada3919a5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Adrian Heine <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to