basic tests for object literal shorthand construction

On success, you will see a series of "PASS" messages, followed by "TEST COMPLETE".


PASS !!{a} is true
PASS ({a}).a === 1 is true
PASS ({a}).a === a is true
PASS ({foo})['foo'] === foo is true
PASS Object.getOwnPropertyDescriptor({a}, 'a').enumerable is true
PASS Object.getOwnPropertyDescriptor({a}, 'a').configurable is true
PASS Object.getOwnPropertyDescriptor({a}, 'a').writable is true
PASS Object.keys({a,b}).join() is "a,b"
PASS Object.keys({b,a}).join() is "b,a"
PASS equivalent({a}, {a:a}) is true
PASS equivalent({a}, {a:a}) is true
PASS equivalent({a,}, {a:a}) is true
PASS equivalent({a,a}, {a:a}) is true
PASS equivalent({a,b}, {a:a, b:b}) is true
PASS equivalent({ a , b }, {a:a, b:b}) is true
PASS equivalent({a,b,}, {a:a, b:b}) is true
PASS equivalent({a,b,a}, {a:a, b:b}) is true
PASS equivalent({b,a,a}, {b:b, a:a}) is true
PASS !equivalent({a}, {b:a}) is true
PASS !equivalent({b}, {a:b}) is true
PASS !equivalent({a,b}, {a:b, b:a}) is true
PASS equivalent({foo}, {foo:foo}) is true
PASS equivalent({foo}, {foo:foo}) is true
PASS equivalent({foo,}, {foo:foo}) is true
PASS equivalent({foo,foo}, {foo:foo}) is true
PASS equivalent({foo,bar}, {foo:foo, bar:bar}) is true
PASS equivalent({ foo , bar }, {foo:foo, bar:bar}) is true
PASS equivalent({foo,bar,}, {foo:foo, bar:bar}) is true
PASS equivalent({foo,bar,foo}, {foo:foo, bar:bar}) is true
PASS equivalent({bar,foo,foo}, {bar:bar, foo:foo}) is true
PASS equivalent({foo,bar,foo}, {foo:foo, bar:bar}) is true
PASS equivalent({bar,foo,foo}, {bar:bar, foo:foo}) is true
PASS !equivalent({foo}, {bar:foo}) is true
PASS !equivalent({bar}, {foo:bar}) is true
PASS !equivalent({foo,bar}, {foo:bar, bar:foo}) is true
PASS equivalent({a, b:b, c}, {a, b, c}) is true
PASS equivalent({a:a, b, c:c}, {a, b, c}) is true
PASS equivalent({a, b, c:c}, {a, b, c}) is true
PASS equivalent({'a':a, b, c:c}, {a, b, c}) is true
PASS equivalent({nest:{a}}.nest, {nest: {a:a}}.nest) is true
PASS equivalent({nest:[{a}]}.nest[0], {nest: [{a:a}]}.nest[0]) is true
PASS equivalent([{nest:[{a}]}][0].nest[0], [{nest: [{a:a}]}][0].nest[0]) is true
PASS equivalent({a,b,t,x,f,nul,un,fun,foo,bar}, {a:a, b:b, t:t, x:x, f:f, nul:null, un:un, fun:fun, foo:foo, bar:bar}) is true
PASS equivalent({eval}, {eval: eval}) is true
PASS ({noSuchIdentifier}) threw exception ReferenceError: Can't find variable: noSuchIdentifier.
PASS ({a,noSuchIdentifier}) threw exception ReferenceError: Can't find variable: noSuchIdentifier.
PASS ({noSuchIdentifier,a}) threw exception ReferenceError: Can't find variable: noSuchIdentifier.
PASS ({a,b,noSuchIdentifier}) threw exception ReferenceError: Can't find variable: noSuchIdentifier.
PASS ({get}) threw exception ReferenceError: Can't find variable: get.
PASS ({set}) threw exception ReferenceError: Can't find variable: set.
PASS equivalent({get}, {get: 1}) is true
PASS equivalent({set}, {set: 2}) is true
PASS ({get x(){ return true; }}).x is true
PASS ({get 'x'(){ return true; }}).x is true
PASS ({get 42(){ return true; }})['42'] is true
PASS !!Object.getOwnPropertyDescriptor({set x(value){}}, 'x').set is true
PASS !!Object.getOwnPropertyDescriptor({set 'x'(value){}}, 'x').set is true
PASS !!Object.getOwnPropertyDescriptor({set 42(value){}}, '42').set is true
PASS this.__proto__ = [] threw exception TypeError: Cannot set prototype of immutable prototype object.
PASS ({__proto__: this.__proto__}) instanceof Array is false
PASS __proto__ = [] threw exception TypeError: Object.prototype.__proto__ called on null or undefined.
PASS ({__proto__: __proto__}) instanceof Array threw exception TypeError: undefined is not an object (evaluating '__proto__').
SyntaxErrors
PASS ({break}) threw exception SyntaxError: Cannot use the keyword 'break' as a shorthand property name..
PASS ({case}) threw exception SyntaxError: Cannot use the keyword 'case' as a shorthand property name..
PASS ({catch}) threw exception SyntaxError: Cannot use the keyword 'catch' as a shorthand property name..
PASS ({class}) threw exception SyntaxError: Cannot use the keyword 'class' as a shorthand property name..
PASS ({const}) threw exception SyntaxError: Cannot use the keyword 'const' as a shorthand property name..
PASS ({continue}) threw exception SyntaxError: Cannot use the keyword 'continue' as a shorthand property name..
PASS ({debugger}) threw exception SyntaxError: Cannot use the keyword 'debugger' as a shorthand property name..
PASS ({default}) threw exception SyntaxError: Cannot use the keyword 'default' as a shorthand property name..
PASS ({delete}) threw exception SyntaxError: Cannot use the keyword 'delete' as a shorthand property name..
PASS ({do}) threw exception SyntaxError: Cannot use the keyword 'do' as a shorthand property name..
PASS ({else}) threw exception SyntaxError: Cannot use the keyword 'else' as a shorthand property name..
PASS ({enum}) threw exception SyntaxError: Cannot use the reserved word 'enum' as a shorthand property name..
PASS ({export}) threw exception SyntaxError: Cannot use the keyword 'export' as a shorthand property name..
PASS ({extends}) threw exception SyntaxError: Cannot use the keyword 'extends' as a shorthand property name..
PASS ({false}) threw exception SyntaxError: Cannot use the keyword 'false' as a shorthand property name..
PASS ({finally}) threw exception SyntaxError: Cannot use the keyword 'finally' as a shorthand property name..
PASS ({for}) threw exception SyntaxError: Cannot use the keyword 'for' as a shorthand property name..
PASS ({function}) threw exception SyntaxError: Cannot use the keyword 'function' as a shorthand property name..
PASS ({if}) threw exception SyntaxError: Cannot use the keyword 'if' as a shorthand property name..
PASS ({import}) threw exception SyntaxError: Cannot use the keyword 'import' as a shorthand property name..
PASS ({in}) threw exception SyntaxError: Cannot use the keyword 'in' as a shorthand property name..
PASS ({instanceof}) threw exception SyntaxError: Cannot use the keyword 'instanceof' as a shorthand property name..
PASS ({new}) threw exception SyntaxError: Cannot use the keyword 'new' as a shorthand property name..
PASS ({null}) threw exception SyntaxError: Cannot use the keyword 'null' as a shorthand property name..
PASS ({return}) threw exception SyntaxError: Cannot use the keyword 'return' as a shorthand property name..
PASS ({super}) threw exception SyntaxError: Cannot use the keyword 'super' as a shorthand property name..
PASS ({switch}) threw exception SyntaxError: Cannot use the keyword 'switch' as a shorthand property name..
PASS ({throw}) threw exception SyntaxError: Cannot use the keyword 'throw' as a shorthand property name..
PASS ({true}) threw exception SyntaxError: Cannot use the keyword 'true' as a shorthand property name..
PASS ({try}) threw exception SyntaxError: Cannot use the keyword 'try' as a shorthand property name..
PASS ({typeof}) threw exception SyntaxError: Cannot use the keyword 'typeof' as a shorthand property name..
PASS ({var}) threw exception SyntaxError: Cannot use the keyword 'var' as a shorthand property name..
PASS ({void}) threw exception SyntaxError: Cannot use the keyword 'void' as a shorthand property name..
PASS ({while}) threw exception SyntaxError: Cannot use the keyword 'while' as a shorthand property name..
PASS ({with}) threw exception SyntaxError: Cannot use the keyword 'with' as a shorthand property name..
Contextual Keywords
PASS ({let}) threw exception ReferenceError: Can't find variable: let.
PASS ({async}) threw exception ReferenceError: Can't find variable: async.
PASS ({yield}) threw exception ReferenceError: Can't find variable: yield.
PASS ({await}) threw exception ReferenceError: Can't find variable: await.
PASS "use strict"; ({let}) } threw exception SyntaxError: Cannot use 'let' as a shorthand property name in strict mode..
PASS function* generator() { ({yield}) } threw exception SyntaxError: Cannot use 'yield' as a shorthand property name in a generator function..
PASS async function func() { ({await}) } threw exception SyntaxError: Cannot use 'await' as a shorthand property name in an async function..
PASS successfullyParsed is true

TEST COMPLETE

