X-Git-Url: https://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fincludes%2Fregistration%2FVersionCheckerTest.php;h=9ee58816dfa8968ff183c8cf4ddfd35342063086;hb=a2c8c2969420a0f150c03f76e3a0bf9028fcda43;hp=daa407f3b2ef6b3cd6695861bf5a5249d07bdff0;hpb=5f11f7818c3e3f82245ce92aa699e08fa086b70a;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/includes/registration/VersionCheckerTest.php b/tests/phpunit/includes/registration/VersionCheckerTest.php index daa407f3b2..929ff0fa62 100644 --- a/tests/phpunit/includes/registration/VersionCheckerTest.php +++ b/tests/phpunit/includes/registration/VersionCheckerTest.php @@ -1,15 +1,17 @@ setCoreVersion( $coreVersion ); + $checker = new VersionChecker( $coreVersion ); $this->assertEquals( $expected, !(bool)$checker->checkArray( [ 'FakeExtension' => [ 'MediaWiki' => $constraint, @@ -41,4 +43,113 @@ class CoreVersionCheckerTest extends PHPUnit_Framework_TestCase { [ 'totallyinvalid', '== 1.0', true ], ]; } + + /** + * @dataProvider provideType + */ + public function testType( $given, $expected ) { + $checker = new VersionChecker( '1.0.0' ); + $checker + ->setLoadedExtensionsAndSkins( [ + 'FakeDependency' => [ + 'version' => '1.0.0', + ], + 'NoVersionGiven' => [], + ] ); + $this->assertEquals( $expected, $checker->checkArray( [ + 'FakeExtension' => $given, + ] ) + ); + } + + public static function provideType() { + return [ + // valid type + [ + [ + 'extensions' => [ + 'FakeDependency' => '1.0.0' + ] + ], + [] + ], + [ + [ + 'MediaWiki' => '1.0.0' + ], + [] + ], + [ + [ + 'extensions' => [ + 'NoVersionGiven' => '*' + ] + ], + [], + ], + [ + [ + 'extensions' => [ + 'NoVersionGiven' => '1.0', + ] + ], + [ 'NoVersionGiven does not expose its version, but FakeExtension requires: 1.0.' ], + ], + [ + [ + 'extensions' => [ + 'Missing' => '*', + ] + ], + [ 'FakeExtension requires Missing to be installed.' ], + ], + [ + [ + 'extensions' => [ + 'FakeDependency' => '2.0.0', + ] + ], + // phpcs:ignore Generic.Files.LineLength.TooLong + [ 'FakeExtension is not compatible with the current installed version of FakeDependency (1.0.0), it requires: 2.0.0.' ], + ] + ]; + } + + /** + * Check, if a non-parsable version constraint does not throw an exception or + * returns any error message. + */ + public function testInvalidConstraint() { + $checker = new VersionChecker( '1.0.0' ); + $checker + ->setLoadedExtensionsAndSkins( [ + 'FakeDependency' => [ + 'version' => 'not really valid', + ], + ] ); + $this->assertEquals( [ "FakeDependency does not have a valid version string." ], + $checker->checkArray( [ + 'FakeExtension' => [ + 'extensions' => [ + 'FakeDependency' => '1.24.3', + ], + ], + ] ) + ); + + $checker = new VersionChecker( '1.0.0' ); + $checker + ->setLoadedExtensionsAndSkins( [ + 'FakeDependency' => [ + 'version' => '1.24.3', + ], + ] ); + + $this->setExpectedException( UnexpectedValueException::class ); + $checker->checkArray( [ + 'FakeExtension' => [ + 'FakeDependency' => 'not really valid', + ] + ] ); + } }