basic tests for object literal computed methods On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE". PASS o = { ['f'+'oo']() { return 10; } }; did not throw exception. PASS o.foo() is 10 PASS typeof o.foo is 'function' PASS o.foo.length is 0 PASS o.foo.name is 'foo' PASS o.foo.toString() is 'function () { return 10; }' PASS Object.getOwnPropertyDescriptor(o, 'foo').value is o.foo PASS Object.getOwnPropertyDescriptor(o, 'foo').enumerable is true PASS Object.getOwnPropertyDescriptor(o, 'foo').configurable is true PASS Object.getOwnPropertyDescriptor(o, 'foo').writable is true PASS methodName = 'add'; o = { [methodName](x, y) { return x + y; } }; did not throw exception. PASS o.add(42, -10) is 32 PASS typeof o.add is 'function' PASS o.add.length is 2 PASS o.add.name is 'add' PASS o.add.toString() is 'function (x, y) { return x + y; }' PASS o = { [ (function() { return 'method'; })() ](x, y) { return x + y; } }; did not throw exception. PASS o.method(142, -10) is 132 PASS o = { [10*10]() { return 100; } }; did not throw exception. PASS o[100]() is 100 PASS o['100']() is 100 PASS o = { [100 + 0.100]() { return 100.100; } }; did not throw exception. PASS o[100.1]() is 100.1 PASS o['100.1']() is 100.1 PASS o = { ['a' + 'dd']([x, y]) { return x + y; } }; did not throw exception. PASS o.add([142, -100]) is 42 PASS o = { [Array]([x, y]) { return x + y; } }; did not throw exception. PASS o[Array.toString()]([142, -100]) is 42 PASS o = { foo() { return 10; }, }; did not throw exception. PASS o = { foo ( ) { return 10; } }; did not throw exception. PASS o = {[true](){return true;}}; did not throw exception. PASS o = {[NaN](){return NaN;}}; did not throw exception. PASS o = {[eval](){return eval;}}; did not throw exception. PASS o = { a:1, [foo]() { return 10; }, [bar]() { return 20; }, b: 2 }; did not throw exception. PASS o = { a:1, [foo]() { return 10; }, [bar]() { return 20; }, b }; did not throw exception. PASS o = { a:1, [foo]() { return 10; }, b: b, [bar]() { return 20; }, c: 2 }; did not throw exception. PASS o = { a:1, [foo]() { return 10; }, b, [bar]() { return 20; }, c }; did not throw exception. PASS o = {[foo]:{[bar](){ return 100; }}}; did not throw exception. PASS o.foo.bar() is 100 PASS o = { [foo]() { return 10; }, [foo]() { return 20; } }; did not throw exception. PASS o.foo() is 20 PASS o = { ['get'](x, y) { return x + y; } }; did not throw exception. PASS o.get('hello', 'world') is 'helloworld' PASS o = { ['set'](x, y) { return x + y; } }; did not throw exception. PASS o.set('hello', 'world') is 'helloworld' PASS ({ [](,,,){} }) threw exception SyntaxError: Unexpected token ']'. PASS ({ [1+](){} }) threw exception SyntaxError: Unexpected token ']'. PASS ({ [1,](){} }) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name.. PASS ({ [1,'name'](){} }) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name.. PASS ({ [[1](){} }) threw exception SyntaxError: Unexpected token '{'. Expected ']' to end a computed property name.. PASS ({ [foo](,,,){} }) threw exception SyntaxError: Unexpected token ','. Expected a parameter pattern or a ')' in parameter list.. PASS ({ [foo](a{}, bar(){} }) threw exception SyntaxError: Unexpected token '{'. Expected a ')' or a ',' after a parameter declaration.. PASS ({ [foo](a, b), bar(){} }) threw exception SyntaxError: Unexpected token ','. Expected an opening '{' at the start of a method body.. PASS ({ [foo](a, b) { if }, bar(){} }) threw exception SyntaxError: Unexpected token '}'. Expected '(' to start an 'if' condition.. PASS ({__proto__: function(){}}) instanceof Function is true PASS ({['__proto__'](){}}) instanceof Function is false PASS ({['__proto__'](){}}).__proto__ instanceof Function is true PASS successfullyParsed is true TEST COMPLETE