Thiemo Mättig (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/337849 )

Change subject: Fix TermView components assuming all entities have 
labels/descriptions
......................................................................

Fix TermView components assuming all entities have labels/descriptions

I found two places in the code that still assumed all entity types implement
the Labels/DescriptionsProvider interfaces. This is the most minimal patch I
could do to fix this.

What this patch basically does is replacing Labels/DescriptionProviders with
TermLists, and AliasesProvider with AliasGroupLists.

I am *not* lifting the limitation that the term views only work if they get
labels and descriptions. It may make sense to make descriptions optional, but
I want to do this in a later patch. With this patch labels and descriptions
fall back to empty lists if an entity type does not support them.

I tried to minify this patch or split it into multiple smaller patches
but failed. If you have a specific suggestion, please tell me or (better)
create a patch and let me rebase mine on top of yours.

Bug: T134735
Change-Id: Icbee448c0fee7fbf66f68456d637fb1aeecee9f8
---
M repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
M repo/includes/ParserOutput/EntityParserOutputGenerator.php
M repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
M repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
M repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
M 
repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
M view/src/EntityTermsView.php
M view/src/EntityView.php
M view/src/SimpleEntityTermsView.php
M view/src/TermsListView.php
M view/tests/phpunit/SimpleEntityTermsViewTest.php
M view/tests/phpunit/TermsListViewTest.php
12 files changed, 185 insertions(+), 210 deletions(-)


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

diff --git a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php 
b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
index 6a86e34..fd9eb4c 100644
--- a/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
+++ b/repo/includes/Hooks/OutputPageBeforeHTMLHookHandler.php
@@ -6,7 +6,6 @@
 use User;
 use Wikibase\DataModel\Entity\EntityDocument;
 use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Term\AliasesProvider;
 use Wikibase\EntityFactory;
 use Wikibase\EntityRevision;
 use Wikibase\Lib\ContentLanguages;
@@ -235,17 +234,10 @@
                array $termsListItemsHtml = null,
                $languageCode
        ) {
-               // FIXME: This is not necessarily true for all entity types.
-               $labelsProvider = $entity;
-               $descriptionsProvider = $entity;
-               $aliasesProvider = $entity instanceof AliasesProvider ? $entity 
: null;
-
                return new EntityViewPlaceholderExpander(
                        $this->templateFactory,
                        $user,
-                       $labelsProvider,
-                       $descriptionsProvider,
-                       $aliasesProvider,
+                       $entity,
                        array_unique( array_merge( [ $languageCode ], 
$termsLanguages ) ),
                        new MediaWikiLanguageDirectionalityLookup(),
                        $this->languageNameLookup,
diff --git a/repo/includes/ParserOutput/EntityParserOutputGenerator.php 
b/repo/includes/ParserOutput/EntityParserOutputGenerator.php
index b921264..0eb6988 100644
--- a/repo/includes/ParserOutput/EntityParserOutputGenerator.php
+++ b/repo/includes/ParserOutput/EntityParserOutputGenerator.php
@@ -12,6 +12,7 @@
 use Wikibase\DataModel\Term\AliasesProvider;
 use Wikibase\DataModel\Term\DescriptionsProvider;
 use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\LanguageFallbackChain;
 use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\Lib\Store\EntityInfo;
@@ -352,8 +353,8 @@
                        'wikibase-terms-list-items',
                        $entityTermsView->getTermsListItems(
                                $this->languageCode,
-                               $entity,
-                               $entity,
+                               $entity instanceof LabelsProvider ? 
$entity->getLabels() : new TermList(),
+                               $entity instanceof DescriptionsProvider ? 
$entity->getDescriptions() : new TermList(),
                                $entity instanceof AliasesProvider ? $entity : 
null
                        )
                );
diff --git a/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php 
b/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
index a967bd0..78556ca 100644
--- a/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
+++ b/repo/includes/ParserOutput/EntityViewPlaceholderExpander.php
@@ -6,9 +6,11 @@
 use MWException;
 use RuntimeException;
 use User;
+use Wikibase\DataModel\Entity\EntityDocument;
 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\LanguageDirectionalityLookup;
 use Wikibase\View\LocalizedTextProvider;
@@ -38,19 +40,9 @@
        private $user;
 
        /**
-        * @var LabelsProvider
+        * @var EntityDocument
         */
-       private $labelsProvider;
-
-       /**
-        * @var DescriptionsProvider
-        */
-       private $descriptionsProvider;
-
-       /**
-        * @var AliasesProvider|null
-        */
-       private $aliasesProvider;
+       private $entity;
 
        /**
         * @var string[]
@@ -80,9 +72,7 @@
        /**
         * @param TemplateFactory $templateFactory
         * @param User $user the current user
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
+        * @param EntityDocument $entity
         * @param string[] $termsLanguages
         * @param LanguageDirectionalityLookup $languageDirectionalityLookup
         * @param LanguageNameLookup $languageNameLookup
@@ -92,9 +82,7 @@
        public function __construct(
                TemplateFactory $templateFactory,
                User $user,
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null,
+               EntityDocument $entity,
                array $termsLanguages,
                LanguageDirectionalityLookup $languageDirectionalityLookup,
                LanguageNameLookup $languageNameLookup,
@@ -102,9 +90,7 @@
                array $termsListItems = array()
        ) {
                $this->user = $user;
-               $this->labelsProvider = $labelsProvider;
-               $this->descriptionsProvider = $descriptionsProvider;
-               $this->aliasesProvider = $aliasesProvider;
+               $this->entity = $entity;
                $this->templateFactory = $templateFactory;
                $this->termsLanguages = $termsLanguages;
                $this->languageDirectionalityLookup = 
$languageDirectionalityLookup;
@@ -178,7 +164,6 @@
         * @return string HTML
         */
        public function renderTermBox() {
-
                $termsListView = new TermsListView(
                        $this->templateFactory,
                        $this->languageNameLookup,
@@ -192,9 +177,9 @@
                                $contentHtml .= $this->termsListItems[ 
$languageCode ];
                        } else {
                                $contentHtml .= $termsListView->getListItemHtml(
-                                       $this->labelsProvider,
-                                       $this->descriptionsProvider,
-                                       $this->aliasesProvider,
+                                       $this->entity instanceof LabelsProvider 
? $this->entity->getLabels() : new TermList(),
+                                       $this->entity instanceof 
DescriptionsProvider ? $this->entity->getDescriptions() : new TermList(),
+                                       $this->entity instanceof 
AliasesProvider ? $this->entity->getAliasGroups() : null,
                                        $languageCode
                                );
                        }
diff --git a/repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php 
b/repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
index 62afd7e..92d72a4 100644
--- a/repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
+++ b/repo/includes/ParserOutput/PlaceholderEmittingEntityTermsView.php
@@ -4,9 +4,8 @@
 
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
-use Wikibase\DataModel\Term\AliasesProvider;
-use Wikibase\DataModel\Term\DescriptionsProvider;
-use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\View\EditSectionGenerator;
 use Wikibase\View\HtmlTermRenderer;
 use Wikibase\View\LocalizedTextProvider;
@@ -71,26 +70,27 @@
        /**
         * @param string $mainLanguageCode Desired language of the label, 
description and aliases in the
         *  title and header section. Not necessarily identical to the 
interface language.
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
+        * @param TermList $labels
+        * @param TermList $descriptions
+        * @param AliasGroupList|null $aliasGroups
         * @param EntityId|null $entityId the id of the entity
         *
         * @return string HTML
         */
        public function getHtml(
                $mainLanguageCode,
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null,
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups = null,
                EntityId $entityId = null
        ) {
                $cssClasses = $this->textInjector->newMarker(
                        
'entityViewPlaceholder-entitytermsview-entitytermsforlanguagelistview-class'
                );
 
-               return $this->templateFactory->render( 
'wikibase-entitytermsview',
-                       $this->getHeadingHtml( $mainLanguageCode, $entityId, 
$aliasesProvider ),
+               return $this->templateFactory->render(
+                       'wikibase-entitytermsview',
+                       $this->getHeadingHtml( $mainLanguageCode, $entityId, 
$aliasGroups ),
                        $this->textInjector->newMarker( 'termbox' ),
                        $cssClasses,
                        $this->getHtmlForLabelDescriptionAliasesEditSection( 
$mainLanguageCode, $entityId )
@@ -100,31 +100,32 @@
        /**
         * @param string $mainLanguageCode Desired language of the label, 
description and aliases in the
         *  title and header section. Not necessarily identical to the 
interface language.
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
+        * @param TermList $labels
+        * @param TermList $descriptions
+        * @param AliasGroupList|null $aliasGroups
         *
         * @return string[] HTML snippets
         */
        public function getTermsListItems(
                $mainLanguageCode,
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups = null
        ) {
                $termsListItems = [];
 
                $termsListLanguages = $this->getTermsLanguageCodes(
                        $mainLanguageCode,
-                       $labelsProvider,
-                       $descriptionsProvider,
-                       $aliasesProvider
+                       $labels,
+                       $descriptions,
+                       $aliasGroups ?: new AliasGroupList()
                );
+
                foreach ( $termsListLanguages as $languageCode ) {
                        $termsListItems[ $languageCode ] = 
$this->termsListView->getListItemHtml(
-                               $labelsProvider,
-                               $descriptionsProvider,
-                               $aliasesProvider,
+                               $labels,
+                               $descriptions,
+                               $aliasGroups,
                                $languageCode
                        );
                }
diff --git 
a/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
 
b/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
index 0bf2fd7..e3d2ce7 100644
--- 
a/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
+++ 
b/repo/tests/phpunit/includes/ParserOutput/EntityViewPlaceholderExpanderTest.php
@@ -47,8 +47,6 @@
                        $templateFactory,
                        $user,
                        $item,
-                       $item,
-                       $aliasesProvider,
                        $termsLanguages,
                        $this->getMock( LanguageDirectionalityLookup::class ),
                        $languageNameLookup,
diff --git 
a/repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
 
b/repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
index afcdc2f..2ee3184 100644
--- 
a/repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
+++ 
b/repo/tests/phpunit/includes/ParserOutput/PlaceholderEmittingEntityTermsViewTest.php
@@ -3,8 +3,8 @@
 namespace Wikibase\Repo\Tests\ParserOutput;
 
 use PHPUnit_Framework_TestCase;
-use Wikibase\DataModel\Entity\Property;
 use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\Repo\ParserOutput\PlaceholderEmittingEntityTermsView;
 use Wikibase\Repo\ParserOutput\TextInjector;
 use Wikibase\View\EditSectionGenerator;
@@ -41,11 +41,10 @@
 
        public function testGetHtml() {
                $textInjector = new TextInjector();
-               $property = new Property( null, null, 'string' );
 
                $entityTermsView = $this->newEntityTermsView( $textInjector );
 
-               $html = $entityTermsView->getHtml( 'lkt', $property, $property 
);
+               $html = $entityTermsView->getHtml( 'lkt', new TermList(), new 
TermList() );
                $markers = $textInjector->getMarkers();
 
                foreach ( $markers as $marker => $name ) {
@@ -63,11 +62,10 @@
 
        public function testGetTermsListItems() {
                $textInjector = new TextInjector();
-               $property = new Property( null, null, 'string' );
 
                $entityTermsView = $this->newEntityTermsView( $textInjector );
 
-               $termsListItems = $entityTermsView->getTermsListItems( 'lkt', 
$property, $property );
+               $termsListItems = $entityTermsView->getTermsListItems( 'lkt', 
new TermList(), new TermList() );
 
                $this->assertSame( [ 'lkt' => null ], $termsListItems );
        }
diff --git a/view/src/EntityTermsView.php b/view/src/EntityTermsView.php
index 0d315b1..b81aaeb 100644
--- a/view/src/EntityTermsView.php
+++ b/view/src/EntityTermsView.php
@@ -3,9 +3,8 @@
 namespace Wikibase\View;
 
 use Wikibase\DataModel\Entity\EntityId;
-use Wikibase\DataModel\Term\AliasesProvider;
-use Wikibase\DataModel\Term\DescriptionsProvider;
-use Wikibase\DataModel\Term\LabelsProvider;
+use Wikibase\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\TermList;
 
 /**
  * Generates HTML to display the terms of an entity.
@@ -18,18 +17,18 @@
        /**
         * @param string $mainLanguageCode Desired language of the label, 
description and aliases in the
         *  title and header section. Not necessarily identical to the 
interface language.
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
+        * @param TermList $labels
+        * @param TermList $descriptions
+        * @param AliasGroupList|null $aliasGroups
         * @param EntityId|null $entityId the id of the entity
         *
         * @return string HTML
         */
        public function getHtml(
                $mainLanguageCode,
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null,
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups = null,
                EntityId $entityId = null
        );
 
@@ -38,8 +37,6 @@
         *
         * @return string HTML
         */
-       public function getTitleHtml(
-               EntityId $entityId = null
-       );
+       public function getTitleHtml( EntityId $entityId = null );
 
 }
diff --git a/view/src/EntityView.php b/view/src/EntityView.php
index b9baa08..68f22a7 100644
--- a/view/src/EntityView.php
+++ b/view/src/EntityView.php
@@ -127,9 +127,9 @@
                if ( $entity instanceof LabelsProvider && $entity instanceof 
DescriptionsProvider ) {
                        return $this->entityTermsView->getHtml(
                                $this->languageCode,
-                               $entity,
-                               $entity,
-                               $entity instanceof AliasesProvider ? $entity : 
null,
+                               $entity->getLabels(),
+                               $entity->getDescriptions(),
+                               $entity instanceof AliasesProvider ? 
$entity->getAliasGroups() : null,
                                $id
                        );
                }
diff --git a/view/src/SimpleEntityTermsView.php 
b/view/src/SimpleEntityTermsView.php
index f9d1c39..e38a30f 100644
--- a/view/src/SimpleEntityTermsView.php
+++ b/view/src/SimpleEntityTermsView.php
@@ -6,10 +6,8 @@
 use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
 use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookupException;
 use Wikibase\DataModel\Term\AliasGroupList;
-use Wikibase\DataModel\Term\AliasesProvider;
-use Wikibase\DataModel\Term\DescriptionsProvider;
-use Wikibase\DataModel\Term\LabelsProvider;
 use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\View\Template\TemplateFactory;
 
 /**
@@ -76,31 +74,32 @@
        /**
         * @param string $mainLanguageCode Desired language of the label, 
description and aliases in the
         *  title and header section. Not necessarily identical to the 
interface language.
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
+        * @param TermList $labels
+        * @param TermList $descriptions
+        * @param AliasGroupList|null $aliasGroups
         * @param EntityId|null $entityId the id of the entity
         *
         * @return string HTML
         */
        public function getHtml(
                $mainLanguageCode,
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null,
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups = null,
                EntityId $entityId = null
        ) {
-               return $this->templateFactory->render( 
'wikibase-entitytermsview',
-                       $this->getHeadingHtml( $mainLanguageCode, $entityId, 
$aliasesProvider ),
+               return $this->templateFactory->render(
+                       'wikibase-entitytermsview',
+                       $this->getHeadingHtml( $mainLanguageCode, $entityId, 
$aliasGroups ),
                        $this->termsListView->getHtml(
-                               $labelsProvider,
-                               $descriptionsProvider,
-                               $aliasesProvider,
+                               $labels,
+                               $descriptions,
+                               $aliasGroups,
                                $this->getTermsLanguageCodes(
                                        $mainLanguageCode,
-                                       $labelsProvider,
-                                       $descriptionsProvider,
-                                       $aliasesProvider
+                                       $labels,
+                                       $descriptions,
+                                       $aliasGroups ?: new AliasGroupList()
                                )
                        ),
                        '',
@@ -111,7 +110,7 @@
        protected function getHeadingHtml(
                $languageCode,
                EntityId $entityId = null,
-               AliasesProvider $aliasesProvider = null
+               AliasGroupList $aliasGroups = null
        ) {
                $headingPartsHtml = '';
 
@@ -131,8 +130,7 @@
                        $this->getDescriptionHtml( $description )
                );
 
-               if ( $aliasesProvider !== null ) {
-                       $aliasGroups = $aliasesProvider->getAliasGroups();
+               if ( $aliasGroups ) {
                        $headingPartsHtml .= $this->templateFactory->render(
                                'wikibase-entitytermsview-heading-part',
                                'aliases',
@@ -141,7 +139,8 @@
                        );
                }
 
-               return $this->templateFactory->render( 
'wikibase-entitytermsview-heading',
+               return $this->templateFactory->render(
+                       'wikibase-entitytermsview-heading',
                        $headingPartsHtml
                );
        }
@@ -149,30 +148,28 @@
        /**
         * @param string $mainLanguageCode Desired language of the label, 
description and aliases in the
         *  title and header section. Not necessarily identical to the 
interface language.
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
+        * @param TermList $labels
+        * @param TermList $descriptions
+        * @param AliasGroupList $aliasGroups
         *
         * @return string[]
         */
        protected function getTermsLanguageCodes(
                $mainLanguageCode,
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups
        ) {
                $allLanguages = [ $mainLanguageCode ];
 
-               $labelLanguages = array_keys( 
$labelsProvider->getLabels()->toTextArray() );
+               $labelLanguages = array_keys( $labels->toTextArray() );
                $allLanguages = array_merge( $allLanguages, $labelLanguages );
 
-               $descriptionLanguages = array_keys( 
$descriptionsProvider->getDescriptions()->toTextArray() );
+               $descriptionLanguages = array_keys( 
$descriptions->toTextArray() );
                $allLanguages = array_merge( $allLanguages, 
$descriptionLanguages );
 
-               if ( $aliasesProvider ) {
-                       $aliasLanguages = array_keys( 
$aliasesProvider->getAliasGroups()->toTextArray() );
-                       $allLanguages = array_merge( $allLanguages, 
$aliasLanguages );
-               }
+               $aliasLanguages = array_keys( $aliasGroups->toTextArray() );
+               $allLanguages = array_merge( $allLanguages, $aliasLanguages );
 
                $allLanguages = array_unique( $allLanguages );
                return $allLanguages;
@@ -203,7 +200,8 @@
                        }
                }
 
-               return $this->templateFactory->render( 'wikibase-title',
+               return $this->templateFactory->render(
+                       'wikibase-title',
                        $isEmpty ? 'wb-empty' : '',
                        $isEmpty ? htmlspecialchars( $this->textProvider->get( 
'wikibase-label-empty' ) ) : $labelHtml,
                        $idInParenthesesHtml
@@ -241,8 +239,8 @@
                                htmlspecialchars( $alias )
                        );
                }
-               $aliasesHtml = $this->templateFactory->render( 
'wikibase-entitytermsview-aliases', $aliasesHtml );
-               return $aliasesHtml;
+
+               return $this->templateFactory->render( 
'wikibase-entitytermsview-aliases', $aliasesHtml );
        }
 
        /**
diff --git a/view/src/TermsListView.php b/view/src/TermsListView.php
index 124cfeb..3e65ebe 100644
--- a/view/src/TermsListView.php
+++ b/view/src/TermsListView.php
@@ -3,9 +3,6 @@
 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;
@@ -56,26 +53,26 @@
        }
 
        /**
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
+        * @param TermList $labels
+        * @param TermList $descriptions
+        * @param AliasGroupList|null $aliasGroups
         * @param string[] $languageCodes The languages the user requested to 
be shown
         *
         * @return string HTML
         */
        public function getHtml(
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null,
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups = null,
                array $languageCodes
        ) {
                $entityTermsForLanguageViewsHtml = '';
 
                foreach ( $languageCodes as $languageCode ) {
                        $entityTermsForLanguageViewsHtml .= 
$this->getListItemHtml(
-                               $labelsProvider,
-                               $descriptionsProvider,
-                               $aliasesProvider,
+                               $labels,
+                               $descriptions,
+                               $aliasGroups,
                                $languageCode
                        );
                }
@@ -89,7 +86,8 @@
         * @return string HTML
         */
        public function getListViewHtml( $contentHtml ) {
-               return $this->templateFactory->render( 
'wikibase-entitytermsforlanguagelistview',
+               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' ) ),
@@ -100,24 +98,23 @@
        }
 
        /**
-        * @param LabelsProvider $labelsProvider
-        * @param DescriptionsProvider $descriptionsProvider
-        * @param AliasesProvider|null $aliasesProvider
+        * @param TermList $labels
+        * @param TermList $descriptions
+        * @param AliasGroupList|null $aliasGroups
         * @param string $languageCode
         *
         * @return string HTML
         */
        public function getListItemHtml(
-               LabelsProvider $labelsProvider,
-               DescriptionsProvider $descriptionsProvider,
-               AliasesProvider $aliasesProvider = null,
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups = null,
                $languageCode
        ) {
                $languageName = $this->languageNameLookup->getName( 
$languageCode );
-               $labels = $labelsProvider->getLabels();
-               $descriptions = $descriptionsProvider->getDescriptions();
 
-               return $this->templateFactory->render( 
'wikibase-entitytermsforlanguageview',
+               return $this->templateFactory->render(
+                       'wikibase-entitytermsforlanguageview',
                        'tr',
                        'td',
                        $languageCode,
@@ -134,7 +131,7 @@
                                'wikibase-description-empty', // Text key
                                $languageCode
                        ),
-                       $aliasesProvider ? $this->getAliasesView( 
$aliasesProvider->getAliasGroups(), $languageCode ) : '',
+                       $aliasGroups ? $this->getAliasesView( $aliasGroups, 
$languageCode ) : '',
                        '',
                        'th'
                );
@@ -143,7 +140,8 @@
        private function getTermView( TermList $termList, $templateName, 
$emptyTextKey, $languageCode ) {
                $hasTerm = $termList->hasTermForLanguage( $languageCode );
                $effectiveLanguage = $hasTerm ? $languageCode : 
$this->textProvider->getLanguageOf( $emptyTextKey );
-               return $this->templateFactory->render( $templateName,
+               return $this->templateFactory->render(
+                       $templateName,
                        $hasTerm ? '' : 'wb-empty',
                        htmlspecialchars( $hasTerm
                                ? $termList->getByLanguage( $languageCode 
)->getText()
@@ -163,7 +161,8 @@
         */
        private function getAliasesView( AliasGroupList $aliasGroups, 
$languageCode ) {
                if ( !$aliasGroups->hasGroupForLanguage( $languageCode ) ) {
-                       return $this->templateFactory->render( 
'wikibase-aliasesview',
+                       return $this->templateFactory->render(
+                               'wikibase-aliasesview',
                                'wb-empty',
                                '',
                                '',
@@ -181,7 +180,8 @@
                                );
                        }
 
-                       return $this->templateFactory->render( 
'wikibase-aliasesview',
+                       return $this->templateFactory->render(
+                               'wikibase-aliasesview',
                                '',
                                $aliasesHtml,
                                '',
diff --git a/view/tests/phpunit/SimpleEntityTermsViewTest.php 
b/view/tests/phpunit/SimpleEntityTermsViewTest.php
index 46bebe4..633e420 100644
--- a/view/tests/phpunit/SimpleEntityTermsViewTest.php
+++ b/view/tests/phpunit/SimpleEntityTermsViewTest.php
@@ -6,8 +6,10 @@
 use Wikibase\DataModel\Entity\EntityId;
 use Wikibase\DataModel\Entity\ItemId;
 use Wikibase\DataModel\Services\Lookup\LabelDescriptionLookup;
-use Wikibase\DataModel\Term\Fingerprint;
+use Wikibase\DataModel\Term\AliasGroup;
+use Wikibase\DataModel\Term\AliasGroupList;
 use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\View\EditSectionGenerator;
 use Wikibase\View\DummyLocalizedTextProvider;
 use Wikibase\View\HtmlTermRenderer;
@@ -77,50 +79,57 @@
                );
        }
 
-       private function getFingerprint( $languageCode = 'en' ) {
-               $fingerprint = new Fingerprint();
-               $fingerprint->setLabel( $languageCode, '<LABEL>' );
-               $fingerprint->setDescription( $languageCode, '<DESCRIPTION>' );
-               $fingerprint->setAliasGroup( $languageCode, [ '<ALIAS1>', 
'<ALIAS2>' ] );
-               return $fingerprint;
+       private function getTermList( $term, $languageCode = 'en' ) {
+               return new TermList( [ new Term( $languageCode, $term ) ] );
+       }
+
+       private function getAliasGroupList( array $aliases, $languageCode = 
'en' ) {
+               return new AliasGroupList( [ new AliasGroup( $languageCode, 
$aliases ) ] );
        }
 
        public function testGetHtml_containsAliases() {
                $entityTermsView = $this->getEntityTermsView( 1 );
-               $fingerprint = $this->getFingerprint();
-               $html = $entityTermsView->getHtml( 'en', $fingerprint, 
$fingerprint, $fingerprint, null );
+               $aliasGroups = $this->getAliasGroupList( [ '<ALIAS1>', 
'<ALIAS2>' ] );
+               $html = $entityTermsView->getHtml( 'en', new TermList(), new 
TermList(), $aliasGroups, null );
 
                $this->assertContains( '&lt;ALIAS1&gt;', $html );
                $this->assertContains( '&lt;ALIAS2&gt;', $html );
        }
 
        public function entityFingerprintProvider() {
-               $fingerprint = $this->getFingerprint();
+               $labels = $this->getTermList( '<LABEL>' );
+               $descriptions = $this->getTermList( '<DESCRIPTION>' );
+               $emptyAliases = new AliasGroupList();
 
                return array(
-                       'empty' => array( new Fingerprint(), new ItemId( 'Q42' 
), 'en' ),
-                       'other language' => array( $fingerprint, new ItemId( 
'Q42' ), 'de' ),
-                       'other id' => array( $fingerprint, new ItemId( 'Q12' ), 
'en' ),
+                       'empty' => array( new TermList(), new TermList(), 
$emptyAliases, new ItemId( 'Q42' ), 'en' ),
+                       'other language' => array( $labels, $descriptions, 
$emptyAliases, new ItemId( 'Q42' ), 'de' ),
+                       'other id' => array( $labels, $descriptions, 
$emptyAliases, new ItemId( 'Q12' ), 'en' ),
                );
        }
 
        /**
         * @dataProvider entityFingerprintProvider
         */
-       public function testGetHtml_isEditable( Fingerprint $fingerprint, 
ItemId $entityId, $languageCode ) {
+       public function testGetHtml_isEditable(
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups,
+               ItemId $entityId,
+               $languageCode
+       ) {
                $entityTermsView = $this->getEntityTermsView( 1 );
-               $html = $entityTermsView->getHtml( $languageCode, $fingerprint, 
$fingerprint, $fingerprint, $entityId );
+               $html = $entityTermsView->getHtml( $languageCode, $labels, 
$descriptions, $aliasGroups, $entityId );
 
                $this->assertContains( '<EDITSECTION>', $html );
        }
 
        public function testGetHtml_valuesAreEscaped() {
-               $fingerprint = new Fingerprint();
-               $fingerprint->setDescription( 'en', '<script>alert( "xss" 
);</script>' );
-               $fingerprint->setAliasGroup( 'en', array( '<a href="#">evil 
html</a>', '<b>bold</b>', '<i>italic</i>' ) );
+               $descriptions = $this->getTermList( '<script>alert( "xss" 
);</script>' );
+               $aliasGroups = $this->getAliasGroupList( [ '<a href="#">evil 
html</a>', '<b>bold</b>', '<i>italic</i>' ] );
 
                $view = $this->getEntityTermsView( 1 );
-               $html = $view->getHtml( 'en', $fingerprint, $fingerprint, 
$fingerprint, null );
+               $html = $view->getHtml( 'en', new TermList(), $descriptions, 
$aliasGroups, null );
 
                $this->assertContains( 'evil html', $html, 'make sure it works' 
);
                $this->assertNotContains( 'href="#"', $html );
@@ -132,8 +141,7 @@
 
        public function testGetHtml_isMarkedAsEmptyValue() {
                $entityTermsView = $this->getEntityTermsView( 1 );
-               $fingerprint = new Fingerprint();
-               $html = $entityTermsView->getHtml( 'en', $fingerprint, 
$fingerprint, $fingerprint, null );
+               $html = $entityTermsView->getHtml( 'en', new TermList(), new 
TermList(), new AliasGroupList(), null );
 
                $this->assertContains( 'wb-empty', $html );
                $this->assertContains( '(wikibase-description-empty)', $html );
@@ -142,8 +150,9 @@
 
        public function testGetHtml_isNotMarkedAsEmpty() {
                $entityTermsView = $this->getEntityTermsView( 1 );
-               $fingerprint = $this->getFingerprint();
-               $html = $entityTermsView->getHtml( 'en', $fingerprint, 
$fingerprint, $fingerprint, new ItemId( 'Q111' ) );
+               $terms = $this->getTermList( 'not empty' );
+               $aliasGroups = $this->getAliasGroupList( [ 'not empty' ] );
+               $html = $entityTermsView->getHtml( 'en', $terms, $terms, 
$aliasGroups, new ItemId( 'Q111' ) );
 
                $this->assertNotContains( 'wb-empty', $html );
                $this->assertNotContains( '(wikibase-description-empty)', $html 
);
@@ -151,10 +160,11 @@
        }
 
        public function testGetHtml_containsEmptyDescriptionPlaceholder() {
-               $fingerprint = $this->getFingerprint();
-
                $view = $this->getEntityTermsView( 1 );
-               $html = $view->getHtml( 'en', $fingerprint, $fingerprint, 
$fingerprint, null );
+               $labels = $this->getTermList( 'not empty' );
+               $descriptions = new TermList();
+               $aliasGroups = $this->getAliasGroupList( [ 'not empty' ] );
+               $html = $view->getHtml( 'en', $labels, $descriptions, 
$aliasGroups, null );
 
                $this->assertContains( 'wb-empty', $html );
                $this->assertContains( '(wikibase-description-empty)', $html );
@@ -162,11 +172,8 @@
        }
 
        public function testGetHtml_containsEmptyAliasesList() {
-               $fingerprint = $this->getFingerprint();
-               $fingerprint->removeAliasGroup( 'en' );
-
                $view = $this->getEntityTermsView( 1 );
-               $html = $view->getHtml( 'en', $fingerprint, $fingerprint, 
$fingerprint );
+               $html = $view->getHtml( 'en', new TermList(), new TermList(), 
new AliasGroupList() );
 
                $this->assertContains( 'wb-empty', $html );
                $this->assertContains( '<div 
class="wikibase-entitytermsview-heading-aliases wb-empty"></div>', $html );
@@ -175,21 +182,27 @@
        /**
         * @dataProvider entityFingerprintProvider
         */
-       public function testGetHtml_containsAllTerms( Fingerprint $fingerprint, 
ItemId $entityId, $languageCode ) {
+       public function testGetHtml_containsAllTerms(
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliases,
+               ItemId $entityId,
+               $languageCode
+       ) {
                $termsListView = $this->getMockBuilder( TermsListView::class )
                        ->disableOriginalConstructor()
                        ->getMock();
                $termsListView->expects( $this->once() )
                        ->method( 'getHtml' )
                        ->with(
-                               $fingerprint,
-                               $fingerprint,
-                               $fingerprint,
+                               $labels,
+                               $descriptions,
+                               $aliases,
                                $this->equalTo( $languageCode === 'de' ? [ 
'de', 'en' ] : [ 'en' ] )
                        )
                        ->will( $this->returnValue( '<TERMSLISTVIEW>' ) );
                $entityTermsView = $this->getEntityTermsView( 1, $termsListView 
);
-               $html = $entityTermsView->getHtml( $languageCode, $fingerprint, 
$fingerprint, $fingerprint, $entityId );
+               $html = $entityTermsView->getHtml( $languageCode, $labels, 
$descriptions, $aliases, $entityId );
 
                $this->assertContains( '<TERMSLISTVIEW>', $html );
        }
diff --git a/view/tests/phpunit/TermsListViewTest.php 
b/view/tests/phpunit/TermsListViewTest.php
index 29ab15d..329dd0a 100644
--- a/view/tests/phpunit/TermsListViewTest.php
+++ b/view/tests/phpunit/TermsListViewTest.php
@@ -3,10 +3,9 @@
 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\DataModel\Term\AliasGroupList;
+use Wikibase\DataModel\Term\Term;
+use Wikibase\DataModel\Term\TermList;
 use Wikibase\Lib\LanguageNameLookup;
 use Wikibase\View\LanguageDirectionalityLookup;
 use Wikibase\View\TermsListView;
@@ -62,31 +61,28 @@
                );
        }
 
-       private function getFingerprint( $languageCode = 'en' ) {
-               $fingerprint = new Fingerprint();
-               $fingerprint->setLabel( $languageCode, '<LABEL>' );
-               $fingerprint->setDescription( $languageCode, '<DESCRIPTION>' );
-               $fingerprint->setAliasGroup( $languageCode, array( '<ALIAS1>', 
'<ALIAS2>' ) );
-               return $fingerprint;
+       private function getTermList( $term, $languageCode = 'en' ) {
+               return new TermList( [ new Term( $languageCode, $term ) ] );
        }
 
        public function getTermsListViewProvider() {
-               $item = new Item(
-                       new ItemId( 'Q1' ),
-                       $this->getFingerprint( 'arc' )
-               );
+               $languageCode = 'arc';
+               $labels = $this->getTermList( '<LABEL>', $languageCode );
+               $descriptions = $this->getTermList( '<DESCRIPTION>', 
$languageCode );
+               $aliasGroups = new AliasGroupList();
+               $aliasGroups->setAliasesForLanguage( $languageCode, [ 
'<ALIAS1>', '<ALIAS2>' ] );
+
                return [
                        [
-                               $item, 'arc', true, true, true
+                               $labels, $descriptions, $aliasGroups, 
$languageCode, true, true, true
                        ],
                        [
-                               new Item(), 'lkt', false, false, false
+                               new TermList(), new TermList(), new 
AliasGroupList(), 'lkt', false, false, false
                        ],
                        [
-                               new Item(
-                                       new ItemId( 'Q1' ),
-                                       new Fingerprint()
-                               ),
+                               new TermList(),
+                               new TermList(),
+                               new AliasGroupList(),
                                'en',
                                false,
                                false,
@@ -99,7 +95,9 @@
         * @dataProvider getTermsListViewProvider
         */
        public function testGetTermsListView(
-               EntityDocument $entity,
+               TermList $labels,
+               TermList $descriptions,
+               AliasGroupList $aliasGroups,
                $languageCode,
                $hasLabel,
                $hasDescription,
@@ -107,7 +105,7 @@
        ) {
                $languageDirectionality = $languageCode === 'arc' ? 'rtl' : 
'ltr';
                $view = $this->getTermsListView( 1 );
-               $html = $view->getHtml( $entity, $entity, $entity, [ 
$languageCode ] );
+               $html = $view->getHtml( $labels, $descriptions, $aliasGroups, [ 
$languageCode ] );
 
                $this->assertContains( 
'(wikibase-entitytermsforlanguagelistview-language)', $html );
                $this->assertContains( 'wikibase-entitytermsforlanguageview-' . 
$languageCode, $html );
@@ -165,24 +163,18 @@
                                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, [] );
+               $html = $view->getHtml( new TermList(), new TermList(), new 
AliasGroupList(), [] );
 
                $this->assertContains( '&quot;RAW&quot;', $html );
                $this->assertNotContains( '"RAW"', $html );
        }
 
        public function testGetTermsListView_noAliasesProvider() {
-               $item = new Item(
-                       new ItemId( 'Q1' ),
-                       $this->getFingerprint()
-               );
+               $labels = $this->getTermList( '<LABEL>' );
+               $descriptions = $this->getTermList( '<DESCRIPTION>' );
                $view = $this->getTermsListView( 1 );
-               $html = $view->getHtml( $item, $item, null, array( 'en' ) );
+               $html = $view->getHtml( $labels, $descriptions, null, array( 
'en' ) );
 
                $this->assertContains( 
'(wikibase-entitytermsforlanguagelistview-language)', $html );
                $this->assertContains( 
'(wikibase-entitytermsforlanguagelistview-label)', $html );

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icbee448c0fee7fbf66f68456d637fb1aeecee9f8
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Thiemo Mättig (WMDE) <[email protected]>

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

Reply via email to