From f19a62e733368a1efc0296e3a64ec6b4c8e433fa Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Thu, 27 Oct 2011 20:21:07 -0400 Subject: [PATCH] [#25] Moved public default getter/setter test to new location --- lib/MemberBuilder.js | 4 +++ test/MemberBuilder/VisibilityTest.js | 39 +++++++++++++++++++-- test/test-member_builder-gettersetter.js | 44 ------------------------ 3 files changed, 41 insertions(+), 46 deletions(-) diff --git a/lib/MemberBuilder.js b/lib/MemberBuilder.js index 421d59b..1be9430 100644 --- a/lib/MemberBuilder.js +++ b/lib/MemberBuilder.js @@ -191,6 +191,8 @@ exports.buildProp = function( members, meta, name, value, keywords, base ) * Copies a getter to the appropriate member prototype, depending on * visibility, and assigns necessary metadata from keywords * + * XXX: Combine with buildSetter for performance benefit + * * @param {{public: Object, protected: Object, private: Object}} members * * @param {Object} meta metadata container @@ -225,6 +227,8 @@ exports.buildGetter = function( members, meta, name, value, keywords, base ) * Copies a setter to the appropriate member prototype, depending on * visibility, and assigns necessary metadata from keywords * + * XXX: Combine with buildGetter for performance benefit + * * @param {{public: Object, protected: Object, private: Object}} members * * @param {Object} meta metadata container diff --git a/test/MemberBuilder/VisibilityTest.js b/test/MemberBuilder/VisibilityTest.js index 9e8893b..3e553c5 100644 --- a/test/MemberBuilder/VisibilityTest.js +++ b/test/MemberBuilder/VisibilityTest.js @@ -22,6 +22,10 @@ * @package test */ +// get-set-test (supported) +var gst = ( typeof Object.defineProperty === 'function' ) ? true : false; + + require( 'common' ).testCase( { caseSetUp: function() @@ -133,7 +137,7 @@ require( 'common' ).testCase( { // we cannot perform these tests if getters/setters are unsupported // by our environment - if ( typeof Object.defineProperty !== 'function' ) + if ( !gst ) { return; } @@ -297,7 +301,11 @@ require( 'common' ).testCase( 'Members will be declared public if access modifier is omitted': function() { var name_prop = 'prop', val_prop = 'foo', - name_method = 'method', val_method = function() {} + name_method = 'method', val_method = function() {}, + + name_gs = 'getset', + getval = function() {}, + setval = function() {} ; this.sut.buildProp( this.members, {}, name_prop, val_prop, {}, {} ); @@ -305,6 +313,13 @@ require( 'common' ).testCase( {}, function() {}, 1, {} ); + // getter/setter if supported + if ( gst ) + { + this.sut.buildGetter( this.members, {}, name_gs, getval, {}, {} ); + this.sut.buildSetter( this.members, {}, name_gs, setval, {}, {} ); + } + this.assertStrictEqual( this.members[ 'public' ][ name_prop ][ 0 ], val_prop, @@ -316,6 +331,26 @@ require( 'common' ).testCase( val_method, 'Methods should be public by default' ); + + // getter/setter if supported + if ( gst ) + { + var data = Object.getOwnPropertyDescriptor( + this.members[ 'public' ], name_gs + ); + + this.assertStrictEqual( + data.get, + getval, + 'Getters should be public by default' + ); + + this.assertStrictEqual( + data.set, + setval, + 'Setters should be public by default' + ); + } }, diff --git a/test/test-member_builder-gettersetter.js b/test/test-member_builder-gettersetter.js index 404b8fc..382c328 100644 --- a/test/test-member_builder-gettersetter.js +++ b/test/test-member_builder-gettersetter.js @@ -96,50 +96,6 @@ function testEach( test ) } -/** - * Asserts that the given property exists only in the prototype for the - * requested visibility - */ -function assertOnlyVisibility( vis, name, value, message ) -{ - var check = [ 'public', 'protected', 'private' ], - i = check.length, - visi = '', - cmp; - - // forEach not used for pre-ES5 browser support - while ( i-- ) - { - visi = check[ i ]; - cmp = ( visi === vis ) ? value : undefined; - - assert.deepEqual( - members[ visi ].__lookupGetter__( name ), - cmp, - ( message + " (0)" ) - ); - - assert.deepEqual( - members[ visi ].__lookupSetter__( name ), - cmp, - ( message + " (1)" ) - ); - } -} - - -( function testCopiedIntoPublicPrototypeByDefault() -{ - buildGetterSetterQuick(); - - assertOnlyVisibility( 'public', - name, - value, - "Properties are copied only to the public member prototype by default" - ); -} )(); - - ( function testThrowsTypeErrorIfMultipleVisibilityKeywordsAreGiven() { assert.throws( function()