1
0
Fork 0

Getters/setters will now trigger warnings if attempting to override without super getter/setter

perfodd
Mike Gerwitz 2011-12-22 23:32:45 -05:00
parent bcb0bcbe80
commit 17047b53e9
2 changed files with 51 additions and 1 deletions

View File

@ -355,6 +355,15 @@ exports.prototype.validateGetterSetter = function(
);
}
}
else if ( keywords[ 'override' ] )
{
// using the override keyword without a super method may indicate a bug
// in the user's code
this._warningHandler( Error(
"Getter/setter '" + name +
"' using 'override' keyword without super getter/setter"
) );
}
}

View File

@ -67,7 +67,17 @@ require( 'common' ).testCase(
setUp: function()
{
this.sut = this.require( 'MemberBuilderValidator' )();
var _self = this;
// can be used to intercept warnings; redefine in test
this.warningHandler = function( warning ) {};
this.sut = this.require( 'MemberBuilderValidator' )(
function( warning )
{
_self.warningHandler( warning );
}
);
},
@ -214,4 +224,35 @@ require( 'common' ).testCase(
{
this.quickKeywordTest( [ 'static', 'virtual' ], 'static' );
},
/**
* If a developer uses the 'override' keyword when there is no super member
* to override, this could hint at a number of problems (see MethodTest for
* further discussion).
*/
'Throws warning when using override with no super getter/setter': function()
{
var given = null;
this.warningHandler = function( warning )
{
given = warning;
};
// trigger warning (override keyword with no super method)
this.quickKeywordTest( [ 'override' ] );
this.assertNotEqual( null, given,
'No warning was provided'
);
this.assertOk( given instanceof Error,
'Provided warning is not of type Error'
);
this.assertOk( ( given.message.search( shared.testName ) > -1 ),
'Override warning should contain getter/setter name'
);
},
} );