wiki.techinc.nl/tests/phpunit/unit/includes/HookContainer/DeprecatedHooksTest.php
Tim Starling d1363015b7 Introduce soft deprecation of hooks
Add a "silent" flag to DeprecatedHooks which causes relevant deprecation
warnings to be suppressed, but still allows call filtering to be used.

Add existing hooks that are documented as deprecated to the array.

Change-Id: Ieeb5e1840fd06d2b7979ef7827ba82bd2a35a2ba
2020-06-04 10:00:55 +10:00

98 lines
3 KiB
PHP

<?php
namespace MediaWiki\HookContainer;
use MediaWikiUnitTestCase;
use Wikimedia\TestingAccessWrapper;
class DeprecatedHooksTest extends MediaWikiUnitTestCase {
/**
* @covers \MediaWiki\HookContainer\DeprecatedHooks::__construct
* @covers \MediaWiki\HookContainer\DeprecatedHooks::isHookDeprecated
*/
public function testIsHookDeprecated() {
$extDeprecatedHooks = [
'FooBaz' => [ 'deprecatedVersion' => '1.35', 'component' => 'ComponentFooBaz' ]
];
$deprecatedHooks = new DeprecatedHooks( $extDeprecatedHooks );
$this->assertTrue( $deprecatedHooks->isHookDeprecated( 'FooBaz' ) );
$this->assertFalse( $deprecatedHooks->isHookDeprecated( 'FooBazBar' ) );
}
/**
* @covers \MediaWiki\HookContainer\DeprecatedHooks::markDeprecated
*/
public function testMarkDeprecatedException() {
$extDeprecatedHooks = [
'FooBaz' => [ 'deprecatedVersion' => '1.35', 'component' => 'ComponentFooBaz' ]
];
$deprecatedHooks = new DeprecatedHooks( $extDeprecatedHooks );
$this->expectExceptionMessage(
"Cannot mark hook 'FooBaz' deprecated with version 1.31. " .
"It is already marked deprecated with version 1.35"
);
$deprecatedHooks->markDeprecated( 'FooBaz', '1.31' );
}
/**
* @covers \MediaWiki\HookContainer\DeprecatedHooks::markDeprecated
*/
public function testMarkDeprecated() {
$deprecatedHooks = new DeprecatedHooks();
$deprecatedHooks->markDeprecated( 'FooBaz', '1.31', 'ComponentFooBaz' );
$allDeprecated = $deprecatedHooks->getDeprecationInfo();
$this->assertArrayHasKey( 'FooBaz', $allDeprecated );
$this->assertContains(
[
'deprecatedVersion' => '1.31',
'component' => 'ComponentFooBaz',
'silent' => false
],
$allDeprecated
);
}
/**
* @covers \MediaWiki\HookContainer\DeprecatedHooks::getDeprecationInfo
*/
public function testGetDeprecationInfo() {
$extDeprecatedHooks = [
'FooBar' => [ 'deprecatedVersion' => '1.21', 'component' => 'ComponentFooBar' ],
'FooBarBaz' => [ 'deprecatedVersion' => '1.21' ],
'SoftlyDeprecated' => [
'deprecatedVersion' => '1.21',
'component' => 'ComponentFooBar',
'silent' => true
]
];
$deprecatedHooksWrapper = TestingAccessWrapper::newFromObject( new DeprecatedHooks() );
$preRegisteredDeprecated = $deprecatedHooksWrapper->deprecatedHooks;
$deprecatedHooks = new DeprecatedHooks( $extDeprecatedHooks );
$hookDeprecationInfo = $deprecatedHooks->getDeprecationInfo( 'FooBar' );
$this->assertNull( $deprecatedHooks->getDeprecationInfo( 'FooBazBaz' ) );
$this->assertEquals(
$hookDeprecationInfo,
[
'deprecatedVersion' => '1.21',
'component' => 'ComponentFooBar',
'silent' => false,
]
);
$this->assertEquals(
$deprecatedHooks->getDeprecationInfo( 'SoftlyDeprecated' ),
[
'deprecatedVersion' => '1.21',
'component' => 'ComponentFooBar',
'silent' => true,
]
);
$this->assertCount(
count( $preRegisteredDeprecated ) + count( $extDeprecatedHooks ),
$deprecatedHooks->getDeprecationInfo()
);
}
}