From 4d2852627e894c264d397265b674791bf9288a23 Mon Sep 17 00:00:00 2001 From: Mike Gerwitz Date: Sat, 19 Mar 2011 00:58:42 -0400 Subject: [PATCH] All interface members must now be public --- lib/interface.js | 8 ++++++++ test/test-interface-extend.js | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/lib/interface.js b/lib/interface.js index d42df51..0769642 100644 --- a/lib/interface.js +++ b/lib/interface.js @@ -236,6 +236,14 @@ var extend = ( function( extending ) ); } + // all members must be public + if ( keywords[ 'protected' ] || keywords[ 'private' ] ) + { + throw TypeError( + iname + " member " + name + " must be public" + ); + } + member_builder.buildMethod( members, null, name, value, keywords ); diff --git a/test/test-interface-extend.js b/test/test-interface-extend.js index 96901c8..318e709 100644 --- a/test/test-interface-extend.js +++ b/test/test-interface-extend.js @@ -205,3 +205,29 @@ for ( var i = 0; i < base_types.length; i++ ) } } )(); + +/** + * Interfaces represent a public API that must be implemented. It does not make + * sense to have members be anything but public. + */ +( function testInterfaceMembersMustBePublic() +{ + // protected + assert.throws( function() + { + Interface( + { + 'abstract protected foo': [], + } ); + }, Error, "Interface members must be public (1)" ); + + // private + assert.throws( function() + { + Interface( + { + 'abstract private foo': [], + } ); + }, Error, "Interface members must be public (2)" ); +} )(); +