WikidataBuilder has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/352566 )

Change subject: New Wikidata Build - 2017-05-08T10:00:01+0000
......................................................................

New Wikidata Build - 2017-05-08T10:00:01+0000

Change-Id: I471e91d54ca1acf7cf3b308074643cf85f9b60b5
---
M composer.lock
M extensions/ArticlePlaceholder/i18n/hi.json
M extensions/ExternalValidation/.travis.yml
M extensions/ExternalValidation/composer.json
M extensions/ExternalValidation/includes/CrossCheck/CrossChecker.php
M 
extensions/ExternalValidation/includes/DumpMetaInformation/DumpMetaInformation.php
M extensions/ExternalValidation/maintenance/UpdateExternalData.php
A extensions/ExternalValidation/phpcs.xml
M extensions/ExternalValidation/specials/SpecialExternalDatabases.php
M 
extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/DispatchingDataValueComparerTest.php
M 
extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
M 
extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
M extensions/ExternalValidation/tests/phpunit/CrossCheck/CrossCheckerTest.php
M 
extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
M 
extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
M 
extensions/ExternalValidation/tests/phpunit/Serializer/SerializerFactoryTest.php
M extensions/MediaInfo/.jscsrc
M extensions/MediaInfo/Gruntfile.js
M extensions/MediaInfo/WikibaseMediaInfo.i18n.alias.php
M extensions/MediaInfo/composer.json
M extensions/MediaInfo/phpcs.xml
M extensions/MediaInfo/resources/datamodel/MediaInfo.js
M extensions/MediaInfo/resources/getDeserializer.js
M extensions/MediaInfo/resources/jquery.wikibase.mediainfoview.js
M extensions/MediaInfo/resources/serialization/MediaInfoDeserializer.js
M 
extensions/MediaInfo/tests/phpunit/composer/DataModel/Serialization/MediaInfoDeserializerTest.php
M extensions/Quality/.travis.yml
M extensions/Quality/composer.json
M extensions/Quality/includes/Html/HtmlTableBuilder.php
M extensions/Quality/includes/Html/HtmlTableCellBuilder.php
M extensions/Quality/includes/Html/HtmlTableHeaderBuilder.php
A extensions/Quality/phpcs.xml
M extensions/Quality/tests/phpunit/Helper/JsonFileEntityLookup.php
M extensions/Quality/tests/phpunit/Html/HtmlTableBuilderTest.php
M 
extensions/Wikibase/client/tests/phpunit/includes/Hooks/EchoNotificationsHandlersTest.php
M extensions/Wikibase/repo/includes/WikibaseRepo.php
M vendor/composer/installed.json
37 files changed, 313 insertions(+), 255 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikidata 
refs/changes/66/352566/1

diff --git a/composer.lock b/composer.lock
index 4bce988..5fbdee6 100644
--- a/composer.lock
+++ b/composer.lock
@@ -749,12 +749,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git";,
-                "reference": "c47fa0747da32d997e83eaa5837ea38ca7be63f3"
+                "reference": "c77eb510b17d11b0b75bdf0e7984929032f42216"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/c47fa0747da32d997e83eaa5837ea38ca7be63f3";,
-                "reference": "c47fa0747da32d997e83eaa5837ea38ca7be63f3",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/c77eb510b17d11b0b75bdf0e7984929032f42216";,
+                "reference": "c77eb510b17d11b0b75bdf0e7984929032f42216",
                 "shasum": ""
             },
             "require-dev": {
@@ -780,7 +780,7 @@
             ],
             "description": "Provides a special page with Wikibase information 
about a certain topic, with invitation to create an article for the topic",
             "homepage": 
"https://www.mediawiki.org/wiki/Extension:ArticlePlaceholder";,
-            "time": "2017-05-05 19:40:00"
+            "time": "2017-05-07 20:48:52"
         },
         {
             "name": "propertysuggester/property-suggester",
@@ -1240,7 +1240,7 @@
             "source": {
                 "type": "git",
                 "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseQualityExternalValidation";,
-                "reference": "7b072c4ec5e305cb94ca90df6bfa9745023b5006"
+                "reference": "1980e6bc41b457ebae5e4e5352ed7cc2d19dacc2"
             },
             "require": {
                 "data-values/common": ">=0.1 <0.4",
@@ -1257,7 +1257,8 @@
                 "jakub-onderka/php-console-highlighter": "0.3.2",
                 "jakub-onderka/php-parallel-lint": "0.9.2",
                 "phpunit/phpunit": "~3.7,>=3.7.37",
-                "satooshi/php-coveralls": "dev-master"
+                "satooshi/php-coveralls": "dev-master",
+                "wikibase/wikibase-codesniffer": "^0.1.0"
             },
             "type": "mediawiki-extension",
             "autoload": {
@@ -1274,7 +1275,9 @@
             },
             "scripts": {
                 "test": [
-                    "parallel-lint . --exclude vendor"
+                    "@validate --no-interaction",
+                    "parallel-lint . --exclude vendor",
+                    "phpcs -p -s"
                 ]
             },
             "license": [
@@ -1299,7 +1302,7 @@
             "support": {
                 "issues": 
"https://phabricator.wikimedia.org/project/profile/1203/";
             },
-            "time": "2017-05-06 22:50:49"
+            "time": "2017-05-08 09:25:16"
         },
         {
             "name": "wikibase/internal-serialization",
@@ -1417,10 +1420,10 @@
             "source": {
                 "type": "git",
                 "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseMediaInfo";,
-                "reference": "9da1abc9883994c5a93720da4bc89a315e39ef79"
+                "reference": "13adfa1604bb6d391fb235c984a78ecc7ce3d967"
             },
             "require": {
-                "php": ">=5.5.0",
+                "php": ">=5.5.9",
                 "serialization/serialization": "~3.2",
                 "wikibase/data-model": "~7.0",
                 "wikibase/data-model-serialization": "~2.0",
@@ -1429,8 +1432,8 @@
             "require-dev": {
                 "jakub-onderka/php-console-highlighter": "0.3.2",
                 "jakub-onderka/php-parallel-lint": "0.9.2",
-                "mediawiki/mediawiki-codesniffer": "0.6.0",
-                "phpunit/phpunit": "~4.8"
+                "phpunit/phpunit": "~4.8",
+                "wikibase/wikibase-codesniffer": "^0.1.0"
             },
             "type": "mediawiki-extension",
             "autoload": {
@@ -1464,7 +1467,7 @@
                 "issues": "https://phabricator.wikimedia.org/";,
                 "irc": "irc://irc.freenode.net/wikidata"
             },
-            "time": "2017-05-05 19:40:03"
+            "time": "2017-05-08 09:12:55"
         },
         {
             "name": "wikibase/quality",
@@ -1472,10 +1475,10 @@
             "source": {
                 "type": "git",
                 "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseQuality";,
-                "reference": "2188461f3bde51fdd56223254aa7f20f1c6c9e15"
+                "reference": "b9b82df258d1f2ff235697c172917ee556d13170"
             },
             "require": {
-                "php": ">=5.5.0",
+                "php": ">=5.5.9",
                 "serialization/serialization": "^3.2.1",
                 "wikibase/data-model": "~4.0|~5.0|~6.0|~7.0",
                 "wikibase/data-model-services": "~2.0|~3.0"
@@ -1489,7 +1492,8 @@
                 "jakub-onderka/php-parallel-lint": "0.9.2",
                 "phpunit/phpunit": "^3.7.37|~4.5",
                 "satooshi/php-coveralls": "master-dev",
-                "wikibase/data-model-serialization": ">=0.1 <3.0"
+                "wikibase/data-model-serialization": ">=0.1 <3.0",
+                "wikibase/wikibase-codesniffer": "^0.1.0"
             },
             "type": "mediawiki-extension",
             "autoload": {
@@ -1502,7 +1506,9 @@
             },
             "scripts": {
                 "test": [
-                    "parallel-lint . --exclude vendor"
+                    "@validate --no-interaction",
+                    "parallel-lint . --exclude vendor",
+                    "phpcs -p -s"
                 ]
             },
             "license": [
@@ -1525,7 +1531,7 @@
             "support": {
                 "issues": 
"https://phabricator.wikimedia.org/project/profile/989/";
             },
-            "time": "2017-05-06 00:31:13"
+            "time": "2017-05-08 09:23:39"
         },
         {
             "name": "wikibase/serialization-javascript",
@@ -1574,12 +1580,12 @@
             "source": {
                 "type": "git",
                 "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-                "reference": "210b43a81110af990e37b80e47fb41a11d46119b"
+                "reference": "b2ba494e50e45e5a2ae743a48e826d199924c3ec"
             },
             "dist": {
                 "type": "zip",
-                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/210b43a81110af990e37b80e47fb41a11d46119b";,
-                "reference": "210b43a81110af990e37b80e47fb41a11d46119b",
+                "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/b2ba494e50e45e5a2ae743a48e826d199924c3ec";,
+                "reference": "b2ba494e50e45e5a2ae743a48e826d199924c3ec",
                 "shasum": ""
             },
             "require": {
@@ -1654,7 +1660,7 @@
                 "wikibaserepo",
                 "wikidata"
             ],
-            "time": "2017-05-06 21:36:51"
+            "time": "2017-05-08 08:46:34"
         },
         {
             "name": "wikibase/wikimedia-badges",
diff --git a/extensions/ArticlePlaceholder/i18n/hi.json 
b/extensions/ArticlePlaceholder/i18n/hi.json
index 85a78a1..08fba90 100644
--- a/extensions/ArticlePlaceholder/i18n/hi.json
+++ b/extensions/ArticlePlaceholder/i18n/hi.json
@@ -4,5 +4,14 @@
                        "Sfic"
                ]
        },
-       "articleplaceholder-abouttopic-lua-identifier": "बाहरी संसाधन"
+       "createtopicpage": "पृष्ठ बनाएँ",
+       "articleplaceholder-abouttopic-create-article-label": "लेख का शीर्षक",
+       "articleplaceholder-abouttopic-create-article-button": "लेख बनाएँ",
+       "articleplaceholder-abouttopic-create-emtpy-article-button": "नया लेख 
शुरू करें",
+       "articleplaceholder-abouttopic-translate-article-label": "स्रोत भाषा:",
+       "articleplaceholder-abouttopic-translate-article-button": "लेख का 
अनुवाद करें",
+       "articleplaceholder-abouttopic-create-article-submit-button": "भेजें",
+       "articleplaceholder-abouttopic-lua-reference": "संदर्भ",
+       "articleplaceholder-abouttopic-lua-identifier": "बाहरी संसाधन",
+       "articleplaceholder-createpage-title": "$1 बनाएँ"
 }
diff --git a/extensions/ExternalValidation/.travis.yml 
b/extensions/ExternalValidation/.travis.yml
index d350b0f..57328af 100644
--- a/extensions/ExternalValidation/.travis.yml
+++ b/extensions/ExternalValidation/.travis.yml
@@ -4,10 +4,6 @@
   fast_finish: true
   include:
     - env: DBTYPE=mysql
-      php: 5.3
-    - env: DBTYPE=sqlite
-      php: 5.3
-    - env: DBTYPE=mysql
       php: 5.5
     - env: DBTYPE=sqlite
       php: 5.5
@@ -15,6 +11,10 @@
       php: hhvm
     - env: DBTYPE=sqlite
       php: hhvm
+    - env: DBTYPE=mysql
+      php: 7.0
+    - env: DBTYPE=sqlite
+      php: 7.1
 
 before_script:
   - bash ./build/travis/before_script.sh
diff --git a/extensions/ExternalValidation/composer.json 
b/extensions/ExternalValidation/composer.json
index 6001924..6281d5d 100644
--- a/extensions/ExternalValidation/composer.json
+++ b/extensions/ExternalValidation/composer.json
@@ -25,10 +25,11 @@
                "wikibase/data-model-services": "~2.0|~3.0"
        },
        "require-dev": {
+               "jakub-onderka/php-console-highlighter": "0.3.2",
+               "jakub-onderka/php-parallel-lint": "0.9.2",
                "phpunit/phpunit": "~3.7,>=3.7.37",
                "satooshi/php-coveralls": "dev-master",
-               "jakub-onderka/php-parallel-lint": "0.9.2",
-               "jakub-onderka/php-console-highlighter": "0.3.2"
+               "wikibase/wikibase-codesniffer": "^0.1.0"
        },
        "autoload": {
                "psr-4": {
@@ -44,7 +45,9 @@
        },
        "scripts": {
                "test": [
-                       "parallel-lint . --exclude vendor"
+                       "@validate --no-interaction",
+                       "parallel-lint . --exclude vendor",
+                       "phpcs -p -s"
                ]
        }
 }
diff --git a/extensions/ExternalValidation/includes/CrossCheck/CrossChecker.php 
b/extensions/ExternalValidation/includes/CrossCheck/CrossChecker.php
index 5a9f868..b40b6fa 100644
--- a/extensions/ExternalValidation/includes/CrossCheck/CrossChecker.php
+++ b/extensions/ExternalValidation/includes/CrossCheck/CrossChecker.php
@@ -285,8 +285,7 @@
                                $result = ComparisonResult::STATUS_MISMATCH;
                                if( in_array( ComparisonResult::STATUS_MATCH, 
$results ) ) {
                                        $result = 
ComparisonResult::STATUS_MATCH;
-                               }
-                               elseif( in_array( 
ComparisonResult::STATUS_PARTIAL_MATCH, $results ) ) {
+                               } elseif ( in_array( 
ComparisonResult::STATUS_PARTIAL_MATCH, $results ) ) {
                                        $result = 
ComparisonResult::STATUS_PARTIAL_MATCH;
                                }
 
@@ -316,8 +315,8 @@
                                if( $parsedValue ) {
                                        $parsedValues[] = $parsedValue;
                                }
+                       } catch ( ParseException $e ) {
                        }
-                       catch( ParseException $e ) {}
                }
 
                return $parsedValues;
@@ -372,7 +371,7 @@
         * @param StatementList $statementList
         * @return DataValue[]
         */
-       private function getDataValues( StatementList $statementList ){
+       private function getDataValues( StatementList $statementList ) {
                $dataValues = array();
 
                foreach ( $statementList->toArray() as $statement ) {
diff --git 
a/extensions/ExternalValidation/includes/DumpMetaInformation/DumpMetaInformation.php
 
b/extensions/ExternalValidation/includes/DumpMetaInformation/DumpMetaInformation.php
index 4429acb..fd06702 100644
--- 
a/extensions/ExternalValidation/includes/DumpMetaInformation/DumpMetaInformation.php
+++ 
b/extensions/ExternalValidation/includes/DumpMetaInformation/DumpMetaInformation.php
@@ -230,7 +230,7 @@
         *
         * @throws InvalidArgumentException
         */
-       private function setSize( $size ){
+       private function setSize( $size ) {
                Assert::parameterType( 'integer', $size, '$size' );
                if( $size <= 0 ) {
                        throw new InvalidArgumentException( '$size must be 
positive integer.' );
diff --git a/extensions/ExternalValidation/maintenance/UpdateExternalData.php 
b/extensions/ExternalValidation/maintenance/UpdateExternalData.php
index eaa6ee4..8e89c97 100644
--- a/extensions/ExternalValidation/maintenance/UpdateExternalData.php
+++ b/extensions/ExternalValidation/maintenance/UpdateExternalData.php
@@ -45,6 +45,7 @@
                );
                $importer->import();
        }
+
 }
 
 // @codeCoverageIgnoreStart
diff --git a/extensions/ExternalValidation/phpcs.xml 
b/extensions/ExternalValidation/phpcs.xml
new file mode 100644
index 0000000..16d5de9
--- /dev/null
+++ b/extensions/ExternalValidation/phpcs.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0"?>
+<ruleset name="Wikibase">
+       <rule ref="vendor/wikibase/wikibase-codesniffer/Wikibase">
+               <!-- FIXME: The following should all be fixed. -->
+               <exclude name="Generic.Arrays.DisallowLongArraySyntax" />
+               <exclude 
name="MediaWiki.ControlStructures.AssignmentInControlStructures" />
+               <exclude name="MediaWiki.WhiteSpace.SpaceAfterControlStructure" 
/>
+               <exclude name="MediaWiki.WhiteSpace.SpaceyParenthesis" />
+               <exclude name="PSR1.Classes.ClassDeclaration" />
+               <exclude name="PSR2.Methods.MethodDeclaration" />
+               <exclude name="Squiz.ControlStructures.ControlSignature" />
+       </rule>
+
+       <!-- Exceptions -->
+
+       <rule ref="Generic.Files.LineLength">
+               <properties>
+                       <!-- FIXME: Should be lowered to at least 140. -->
+                       <property name="lineLimit" value="168" />
+                       <property name="absoluteLineLimit" value="168" />
+               </properties>
+       </rule>
+
+       <!-- Additions -->
+
+       <!-- Metrics are intentionally not part of the base Wikibase 
CodeSniffer rule set. -->
+       <rule ref="Generic.Metrics.CyclomaticComplexity">
+               <exclude-pattern>TimeValueComparer</exclude-pattern>
+       </rule>
+       <rule ref="Generic.Metrics.NestingLevel" />
+
+       <!-- TODO: Move to the Wikibase CodeSniffer library. -->
+       <rule ref="Squiz.WhiteSpace.CastSpacing" />
+
+       <file>.</file>
+</ruleset>
diff --git 
a/extensions/ExternalValidation/specials/SpecialExternalDatabases.php 
b/extensions/ExternalValidation/specials/SpecialExternalDatabases.php
index b467154..257f486 100644
--- a/extensions/ExternalValidation/specials/SpecialExternalDatabases.php
+++ b/extensions/ExternalValidation/specials/SpecialExternalDatabases.php
@@ -67,7 +67,7 @@
         *
         * @return string
         */
-       function getGroupName() {
+       protected function getGroupName() {
                return 'wikibasequality';
        }
 
diff --git 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/DispatchingDataValueComparerTest.php
 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/DispatchingDataValueComparerTest.php
index ef1a6f3..e838fd9 100644
--- 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/DispatchingDataValueComparerTest.php
+++ 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/DispatchingDataValueComparerTest.php
@@ -116,9 +116,7 @@
         * @return DataValueComparer
         */
        private function mockDataValueComparer( $acceptedType, 
$comparisonResult ) {
-               $mock = $this->getMockBuilder( DataValueComparer::class )
-                                        ->setMethods( array( 'canCompare', 
'compare' ) )
-                                        ->getMock();
+               $mock = $this->getMock( DataValueComparer::class );
 
                $mock->expects( $this->any() )
                         ->method( 'compare' )
diff --git 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
index 50f9b09..64dea07 100644
--- 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
+++ 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/EntityIdValueComparerTest.php
@@ -147,24 +147,24 @@
                                        }
 
                                        return $terms;
-                       }
-               ) );
+                               }
+                       ) );
 
                $stringComparer = $this->getMockBuilder( StringComparer::class )
                        ->disableOriginalConstructor()
                        ->setMethods( array( 'compareWithArray' ) )
                        ->getMock();
                $stringComparer->expects( $this->any() )
-                                               ->method( 'compareWithArray' )
-                                               ->will( $this->returnCallback(
-                                                       function ( $value, 
array $values ) {
-                                                               if ( in_array(  
$value, $values ) ) {
-                                                                       return 
ComparisonResult::STATUS_MATCH;
-                                                               } else {
-                                                                       return 
ComparisonResult::STATUS_MISMATCH;
-                                                          }
-                                                       }
-                                               ) );
+                       ->method( 'compareWithArray' )
+                       ->will( $this->returnCallback(
+                               function ( $value, array $values ) {
+                                       if ( in_array(  $value, $values ) ) {
+                                               return 
ComparisonResult::STATUS_MATCH;
+                                       } else {
+                                               return 
ComparisonResult::STATUS_MISMATCH;
+                                       }
+                               }
+                       ) );
 
                return new EntityIdValueComparer( $termIndex, $stringComparer );
        }
diff --git 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
index cf9dc92..3c58656 100644
--- 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
+++ 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/Comparer/MultilingualTextValueComparerTest.php
@@ -135,16 +135,16 @@
                        ->setMethods( array ( 'compare' ) )
                        ->getMock();
                $stringComparer->expects( $this->any() )
-                                               ->method( 'compare' )
-                                               ->will( $this->returnCallback(
-                                                               function ( 
$value1, $value2 ) {
-                                                                               
if ( $value1 === $value2 ) {
-                                                                               
        return ComparisonResult::STATUS_MATCH;
-                                                                               
} else {
-                                                                               
        return ComparisonResult::STATUS_MISMATCH;
-                                                                               
}
-                                                                       }
-                                                               ) );
+                       ->method( 'compare' )
+                       ->will( $this->returnCallback(
+                               function ( $value1, $value2 ) {
+                                       if ( $value1 === $value2 ) {
+                                               return 
ComparisonResult::STATUS_MATCH;
+                                       } else {
+                                               return 
ComparisonResult::STATUS_MISMATCH;
+                                       }
+                               }
+                       ) );
 
                return new MultilingualTextValueComparer( $stringComparer );
        }
diff --git 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/CrossCheckerTest.php 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/CrossCheckerTest.php
index 696b2eb..64fbad5 100644
--- 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/CrossCheckerTest.php
+++ 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/CrossCheckerTest.php
@@ -328,9 +328,7 @@
                        ->method( 'newComparativeValueParser' )
                        ->will( $this->returnValue( $comparativeValueParser ) );
 
-               $dataValueComparer = $this->getMockBuilder( 
DataValueComparer::class )
-               ->setMethods( array( 'compare' ) )
-               ->getMockForAbstractClass();
+               $dataValueComparer = $this->getMock( DataValueComparer::class );
                $dataValueComparer->expects( $this->any() )
                ->method( 'compare' )
                ->will( $this->returnValue( ComparisonResult::STATUS_MATCH ) );
diff --git 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
index d4f09fb..d6aaebd 100644
--- 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
+++ 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/ComparativeValueParserFactoryTest.php
@@ -47,8 +47,8 @@
                        ),
                        'VT:monolingualtext' => array(
                                'parser-factory-callback' => function( 
ParserOptions $options ) {
-                   return new MonolingualTextParser( $options );
-               }
+                                       return new MonolingualTextParser( 
$options );
+                               }
                        )
                );
 
diff --git 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
index bfeb350..b57457d 100644
--- 
a/extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
+++ 
b/extensions/ExternalValidation/tests/phpunit/CrossCheck/ValueParser/MultilingualTextValueParserTest.php
@@ -42,9 +42,8 @@
        }
 
        protected function buildParser() {
-               $valueParserMock = $this->getMockBuilder( ValueParser::class )
-                                        ->setMethods( array( 'parse' ) )
-                                        ->getMock();
+               $valueParserMock = $this->getMock( ValueParser::class );
+
                $valueParserMock->expects( $this->any() )
                         ->method( 'parse' )
                         ->will( $this->returnValue( new MonolingualTextValue( 
'en', 'foo' ) ) );
diff --git 
a/extensions/ExternalValidation/tests/phpunit/Serializer/SerializerFactoryTest.php
 
b/extensions/ExternalValidation/tests/phpunit/Serializer/SerializerFactoryTest.php
index 3ad31f9..f257b7d 100644
--- 
a/extensions/ExternalValidation/tests/phpunit/Serializer/SerializerFactoryTest.php
+++ 
b/extensions/ExternalValidation/tests/phpunit/Serializer/SerializerFactoryTest.php
@@ -100,11 +100,13 @@
 
        private function buildSerializerFactory() {
                $dataValueSerializer = new DataValueSerializer();
-               $referenceSerializer = new ReferenceSerializer(
-                       new SnakListSerializer( new SnakSerializer( 
$dataValueSerializer ), false )
-               );
+               $snakSerializer = new SnakSerializer( $dataValueSerializer );
+               $useObjectsForMaps = false;
 
-               return new SerializerFactory( $dataValueSerializer, 
$referenceSerializer );
+               return new SerializerFactory(
+                       $dataValueSerializer,
+                       new ReferenceSerializer( new SnakListSerializer( 
$snakSerializer, $useObjectsForMaps ) )
+               );
        }
 
        private function assertSerializesWithoutException( Serializer 
$serializer, $object ) {
diff --git a/extensions/MediaInfo/.jscsrc b/extensions/MediaInfo/.jscsrc
index 20c363d..b110fb8 100644
--- a/extensions/MediaInfo/.jscsrc
+++ b/extensions/MediaInfo/.jscsrc
@@ -26,26 +26,5 @@
                "requireNewlineAfterDescription": true
        },
 
-       "requireVarDeclFirst": null,
-
-       // No space after function
-       "disallowSpaceAfterKeywords": [
-               "function"
-       ],
-
-       "requireSpaceAfterKeywords": [
-               "do",
-               "for",
-               "if",
-               "else",
-               "switch",
-               "case",
-               "try",
-               "catch",
-               "void",
-               "while",
-               "with",
-               "return",
-               "typeof"
-       ]
+       "requireVarDeclFirst": null
 }
diff --git a/extensions/MediaInfo/Gruntfile.js 
b/extensions/MediaInfo/Gruntfile.js
index 6396da2..ddcbbda 100644
--- a/extensions/MediaInfo/Gruntfile.js
+++ b/extensions/MediaInfo/Gruntfile.js
@@ -1,5 +1,5 @@
 /*jshint node:true */
-module.exports = function( grunt ) {
+module.exports = function ( grunt ) {
        grunt.loadNpmTasks( 'grunt-contrib-jshint' );
        grunt.loadNpmTasks( 'grunt-jsonlint' );
        grunt.loadNpmTasks( 'grunt-banana-checker' );
diff --git a/extensions/MediaInfo/WikibaseMediaInfo.i18n.alias.php 
b/extensions/MediaInfo/WikibaseMediaInfo.i18n.alias.php
index 069a42f..135d81e 100644
--- a/extensions/MediaInfo/WikibaseMediaInfo.i18n.alias.php
+++ b/extensions/MediaInfo/WikibaseMediaInfo.i18n.alias.php
@@ -10,5 +10,4 @@
 $specialPageAliases = [];
 
 /** English (English) */
-$specialPageAliases['en'] = [
-];
+$specialPageAliases['en'] = [];
diff --git a/extensions/MediaInfo/composer.json 
b/extensions/MediaInfo/composer.json
index a8731b7..dccfabb 100644
--- a/extensions/MediaInfo/composer.json
+++ b/extensions/MediaInfo/composer.json
@@ -14,17 +14,17 @@
                "irc": "irc://irc.freenode.net/wikidata"
        },
        "require": {
-               "php": ">=5.5.0",
+               "php": ">=5.5.9",
                "serialization/serialization": "~3.2",
                "wikibase/data-model": "~7.0",
                "wikibase/data-model-serialization": "~2.0",
                "wikibase/data-model-services": "~3.6"
        },
        "require-dev": {
+               "jakub-onderka/php-console-highlighter": "0.3.2",
                "jakub-onderka/php-parallel-lint": "0.9.2",
-               "mediawiki/mediawiki-codesniffer": "0.6.0",
                "phpunit/phpunit": "~4.8",
-               "jakub-onderka/php-console-highlighter": "0.3.2"
+               "wikibase/wikibase-codesniffer": "^0.1.0"
        },
        "autoload": {
                "psr-4": {
diff --git a/extensions/MediaInfo/phpcs.xml b/extensions/MediaInfo/phpcs.xml
index 92e77d4..6cbec74 100644
--- a/extensions/MediaInfo/phpcs.xml
+++ b/extensions/MediaInfo/phpcs.xml
@@ -1,47 +1,15 @@
 <?xml version="1.0"?>
 <ruleset name="WikibaseMediaInfo">
-       <!-- See 
https://github.com/wikimedia/mediawiki-tools-codesniffer/blob/master/MediaWiki/ruleset.xml
 -->
-       <rule ref="vendor/mediawiki/mediawiki-codesniffer/MediaWiki">
-               <exclude 
name="MediaWiki.WhiteSpace.SpaceBeforeSingleLineComment" />
-       </rule>
+       <rule ref="vendor/wikibase/wikibase-codesniffer/Wikibase" />
 
-       <rule ref="Generic.CodeAnalysis.UnconditionalIfStatement" />
-       <rule ref="Generic.ControlStructures" />
-       <rule ref="Generic.Files.InlineHTML" />
-       <rule ref="Generic.Files.OneInterfacePerFile" />
-       <rule ref="Generic.Files.OneTraitPerFile" />
+       <!-- Additions -->
+
+       <!-- Metrics are intentionally not part of the base Wikibase 
CodeSniffer rule set. -->
        <rule ref="Generic.Metrics.CyclomaticComplexity" />
        <rule ref="Generic.Metrics.NestingLevel" />
-       <rule ref="Generic.PHP.CharacterBeforePHPOpeningTag" />
 
-       <rule ref="PSR1" />
-       <rule ref="PSR1.Methods.CamelCapsMethodName.NotCamelCaps">
-               <!-- Exclude test methods like 
"testGivenInvalidInput_methodThrowsException". -->
-               <exclude-pattern>tests/phpunit/*Test\.php</exclude-pattern>
-       </rule>
-
-       <rule ref="PSR2.Files" />
-
-       <rule ref="Squiz.Classes.DuplicateProperty" />
-       <rule ref="Squiz.Classes.SelfMemberReference" />
-       <rule ref="Squiz.ControlStructures.ControlSignature" />
-       <rule ref="Squiz.Functions.FunctionDuplicateArgument" />
-       <rule ref="Squiz.Functions.GlobalFunction" />
-       <rule ref="Squiz.Scope" />
+       <!-- TODO: Move to the Wikibase CodeSniffer library. -->
        <rule ref="Squiz.WhiteSpace.CastSpacing" />
-       <rule ref="Squiz.WhiteSpace.FunctionSpacing">
-               <properties>
-                       <property name="spacing" value="1" />
-               </properties>
-       </rule>
-       <rule ref="Squiz.WhiteSpace.OperatorSpacing">
-               <properties>
-                       <property name="ignoreNewlines" value="true" />
-               </properties>
-       </rule>
 
        <file>.</file>
-       <arg name="extensions" value="php" />
-       <arg name="encoding" value="utf8" />
-       <exclude-pattern>vendor</exclude-pattern>
 </ruleset>
diff --git a/extensions/MediaInfo/resources/datamodel/MediaInfo.js 
b/extensions/MediaInfo/resources/datamodel/MediaInfo.js
index 1a175e9..ef1f848 100644
--- a/extensions/MediaInfo/resources/datamodel/MediaInfo.js
+++ b/extensions/MediaInfo/resources/datamodel/MediaInfo.js
@@ -1,4 +1,4 @@
-( function( wb, util ) {
+( function ( wb, util ) {
        'use strict';
 
        var PARENT = wb.datamodel.Entity;
@@ -21,7 +21,7 @@
        var SELF = wb.datamodel.MediaInfo = util.inherit(
                'WbDataModelMediaInfo',
                PARENT,
-               function( mediaInfoId, labels, descriptions, statementGroupSet 
) {
+               function ( mediaInfoId, labels, descriptions, statementGroupSet 
) {
                        labels = labels || new wb.datamodel.TermMap();
                        descriptions = descriptions || new 
wb.datamodel.TermMap();
                        statementGroupSet = statementGroupSet || new 
wb.datamodel.StatementGroupSet();
@@ -50,28 +50,28 @@
                /**
                 * @return {wikibase.datamodel.StatementGroupSet}
                 */
-               getStatements: function() {
+               getStatements: function () {
                        return this._statementGroupSet;
                },
 
                /**
                 * @param {wikibase.datamodel.Statement} statement
                 */
-               addStatement: function( statement ) {
+               addStatement: function ( statement ) {
                        this._statementGroupSet.addStatement( statement );
                },
 
                /**
                 * @param {wikibase.datamodel.Statement} statement
                 */
-               removeStatement: function( statement ) {
+               removeStatement: function ( statement ) {
                        this._statementGroupSet.removeStatement( statement );
                },
 
                /**
                 * @return {boolean}
                 */
-               isEmpty: function() {
+               isEmpty: function () {
                        return this._statementGroupSet.isEmpty() && 
this._fingerprint.isEmpty();
                },
 
@@ -79,7 +79,7 @@
                 * @param {*} mediaInfo
                 * @return {boolean}
                 */
-               equals: function( mediaInfo ) {
+               equals: function ( mediaInfo ) {
                        return mediaInfo === this ||
                                ( mediaInfo instanceof SELF &&
                                        this._id === mediaInfo.getId() &&
diff --git a/extensions/MediaInfo/resources/getDeserializer.js 
b/extensions/MediaInfo/resources/getDeserializer.js
index d24c2ce..5b85a59 100644
--- a/extensions/MediaInfo/resources/getDeserializer.js
+++ b/extensions/MediaInfo/resources/getDeserializer.js
@@ -1,6 +1,6 @@
-( function( wb ) {
+( function ( wb ) {
        'use strict';
-       module.exports = function() {
+       module.exports = function () {
                return new wb.mediainfo.serialization.MediaInfoDeserializer();
        };
 }( wikibase ) );
diff --git a/extensions/MediaInfo/resources/jquery.wikibase.mediainfoview.js 
b/extensions/MediaInfo/resources/jquery.wikibase.mediainfoview.js
index 863f912..6a9c4cd 100644
--- a/extensions/MediaInfo/resources/jquery.wikibase.mediainfoview.js
+++ b/extensions/MediaInfo/resources/jquery.wikibase.mediainfoview.js
@@ -1,4 +1,4 @@
-( function( $ ) {
+( function ( $ ) {
        'use strict';
 
        var PARENT = $.wikibase.entityview;
@@ -34,7 +34,7 @@
                 * @inheritdoc
                 * @protected
                 */
-               _create: function() {
+               _create: function () {
                        this._createEntityview();
 
                        this.$statements = $( 
'.wikibase-statementgrouplistview', this.element );
@@ -47,7 +47,7 @@
                 * @inheritdoc
                 * @protected
                 */
-               _init: function() {
+               _init: function () {
                        if ( !this.options.buildStatementGroupListView ) {
                                throw new Error( 'Required option(s) missing' );
                        }
@@ -59,7 +59,7 @@
                /**
                 * @protected
                 */
-               _initStatements: function() {
+               _initStatements: function () {
                        this.options.buildStatementGroupListView( 
this.options.value, this.$statements );
 
                        // This is here to be sure there is never a duplicate 
id:
@@ -73,7 +73,7 @@
                 * @inheritdoc
                 * @protected
                 */
-               _attachEventHandlers: function() {
+               _attachEventHandlers: function () {
                        PARENT.prototype._attachEventHandlers.call( this );
 
                        var self = this;
@@ -83,7 +83,7 @@
                                'statementviewafterstartediting.' + 
this.widgetName,
                                'referenceviewafterstartediting.' + 
this.widgetName
                        ].join( ' ' ),
-                       function() {
+                       function () {
                                self._trigger( 'afterstartediting' );
                        } );
 
@@ -94,7 +94,7 @@
                                'statementviewafterremove.' + this.widgetName,
                                'referenceviewafterstopediting.' + 
this.widgetName
                        ].join( ' ' ),
-                       function( event, dropValue ) {
+                       function ( event, dropValue ) {
                                self._trigger( 'afterstopediting', null, [ 
dropValue ] );
                        } );
                },
@@ -103,7 +103,7 @@
                 * @inheritdoc
                 * @protected
                 */
-               _setState: function( state ) {
+               _setState: function ( state ) {
                        PARENT.prototype._setState.call( this, state );
 
                        this.$statements.data( 'statementgrouplistview' )[ 
state ]();
diff --git 
a/extensions/MediaInfo/resources/serialization/MediaInfoDeserializer.js 
b/extensions/MediaInfo/resources/serialization/MediaInfoDeserializer.js
index 878b99e..5437299 100644
--- a/extensions/MediaInfo/resources/serialization/MediaInfoDeserializer.js
+++ b/extensions/MediaInfo/resources/serialization/MediaInfoDeserializer.js
@@ -1,4 +1,4 @@
-( function( wb, util ) {
+( function ( wb, util ) {
        'use strict';
 
        var MODULE = wb.mediainfo.serialization,
@@ -21,7 +21,7 @@
                 *
                 * @throws {Error} if serialization does not resolve to a 
serialized MediaInfo.
                 */
-               deserialize: function( serialization ) {
+               deserialize: function ( serialization ) {
                        if ( serialization.type !== wb.datamodel.MediaInfo.TYPE 
) {
                                throw new Error( 'Serialization does not 
resolve to an MediaInfo' );
                        }
diff --git 
a/extensions/MediaInfo/tests/phpunit/composer/DataModel/Serialization/MediaInfoDeserializerTest.php
 
b/extensions/MediaInfo/tests/phpunit/composer/DataModel/Serialization/MediaInfoDeserializerTest.php
index 0a6d85c..4778128 100644
--- 
a/extensions/MediaInfo/tests/phpunit/composer/DataModel/Serialization/MediaInfoDeserializerTest.php
+++ 
b/extensions/MediaInfo/tests/phpunit/composer/DataModel/Serialization/MediaInfoDeserializerTest.php
@@ -147,7 +147,7 @@
                        [ '' ],
                        [ [] ],
                        [ [ 'foo' => 'bar' ] ],
-                       [ [ 'type' => null ]],
+                       [ [ 'type' => null ] ],
                        [ [ 'type' => 'item' ] ]
                ];
        }
diff --git a/extensions/Quality/.travis.yml b/extensions/Quality/.travis.yml
index d350b0f..57328af 100644
--- a/extensions/Quality/.travis.yml
+++ b/extensions/Quality/.travis.yml
@@ -4,10 +4,6 @@
   fast_finish: true
   include:
     - env: DBTYPE=mysql
-      php: 5.3
-    - env: DBTYPE=sqlite
-      php: 5.3
-    - env: DBTYPE=mysql
       php: 5.5
     - env: DBTYPE=sqlite
       php: 5.5
@@ -15,6 +11,10 @@
       php: hhvm
     - env: DBTYPE=sqlite
       php: hhvm
+    - env: DBTYPE=mysql
+      php: 7.0
+    - env: DBTYPE=sqlite
+      php: 7.1
 
 before_script:
   - bash ./build/travis/before_script.sh
diff --git a/extensions/Quality/composer.json b/extensions/Quality/composer.json
index bcbd11c..60fff42 100644
--- a/extensions/Quality/composer.json
+++ b/extensions/Quality/composer.json
@@ -14,7 +14,7 @@
                "issues": 
"https://phabricator.wikimedia.org/project/profile/989/";
        },
        "require": {
-               "php": ">=5.5.0",
+               "php": ">=5.5.9",
                "wikibase/data-model": "~4.0|~5.0|~6.0|~7.0",
                "wikibase/data-model-services": "~2.0|~3.0",
                "serialization/serialization": "^3.2.1"
@@ -24,11 +24,12 @@
                "data-values/number": ">=0.1 <0.9",
                "data-values/serialization": ">=0.1 <2.0",
                "data-values/time": ">=0.1 <0.9",
+               "jakub-onderka/php-console-highlighter": "0.3.2",
+               "jakub-onderka/php-parallel-lint": "0.9.2",
                "phpunit/phpunit": "^3.7.37|~4.5",
                "satooshi/php-coveralls": "master-dev",
                "wikibase/data-model-serialization": ">=0.1 <3.0",
-               "jakub-onderka/php-parallel-lint": "0.9.2",
-               "jakub-onderka/php-console-highlighter": "0.3.2"
+               "wikibase/wikibase-codesniffer": "^0.1.0"
        },
        "autoload": {
                "psr-4": {
@@ -40,7 +41,9 @@
        },
        "scripts": {
                "test": [
-                       "parallel-lint . --exclude vendor"
+                       "@validate --no-interaction",
+                       "parallel-lint . --exclude vendor",
+                       "phpcs -p -s"
                ]
        }
 }
diff --git a/extensions/Quality/includes/Html/HtmlTableBuilder.php 
b/extensions/Quality/includes/Html/HtmlTableBuilder.php
index 1c4bf5f..33e2f76 100644
--- a/extensions/Quality/includes/Html/HtmlTableBuilder.php
+++ b/extensions/Quality/includes/Html/HtmlTableBuilder.php
@@ -95,7 +95,7 @@
                foreach ( $cells as $key => $cell ) {
                        if ( is_string( $cell ) ) {
                                $cells[$key] = new HtmlTableCellBuilder( $cell 
);
-                       } else if ( !( $cell instanceof HtmlTableCellBuilder ) 
) {
+                       } elseif ( !( $cell instanceof HtmlTableCellBuilder ) ) 
{
                                throw new InvalidArgumentException( '$cells 
must be array of HtmlTableCell objects.' );
                        }
                }
diff --git a/extensions/Quality/includes/Html/HtmlTableCellBuilder.php 
b/extensions/Quality/includes/Html/HtmlTableCellBuilder.php
index ec94779..03143de 100644
--- a/extensions/Quality/includes/Html/HtmlTableCellBuilder.php
+++ b/extensions/Quality/includes/Html/HtmlTableCellBuilder.php
@@ -85,4 +85,5 @@
                        . $content
                        . Html::closeElement( 'td' );
        }
+
 }
diff --git a/extensions/Quality/includes/Html/HtmlTableHeaderBuilder.php 
b/extensions/Quality/includes/Html/HtmlTableHeaderBuilder.php
index ecef60a..dfdf6fc 100644
--- a/extensions/Quality/includes/Html/HtmlTableHeaderBuilder.php
+++ b/extensions/Quality/includes/Html/HtmlTableHeaderBuilder.php
@@ -88,12 +88,7 @@
                        $content = htmlspecialchars( $this->content );
                }
 
-               return
-                       Html::openElement(
-                               'th',
-                               $attributes
-                       )
-                       . $content
-                       . Html::closeElement('th');
+               return Html::rawElement( 'th', $attributes, $content );
        }
+
 }
diff --git a/extensions/Quality/phpcs.xml b/extensions/Quality/phpcs.xml
new file mode 100644
index 0000000..1cb830e
--- /dev/null
+++ b/extensions/Quality/phpcs.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0"?>
+<ruleset name="Wikibase">
+       <rule ref="vendor/wikibase/wikibase-codesniffer/Wikibase">
+               <!-- FIXME: The following should all be fixed. -->
+               <exclude name="Generic.Arrays.DisallowLongArraySyntax" />
+               <exclude name="MediaWiki.WhiteSpace.SpaceyParenthesis" />
+               <exclude name="PSR1.Classes.ClassDeclaration" />
+       </rule>
+
+       <!-- Exceptions -->
+
+       <rule ref="Generic.Files.LineLength">
+               <properties>
+                       <property name="lineLimit" value="109" />
+               </properties>
+       </rule>
+
+       <!-- Additions -->
+
+       <!-- Metrics are intentionally not part of the base Wikibase 
CodeSniffer rule set. -->
+       <rule ref="Generic.Metrics.CyclomaticComplexity" />
+       <rule ref="Generic.Metrics.NestingLevel" />
+
+       <!-- TODO: Move to the Wikibase CodeSniffer library. -->
+       <rule ref="Squiz.WhiteSpace.CastSpacing" />
+
+       <file>.</file>
+</ruleset>
diff --git a/extensions/Quality/tests/phpunit/Helper/JsonFileEntityLookup.php 
b/extensions/Quality/tests/phpunit/Helper/JsonFileEntityLookup.php
index d0542e3..3878850 100644
--- a/extensions/Quality/tests/phpunit/Helper/JsonFileEntityLookup.php
+++ b/extensions/Quality/tests/phpunit/Helper/JsonFileEntityLookup.php
@@ -80,7 +80,6 @@
                        return null;
                }
 
-
                return $this->entityDeserializer->deserialize( 
$serializedEntity );
        }
 
diff --git a/extensions/Quality/tests/phpunit/Html/HtmlTableBuilderTest.php 
b/extensions/Quality/tests/phpunit/Html/HtmlTableBuilderTest.php
index 1f51e7b..51a1602 100644
--- a/extensions/Quality/tests/phpunit/Html/HtmlTableBuilderTest.php
+++ b/extensions/Quality/tests/phpunit/Html/HtmlTableBuilderTest.php
@@ -225,7 +225,10 @@
                                                $this->getHtmlTableCellMock( 
'beyond all recognition' )
                                        )
                                ),
-                               '<table 
class="wikitable"><tr><th>fu</th><th>bar</th></tr><tr><td>fucked 
up</td><td>beyond all recognition</td></tr></table>'
+                               '<table class="wikitable">'
+                                       . '<tr><th>fu</th><th>bar</th></tr>'
+                                       . '<tr><td>fucked up</td><td>beyond all 
recognition</td></tr>'
+                                       . '</table>'
                        ),
                        array(
                                array(
@@ -238,7 +241,10 @@
                                                $this->getHtmlTableCellMock( 
'beyond all recognition' )
                                        )
                                ),
-                               '<table class="wikitable sortable 
jquery-tablesort"><tr><th>fu</th><th>bar</th></tr><tr><td>fucked 
up</td><td>beyond all recognition</td></tr></table>'
+                               '<table class="wikitable sortable 
jquery-tablesort">'
+                                       . '<tr><th>fu</th><th>bar</th></tr>'
+                                       . '<tr><td>fucked up</td><td>beyond all 
recognition</td></tr>'
+                                       . '</table>'
                        )
                );
        }
diff --git 
a/extensions/Wikibase/client/tests/phpunit/includes/Hooks/EchoNotificationsHandlersTest.php
 
b/extensions/Wikibase/client/tests/phpunit/includes/Hooks/EchoNotificationsHandlersTest.php
index 6b37de7..c120e44 100644
--- 
a/extensions/Wikibase/client/tests/phpunit/includes/Hooks/EchoNotificationsHandlersTest.php
+++ 
b/extensions/Wikibase/client/tests/phpunit/includes/Hooks/EchoNotificationsHandlersTest.php
@@ -158,63 +158,65 @@
                );
        }
 
-       public function testBeforeCreateEchoEvent() {
-               $settings = new SettingsArray();
-               $settings->setSetting( 'siteGlobalID', 'enwiki' );
-               $settings->setSetting( 'sendEchoNotification', false );
-               $settings->setSetting( 'echoIcon', false );
+       public function beforeCreateEchoEventProvider() {
+               return [
+                       'no registration' => [
+                               'register' => false,
+                               'icon' => false,
+                               'expectedIcon' => false,
+                       ],
+                       'registered with optional icon' => [
+                               'register' => true,
+                               'icon' => [ 'url' => 'some_url_here' ],
+                               'expectedIcon' => [ 'url' => 'some_url_here' ],
+                       ],
+                       'registered with default icon' => [
+                               'register' => true,
+                               'icon' => false,
+                               'expectedIcon' => [ 'path' => 
'Wikibase/client/includes/Hooks/../../resources/images/echoIcon.svg' ],
+                       ]
+               ];
+       }
 
+       /**
+        * @dataProvider beforeCreateEchoEventProvider
+        */
+       public function testBeforeCreateEchoEvent( $register, $icon, 
$expectedIcon ) {
                $notifications = [];
                $categories = [];
                $icons = [];
 
-               $handlers = $this->getHandlers( $settings );
+               $handlers = new EchoNotificationsHandlers(
+                       $this->repoLinker,
+                       'enwiki',
+                       $register,
+                       $icon,
+                       'repoSiteName'
+               );
+
                $handlers->doBeforeCreateEchoEvent( $notifications, 
$categories, $icons );
 
-               $this->assertFalse(
-                       isset( $notifications[$handlers::NOTIFICATION_TYPE] ),
-                       "Failed asserting that the notification type is 
registered to Echo"
-               );
+               $this->assertSame( $register, isset( 
$notifications[$handlers::NOTIFICATION_TYPE] ) );
+               $this->assertSame( $register, isset( 
$categories['wikibase-action'] ) );
+               $this->assertSame( $register, isset( 
$icons[$handlers::NOTIFICATION_TYPE] ) );
 
-               $settings->setSetting( 'sendEchoNotification', true );
-               $handlers = $this->getHandlers( $settings );
-               $handlers->doBeforeCreateEchoEvent( $notifications, 
$categories, $icons );
-
-               $this->assertArrayHasKey(
-                       $handlers::NOTIFICATION_TYPE,
-                       $notifications,
-                       "Failed asserting that the notification type is 
registered to Echo"
-               );
-               $this->assertArrayHasKey(
-                       'wikibase-action',
-                       $categories,
-                       "Failed asserting that the notification category is 
registered to Echo"
-               );
-               $this->assertArrayHasKey(
-                       $handlers::NOTIFICATION_TYPE,
-                       $icons,
-                       "Failed asserting that the notification icon is 
registered to Echo"
-               );
-               $this->assertStringEndsWith(
-                       
'Wikibase/client/includes/Hooks/../../resources/images/echoIcon.svg',
-                       $icons[$handlers::NOTIFICATION_TYPE]['path'],
-                       "Failed asserting that missing echoIcon setting 
defaults to Echo's default"
-               );
-
-               $notifications = [];
-               $categories = [];
-               $icons = [];
-
-               $echoIcon = [ 'url' => 'some_url_here' ];
-               $settings->setSetting( 'echoIcon', $echoIcon );
-               $handlers = $this->getHandlers( $settings );
-
-               $handlers->doBeforeCreateEchoEvent( $notifications, 
$categories, $icons );
-               $this->assertEquals(
-                       $echoIcon,
-                       $icons[$handlers::NOTIFICATION_TYPE],
-                       "Failed asserting that the notification icon is 
correctly registered to Echo"
-               );
+               if ( $register ) {
+                       if ( isset( $expectedIcon['path'] ) ) {
+                               $this->assertSame(
+                                       array_keys( $expectedIcon ),
+                                       array_keys( 
$icons[$handlers::NOTIFICATION_TYPE] )
+                               );
+                               $this->assertStringEndsWith(
+                                       $expectedIcon['path'],
+                                       
$icons[$handlers::NOTIFICATION_TYPE]['path']
+                               );
+                       } else {
+                               $this->assertSame(
+                                       $expectedIcon,
+                                       $icons[$handlers::NOTIFICATION_TYPE]
+                               );
+                       }
+               }
        }
 
 }
diff --git a/extensions/Wikibase/repo/includes/WikibaseRepo.php 
b/extensions/Wikibase/repo/includes/WikibaseRepo.php
index adabd4b..d25e4d5 100644
--- a/extensions/Wikibase/repo/includes/WikibaseRepo.php
+++ b/extensions/Wikibase/repo/includes/WikibaseRepo.php
@@ -1833,8 +1833,8 @@
                                                // Special ISO 639-2 codes
                                                'und', 'mis', 'mul', 'zxx',
 
-                                               // T150633
-                                               'abe',
+                                               // T98314
+                                               'tzl',
 
                                                // T125066
                                                'ett', 'fkv', 'koy', 'lkt', 
'lld', 'smj',
@@ -1842,21 +1842,42 @@
                                                // T137115
                                                'non',
 
-                                               // T138131
-                                               'hai',
-
                                                // T137808
                                                'mnc',
 
                                                // T137809
                                                'otk',
 
-                                               // T98314
-                                               'tzl',
+                                               // T138131
+                                               'hai',
+
+                                               // T150633
+                                               'abe',
 
                                                // T151129
                                                'moe',
 
+                                               // T155369
+                                               'brx',
+
+                                               // T155370
+                                               'chn',
+
+                                               // T155371
+                                               'cop',
+
+                                               // T155373
+                                               'gez',
+
+                                               // T155376
+                                               'quc',
+
+                                               // T155377
+                                               'kjh',
+
+                                               // T155430
+                                               'nr',
+
                                                // T160531
                                                'umu',
                                        ) )
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 867e907..fc8b234 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -122,12 +122,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-ArticlePlaceholder.git";,
-            "reference": "c47fa0747da32d997e83eaa5837ea38ca7be63f3"
+            "reference": "c77eb510b17d11b0b75bdf0e7984929032f42216"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/c47fa0747da32d997e83eaa5837ea38ca7be63f3";,
-            "reference": "c47fa0747da32d997e83eaa5837ea38ca7be63f3",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-ArticlePlaceholder/zipball/c77eb510b17d11b0b75bdf0e7984929032f42216";,
+            "reference": "c77eb510b17d11b0b75bdf0e7984929032f42216",
             "shasum": ""
         },
         "require-dev": {
@@ -135,7 +135,7 @@
             "jakub-onderka/php-parallel-lint": "0.9.2",
             "mediawiki/mediawiki-codesniffer": "0.7.2"
         },
-        "time": "2017-05-05 19:40:00",
+        "time": "2017-05-07 20:48:52",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {
@@ -1366,12 +1366,12 @@
         "source": {
             "type": "git",
             "url": 
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git";,
-            "reference": "210b43a81110af990e37b80e47fb41a11d46119b"
+            "reference": "b2ba494e50e45e5a2ae743a48e826d199924c3ec"
         },
         "dist": {
             "type": "zip",
-            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/210b43a81110af990e37b80e47fb41a11d46119b";,
-            "reference": "210b43a81110af990e37b80e47fb41a11d46119b",
+            "url": 
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/b2ba494e50e45e5a2ae743a48e826d199924c3ec";,
+            "reference": "b2ba494e50e45e5a2ae743a48e826d199924c3ec",
             "shasum": ""
         },
         "require": {
@@ -1404,7 +1404,7 @@
             "jakub-onderka/php-parallel-lint": ">=0.3 <0.10",
             "wikibase/wikibase-codesniffer": "^0.1.0"
         },
-        "time": "2017-05-06 21:36:51",
+        "time": "2017-05-08 08:46:34",
         "type": "mediawiki-extension",
         "installation-source": "dist",
         "autoload": {
@@ -1564,7 +1564,7 @@
         "source": {
             "type": "git",
             "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseQualityExternalValidation";,
-            "reference": "7b072c4ec5e305cb94ca90df6bfa9745023b5006"
+            "reference": "1980e6bc41b457ebae5e4e5352ed7cc2d19dacc2"
         },
         "require": {
             "data-values/common": ">=0.1 <0.4",
@@ -1581,9 +1581,10 @@
             "jakub-onderka/php-console-highlighter": "0.3.2",
             "jakub-onderka/php-parallel-lint": "0.9.2",
             "phpunit/phpunit": "~3.7,>=3.7.37",
-            "satooshi/php-coveralls": "dev-master"
+            "satooshi/php-coveralls": "dev-master",
+            "wikibase/wikibase-codesniffer": "^0.1.0"
         },
-        "time": "2017-05-06 22:50:49",
+        "time": "2017-05-08 09:25:16",
         "type": "mediawiki-extension",
         "installation-source": "source",
         "autoload": {
@@ -1600,7 +1601,9 @@
         },
         "scripts": {
             "test": [
-                "parallel-lint . --exclude vendor"
+                "@validate --no-interaction",
+                "parallel-lint . --exclude vendor",
+                "phpcs -p -s"
             ]
         },
         "license": [
@@ -1633,10 +1636,10 @@
         "source": {
             "type": "git",
             "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseMediaInfo";,
-            "reference": "9da1abc9883994c5a93720da4bc89a315e39ef79"
+            "reference": "13adfa1604bb6d391fb235c984a78ecc7ce3d967"
         },
         "require": {
-            "php": ">=5.5.0",
+            "php": ">=5.5.9",
             "serialization/serialization": "~3.2",
             "wikibase/data-model": "~7.0",
             "wikibase/data-model-serialization": "~2.0",
@@ -1645,10 +1648,10 @@
         "require-dev": {
             "jakub-onderka/php-console-highlighter": "0.3.2",
             "jakub-onderka/php-parallel-lint": "0.9.2",
-            "mediawiki/mediawiki-codesniffer": "0.6.0",
-            "phpunit/phpunit": "~4.8"
+            "phpunit/phpunit": "~4.8",
+            "wikibase/wikibase-codesniffer": "^0.1.0"
         },
-        "time": "2017-05-05 19:40:03",
+        "time": "2017-05-08 09:12:55",
         "type": "mediawiki-extension",
         "installation-source": "source",
         "autoload": {
@@ -1739,10 +1742,10 @@
         "source": {
             "type": "git",
             "url": 
"https://gerrit.wikimedia.org/r/mediawiki/extensions/WikibaseQuality";,
-            "reference": "2188461f3bde51fdd56223254aa7f20f1c6c9e15"
+            "reference": "b9b82df258d1f2ff235697c172917ee556d13170"
         },
         "require": {
-            "php": ">=5.5.0",
+            "php": ">=5.5.9",
             "serialization/serialization": "^3.2.1",
             "wikibase/data-model": "~4.0|~5.0|~6.0|~7.0",
             "wikibase/data-model-services": "~2.0|~3.0"
@@ -1756,9 +1759,10 @@
             "jakub-onderka/php-parallel-lint": "0.9.2",
             "phpunit/phpunit": "^3.7.37|~4.5",
             "satooshi/php-coveralls": "master-dev",
-            "wikibase/data-model-serialization": ">=0.1 <3.0"
+            "wikibase/data-model-serialization": ">=0.1 <3.0",
+            "wikibase/wikibase-codesniffer": "^0.1.0"
         },
-        "time": "2017-05-05 23:45:32",
+        "time": "2017-05-08 09:23:39",
         "type": "mediawiki-extension",
         "installation-source": "source",
         "autoload": {
@@ -1771,7 +1775,9 @@
         },
         "scripts": {
             "test": [
-                "parallel-lint . --exclude vendor"
+                "@validate --no-interaction",
+                "parallel-lint . --exclude vendor",
+                "phpcs -p -s"
             ]
         },
         "license": [

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I471e91d54ca1acf7cf3b308074643cf85f9b60b5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <wikidata-servi...@wikimedia.de>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to