This test checks the behavior of computed property names in object literals.

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


PASS ({[a]: true}.propertyName) is true
PASS 'use strict';({[a]: true}.propertyName) is true
PASS (function(){'use strict';return ({[a]: true}.propertyName)})() is true
PASS ({[(1,a)]: true}.propertyName) is true
PASS 'use strict';({[(1,a)]: true}.propertyName) is true
PASS (function(){'use strict';return ({[(1,a)]: true}.propertyName)})() is true
PASS ({[a+1]: true}.propertyName1) is true
PASS 'use strict';({[a+1]: true}.propertyName1) is true
PASS (function(){'use strict';return ({[a+1]: true}.propertyName1)})() is true
PASS ({propertyName: false, [a]: true}.propertyName) is true
PASS 'use strict';({propertyName: false, [a]: true}.propertyName) is true
PASS (function(){'use strict';return ({propertyName: false, [a]: true}.propertyName)})() is true
PASS ({[a]: false, propertyName: true}.propertyName) is true
PASS 'use strict';({[a]: false, propertyName: true}.propertyName) is true
PASS (function(){'use strict';return ({[a]: false, propertyName: true}.propertyName)})() is true
PASS ({get propertyName(){ return false; }, [a]: true}.propertyName) is true
PASS 'use strict';({get propertyName(){ return false; }, [a]: true}.propertyName) is true
PASS (function(){'use strict';return ({get propertyName(){ return false; }, [a]: true}.propertyName)})() is true
PASS ({[a]: false, get propertyName(){ return true; }}.propertyName) is true
PASS 'use strict';({[a]: false, get propertyName(){ return true; }}.propertyName) is true
PASS (function(){'use strict';return ({[a]: false, get propertyName(){ return true; }}.propertyName)})() is true
PASS ({__proto__: {get propertyName(){ return false; }}, [a]: true}.propertyName) is true
PASS 'use strict';({__proto__: {get propertyName(){ return false; }}, [a]: true}.propertyName) is true
PASS (function(){'use strict';return ({__proto__: {get propertyName(){ return false; }}, [a]: true}.propertyName)})() is true
PASS ({__proto__: {get propertyName(){ return false; }}, propertyName: true}.propertyName) is true
PASS 'use strict';({__proto__: {get propertyName(){ return false; }}, propertyName: true}.propertyName) is true
PASS (function(){'use strict';return ({__proto__: {get propertyName(){ return false; }}, propertyName: true}.propertyName)})() is true
PASS ({[a]: true}[0]) is true
PASS 'use strict';({[a]: true}[0]) is true
PASS (function(){'use strict';return ({[a]: true}[0])})() is true
PASS ({[a+1]: true}[1]) is true
PASS 'use strict';({[a+1]: true}[1]) is true
PASS (function(){'use strict';return ({[a+1]: true}[1])})() is true
PASS ({0: false, [a]: true}[0]) is true
PASS 'use strict';({0: false, [a]: true}[0]) is true
PASS (function(){'use strict';return ({0: false, [a]: true}[0])})() is true
PASS ({[a]: false, 0: true}[0]) is true
PASS 'use strict';({[a]: false, 0: true}[0]) is true
PASS (function(){'use strict';return ({[a]: false, 0: true}[0])})() is true
PASS ({get '0'(){ return false; }, [a]: true}[0]) is true
PASS 'use strict';({get '0'(){ return false; }, [a]: true}[0]) is true
PASS (function(){'use strict';return ({get '0'(){ return false; }, [a]: true}[0])})() is true
PASS ({[a]: false, get '0'(){ return true; }}[0]) is true
PASS 'use strict';({[a]: false, get '0'(){ return true; }}[0]) is true
PASS (function(){'use strict';return ({[a]: false, get '0'(){ return true; }}[0])})() is true
PASS ({__proto__: {get '0'(){ return false; }}, [a]: true}[0]) is true
PASS 'use strict';({__proto__: {get '0'(){ return false; }}, [a]: true}[0]) is true
PASS (function(){'use strict';return ({__proto__: {get '0'(){ return false; }}, [a]: true}[0])})() is true
PASS ({[1,a]: true}.propertyName) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS 'use strict';({[1,a]: true}.propertyName) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS (function(){'use strict';return ({[1,a]: true}.propertyName)})() threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS ({propertyName: false, [1,a]: true}.propertyName) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS 'use strict';({propertyName: false, [1,a]: true}.propertyName) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS (function(){'use strict';return ({propertyName: false, [1,a]: true}.propertyName)})() threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS ({[1,a]: false, propertyName: true}.propertyName) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS 'use strict';({[1,a]: false, propertyName: true}.propertyName) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS (function(){'use strict';return ({[1,a]: false, propertyName: true}.propertyName)})() threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS ({get propertyName(){ return false; }, [1,a]: true}.propertyName) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS 'use strict';({get propertyName(){ return false; }, [1,a]: true}.propertyName) threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS (function(){'use strict';return ({get propertyName(){ return false; }, [1,a]: true}.propertyName)})() threw exception SyntaxError: Unexpected token ','. Expected ']' to end a computed property name..
PASS successfullyParsed is true

TEST COMPLETE

