From: Florian Schmidt Date: Fri, 15 Jun 2018 15:51:22 +0000 (+0200) Subject: registration: Use the correct key for skin dependencies X-Git-Tag: 1.31.1~14 X-Git-Url: https://git.heureux-cyclage.org/?p=lhc%2Fweb%2Fwiklou.git;a=commitdiff_plain;h=500d7b8525cd2c8272eb82fe4b1713680e9aeac7 registration: Use the correct key for skin dependencies Instead of using "skin" to check for skin dependencies, extension registration now uses the correct key "skins" (from the schema). Bug: T197478 Change-Id: I382fc79229e1406786f444192e6e3e3bde44d224 (cherry picked from commit 0f7e760334df920adca5f6340814ba028b95dae0) --- diff --git a/includes/registration/VersionChecker.php b/includes/registration/VersionChecker.php index 9c673bc5db..59853b42ba 100644 --- a/includes/registration/VersionChecker.php +++ b/includes/registration/VersionChecker.php @@ -117,7 +117,7 @@ class VersionChecker { } break; case 'extensions': - case 'skin': + case 'skins': foreach ( $values as $dependency => $constraint ) { $extError = $this->handleExtensionDependency( $dependency, $constraint, $extension, $dependencyType @@ -169,7 +169,7 @@ class VersionChecker { * @param string $dependencyName The name of the dependency * @param string $constraint The required version constraint for this dependency * @param string $checkedExt The Extension, which depends on this dependency - * @param string $type Either 'extension' or 'skin' + * @param string $type Either 'extensions' or 'skins' * @return bool|array false for no errors, or an array of info */ private function handleExtensionDependency( $dependencyName, $constraint, $checkedExt, diff --git a/tests/phpunit/includes/registration/VersionCheckerTest.php b/tests/phpunit/includes/registration/VersionCheckerTest.php index 35d4ea0997..b668a9adb0 100644 --- a/tests/phpunit/includes/registration/VersionCheckerTest.php +++ b/tests/phpunit/includes/registration/VersionCheckerTest.php @@ -17,8 +17,7 @@ class VersionCheckerTest extends PHPUnit\Framework\TestCase { 'FakeExtension' => [ 'MediaWiki' => $constraint, ], - ] ) - ); + ] ) ); } public static function provideCheck() { @@ -50,8 +49,7 @@ class VersionCheckerTest extends PHPUnit\Framework\TestCase { */ public function testType( $given, $expected ) { $checker = new VersionChecker( '1.0.0' ); - $checker - ->setLoadedExtensionsAndSkins( [ + $checker->setLoadedExtensionsAndSkins( [ 'FakeDependency' => [ 'version' => '1.0.0', ], @@ -59,8 +57,7 @@ class VersionCheckerTest extends PHPUnit\Framework\TestCase { ] ); $this->assertEquals( $expected, $checker->checkArray( [ 'FakeExtension' => $given, - ] ) - ); + ] ) ); } public static function provideType() { @@ -69,22 +66,22 @@ class VersionCheckerTest extends PHPUnit\Framework\TestCase { [ [ 'extensions' => [ - 'FakeDependency' => '1.0.0' - ] + 'FakeDependency' => '1.0.0', + ], ], - [] + [], ], [ [ - 'MediaWiki' => '1.0.0' + 'MediaWiki' => '1.0.0', ], - [] + [], ], [ [ 'extensions' => [ - 'NoVersionGiven' => '*' - ] + 'NoVersionGiven' => '*', + ], ], [], ], @@ -92,39 +89,59 @@ class VersionCheckerTest extends PHPUnit\Framework\TestCase { [ 'extensions' => [ 'NoVersionGiven' => '1.0', - ] + ], + ], + [ + [ + 'incompatible' => 'FakeExtension', + 'type' => 'incompatible-extensions', + 'msg' => 'NoVersionGiven does not expose its version, but FakeExtension requires: 1.0.', + ], ], - [ [ - 'incompatible' => 'FakeExtension', - 'type' => 'incompatible-extensions', - 'msg' => 'NoVersionGiven does not expose its version, but FakeExtension requires: 1.0.' - ] ], ], [ [ 'extensions' => [ 'Missing' => '*', - ] + ], + ], + [ + [ + 'missing' => 'Missing', + 'type' => 'missing-extensions', + 'msg' => 'FakeExtension requires Missing to be installed.', + ], ], - [ [ - 'missing' => 'Missing', - 'type' => 'missing-extensions', - 'msg' => 'FakeExtension requires Missing to be installed.', - ] ], ], [ [ 'extensions' => [ 'FakeDependency' => '2.0.0', - ] - ], - [ [ - 'incompatible' => 'FakeExtension', - 'type' => 'incompatible-extensions', - // phpcs:ignore Generic.Files.LineLength.TooLong - 'msg' => 'FakeExtension is not compatible with the current installed version of FakeDependency (1.0.0), it requires: 2.0.0.' - ] ], - ] + ], + ], + [ + [ + 'incompatible' => 'FakeExtension', + 'type' => 'incompatible-extensions', + // phpcs:ignore Generic.Files.LineLength.TooLong + 'msg' => 'FakeExtension is not compatible with the current installed version of FakeDependency (1.0.0), it requires: 2.0.0.', + ], + ], + ], + [ + [ + 'skins' => [ + 'FakeSkin' => '*', + ], + ], + [ + [ + 'missing' => 'FakeSkin', + 'type' => 'missing-skins', + 'msg' => 'FakeExtension requires FakeSkin to be installed.', + ], + ], + ], ]; } @@ -134,29 +151,26 @@ class VersionCheckerTest extends PHPUnit\Framework\TestCase { */ public function testInvalidConstraint() { $checker = new VersionChecker( '1.0.0' ); - $checker - ->setLoadedExtensionsAndSkins( [ + $checker->setLoadedExtensionsAndSkins( [ 'FakeDependency' => [ 'version' => 'not really valid', ], ] ); - $this->assertEquals( - [ [ + $this->assertEquals( [ + [ 'type' => 'invalid-version', - 'msg' => "FakeDependency does not have a valid version string." - ] ], - $checker->checkArray( [ - 'FakeExtension' => [ - 'extensions' => [ - 'FakeDependency' => '1.24.3', - ], + 'msg' => "FakeDependency does not have a valid version string.", + ], + ], $checker->checkArray( [ + 'FakeExtension' => [ + 'extensions' => [ + 'FakeDependency' => '1.24.3', ], - ] ) - ); + ], + ] ) ); $checker = new VersionChecker( '1.0.0' ); - $checker - ->setLoadedExtensionsAndSkins( [ + $checker->setLoadedExtensionsAndSkins( [ 'FakeDependency' => [ 'version' => '1.24.3', ], @@ -166,7 +180,28 @@ class VersionCheckerTest extends PHPUnit\Framework\TestCase { $checker->checkArray( [ 'FakeExtension' => [ 'FakeDependency' => 'not really valid', - ] + ], ] ); } + + /** + * T197478 + */ + public function testInvalidDependency() { + $checker = new VersionChecker( '1.0.0' ); + $this->setExpectedException( UnexpectedValueException::class, + 'Dependency type skin unknown in FakeExtension' ); + $this->assertEquals( [ + [ + 'type' => 'invalid-version', + 'msg' => 'FakeDependency does not have a valid version string.', + ], + ], $checker->checkArray( [ + 'FakeExtension' => [ + 'skin' => [ + 'FakeSkin' => '*', + ], + ], + ] ) ); + } }