getter_setter: { input: { var get = "bar"; var a = { get, set: "foo", get bar() { return this.get; }, get 5() { return "five"; }, get 0xf55() { return "f five five"; }, get "five"() { return 5; }, set one(value) { this._one = value; }, set 9(value) { this._nine = value; }, set 0b1010(value) { this._ten = value; }, set "eleven"(value) { this._eleven = value; } }; var b = { get() { return "gift"; }, set: function(code) { return "Storing code " + code; } }; var c = { ["get"]: "foo", ["set"]: "bar" }; var d = { get: "foo", set: "bar" }; } expect: { var get = "bar"; var a = { get, set: "foo", get bar() { return this.get; }, get 5() { return "five"; }, get 0xf55() { return "f five five"; }, get "five"() { return 5; }, set one(value) { this._one = value; }, set 9(value) { this._nine = value; }, set 0b1010(value) { this._ten = value; }, set "eleven"(value) { this._eleven = value; } }; var b = { get() { return "gift"; }, set: function(code) { return "Storing code " + code; } }; var c = { ["get"]: "foo", ["set"]: "bar" }; var d = { get: "foo", set: "bar" }; } } getter_setter_mangler: { mangle = {} input: { function f(get,set) { return { get, set, get g(){}, set s(n){}, c, a:1, m(){} }; } } expect_exact: "function f(t,e){return{get:t,set:e,get g(){},set s(t){},c,a:1,m(){}}}" } computed_property_names: { input: { obj({ ["x" + "x"]: 6 }); } expect_exact: 'obj({["x"+"x"]:6});' } shorthand_properties: { mangle = true; input: (function() { var prop = 1; const value = {prop}; return value; })(); expect: (function() { var n = 1; const r = {prop:n}; return r; })(); } concise_methods: { input: { x = { foo(a, b) { return x; } } y = { foo([{a}]) { return a; }, bar(){} } } expect_exact: "x={foo(a,b){return x}};y={foo([{a}]){return a},bar(){}};" } concise_methods_with_computed_property: { options = { evaluate: true } input: { var foo = { [Symbol.iterator]() { return { /* stuff */ } }, [1 + 2]() { return 3; } } } expect: { var foo = { [Symbol.iterator]() { return { /* stuff */ } }, [3]() { return 3; } } } } concise_methods_and_mangle_props: { mangle_props = { regex: /_/ }; input: { function x() { obj = { _foo() { return 1; } } } } expect: { function x() { obj = { a() { return 1; } } } } } concise_generators: { input: { x = { *foo(a, b) { return x; } } y = { *foo([{a}]) { yield a; }, bar(){} } } expect_exact: "x={*foo(a,b){return x}};y={*foo([{a}]){yield a},bar(){}};" } concise_methods_and_keyword_names: { input: { x = { catch() {}, throw() {} } } expect: { x={catch(){},throw(){}}; } } getter_setter_with_computed_value: { input: { class C { get ['a']() { return 'A'; } set ['a'](value) { do_something(a); } } var x = { get [a.b]() { return 42; } }; class MyArray extends Array { get [Symbol.species]() { return Array; } } } expect_exact: 'class C{get["a"](){return"A"}set["a"](value){do_something(a)}}var x={get[a.b](){return 42}};class MyArray extends Array{get[Symbol.species](){return Array}}' }