1
0
Fork 0

Can no longer override getters/setters with methods

closure/master
Mike Gerwitz 2011-06-14 19:44:11 -04:00
parent fb155d8df5
commit 394b4981bf
2 changed files with 80 additions and 0 deletions

View File

@ -153,6 +153,14 @@ function validateMethod( keywords, prev_data, value, name )
);
}
// do not allow overriding getters/setters
if ( prev_data && ( prev_data.get || prev_data.set ) )
{
throw TypeError(
"Cannot override getter/setter '" + name + "' with method"
);
}
// search for any previous instances of this member
if ( prev )
{

View File

@ -291,3 +291,75 @@ mb_common.assertCommon();
}, TypeError, "Cannot declare private abstract method" );
} )();
/**
* While getters are technically methods, it doesn't make sense to override
* getters/setters with methods because they are fundamentally different.
*/
( function testCannotOverrideGetters()
{
mb_common.members[ 'public' ] = {};
Object.defineProperty( mb_common.members[ 'public' ], mb_common.name, {
get: function() {},
} );
try
{
mb_common.value = function() {};
mb_common.buildMemberQuick( {}, true );
}
catch ( e )
{
assert.ok( e.message.search( mb_common.name ) !== -1,
"Method override getter failure should contain method name"
);
// ensure we have the correct error
assert.ok( e.message.search( 'getter' ) !== -1,
"Proper error is thrown for getter override failure"
);
return;
}
assert.fail(
"Should not be permitted to override getters with methods"
);
} )();
/**
* While setters are technically methods, it doesn't make sense to override
* getters/setters with methods because they are fundamentally different.
*/
( function testCannotOverrideSetters()
{
mb_common.members[ 'public' ] = {};
Object.defineProperty( mb_common.members[ 'public' ], mb_common.name, {
set: function() {},
} );
try
{
mb_common.value = function() {};
mb_common.buildMemberQuick( {}, true );
}
catch ( e )
{
assert.ok( e.message.search( mb_common.name ) !== -1,
"Method override setter failure should contain method name"
);
// ensure we have the correct error
assert.ok( e.message.search( 'setter' ) !== -1,
"Proper error is thrown for setter override failure"
);
return;
}
assert.fail(
"Should not be permitted to override setters with methods"
);
} )();