* @param int $callerOffset How far up the call stack is the original
* caller. 2 = function that called the function that called
* wfDeprecated (Added in 1.20).
+ *
+ * @throws Exception If the MediaWiki version number is not a string or boolean.
*/
function wfDeprecated( $function, $version = false, $component = false, $callerOffset = 2 ) {
- MWDebug::deprecated( $function, $version, $component, $callerOffset + 1 );
+ if ( is_string( $version ) || is_bool( $version ) ) {
+ MWDebug::deprecated( $function, $version, $component, $callerOffset + 1 );
+ } else {
+ throw new Exception(
+ "MediaWiki version must either be a string or a boolean. " .
+ "Example valid version: '1.33'"
+ );
+ }
}
/**
public function provideGet() {
return [
- [ 'protectedDeprecated', null, null ],
[ 'protectedNonDeprecated', E_USER_ERROR,
'Cannot access non-public property TestDeprecatedClass::$protectedNonDeprecated' ],
- [ 'privateDeprecated', null, null ],
[ 'privateNonDeprecated', E_USER_ERROR,
'Cannot access non-public property TestDeprecatedClass::$privateNonDeprecated' ],
[ 'nonExistent', E_USER_NOTICE, 'Undefined property: TestDeprecatedClass::$nonExistent' ],
public function provideSet() {
return [
- [ 'protectedDeprecated', null, null ],
[ 'protectedNonDeprecated', E_USER_ERROR,
'Cannot access non-public property TestDeprecatedClass::$protectedNonDeprecated' ],
- [ 'privateDeprecated', null, null ],
[ 'privateNonDeprecated', E_USER_ERROR,
'Cannot access non-public property TestDeprecatedClass::$privateNonDeprecated' ],
[ 'nonExistent', null, null ],
}
public function testSubclassGetSet() {
- $this->assertDeprecationWarningIssued( function () {
- $this->assertSame( 1, $this->testSubclass->getDeprecatedPrivateParentProperty() );
- } );
- $this->assertDeprecationWarningIssued( function () {
- $this->testSubclass->setDeprecatedPrivateParentProperty( 0 );
- } );
- $wrapper = TestingAccessWrapper::newFromObject( $this->testSubclass );
- $this->assertSame( 0, $wrapper->privateDeprecated );
-
$fullName = 'TestDeprecatedClass::$privateNonDeprecated';
$this->assertErrorTriggered( function () {
$this->assertSame( null, $this->testSubclass->getNonDeprecatedPrivateParentProperty() );
$this->assertNotEmpty( $wrapper->deprecationWarnings );
}
+ /**
+ * Test bad MW version values to throw exceptions as expected
+ *
+ * @dataProvider provideBadMWVersion
+ */
+ public function testBadMWVersion( $version, $expected ) {
+ $this->setExpectedException( $expected );
+
+ wfDeprecated( __METHOD__, $version );
+ }
+
+ public function provideBadMWVersion() {
+ return [
+ [ 1, Exception::class ],
+ [ 1.33, Exception::class ],
+ [ null, Exception::class ]
+ ];
+ }
}