wiki.techinc.nl/tests/phpunit/unit/includes/debug/DeprecatablePropertyArrayTest.php
Timo Tijhof 72fda163e2 debug: Assert native deprecation in DeprecatablePropertyArrayTest
Avoid the complexity of MWDebug added in 2704be7df8.

Motivated by I1d4a166b6dff8b, which makes the native deprecation happen
always, and would otherwise make this test fail since native warnings
become exceptions in PHPUnit.

Change-Id: I83f19c26bb69b8aa5d1a91f7aa286aad56f5e64d
2020-06-17 15:23:52 +00:00

83 lines
2.2 KiB
PHP

<?php
use MediaWiki\Debug\DeprecatablePropertyArray;
/**
* @covers \MediaWiki\Debug\DeprecatablePropertyArray
*/
class DeprecatablePropertyArrayTest extends MediaWikiUnitTestCase {
private const PROP_NAME = 'test_property';
/**
* @dataProvider provideDeprecationWarning
* @param callable $callback
*/
public function testDeprecationWarning( callable $callback, string $message ) {
$this->expectDeprecation();
$this->expectDeprecationMessage( $message );
$callback();
}
public function provideDeprecationWarning() {
$propName = self::PROP_NAME;
$array = new DeprecatablePropertyArray(
[
self::PROP_NAME => 'test_value',
'callback' => function () {
return 'callback_test_value';
},
],
[
self::PROP_NAME => 'DEPRECATED_VERSION',
'callback' => 'DEPRECATED_VERSION',
],
'TEST'
);
yield 'get' => [
function () use ( $array ) {
$this->assertSame( 'test_value', $array[ self::PROP_NAME ] );
},
"TEST get '{$propName}'"
];
yield 'get, callback' => [
function () use ( $array ) {
$this->assertSame( 'callback_test_value', $array[ 'callback' ] );
},
"TEST get 'callback'"
];
yield 'exists' => [
function () use ( $array ) {
$this->assertTrue( isset( $array[ self::PROP_NAME ] ) );
},
"TEST exists '{$propName}'"
];
yield 'unset' => [
function () use ( $array ) {
unset( $array[ self::PROP_NAME ] );
},
"TEST unset '{$propName}'"
];
}
public function testNonDeprecated() {
$array = new DeprecatablePropertyArray( [], [], __METHOD__ );
$this->assertFalse( isset( $array[self::PROP_NAME] ) );
$array[self::PROP_NAME] = 'test_value';
$this->assertTrue( isset( $array[self::PROP_NAME] ) );
$this->assertSame( 'test_value', $array[self::PROP_NAME] );
unset( $array[self::PROP_NAME] );
$this->assertFalse( isset( $array[self::PROP_NAME] ) );
}
public function testNonDeprecatedNumerical() {
$array = new DeprecatablePropertyArray( [], [], __METHOD__ );
$this->assertFalse( isset( $array[0] ) );
$array[] = 'test_value';
$this->assertTrue( isset( $array[0] ) );
$this->assertSame( 'test_value', $array[0] );
unset( $array[0] );
$this->assertFalse( isset( $array[0] ) );
}
}