This is micro-optimization of closure code to avoid binding the closure to $this where it is not needed. Created by I25a17fb22b6b669e817317a0f45051ae9c608208 Change-Id: I0ffc6200f6c6693d78a3151cb8cea7dce7c21653
82 lines
2.2 KiB
PHP
82 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
|
|
*/
|
|
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' => static 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' => [
|
|
static 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] ) );
|
|
}
|
|
}
|