michael@0: /* michael@0: * Call the trap with the handler as the this value, the target as the first michael@0: * argument, the name of the property as the second argument, and the descriptor michael@0: * as the third argument. michael@0: */ michael@0: var target = {}; michael@0: var called = false; michael@0: var handler = { michael@0: defineProperty: function (target1, name, desc1) { michael@0: assertEq(this, handler); michael@0: assertEq(target1, target); michael@0: assertEq(name, 'foo'); michael@0: assertEq(desc1 == desc, false); michael@0: assertEq(desc1.value, 'bar'); michael@0: assertEq(desc1.writable, true); michael@0: assertEq(desc1.enumerable, false); michael@0: assertEq(desc1.configurable, true); michael@0: called = true; michael@0: } michael@0: } michael@0: var desc = { michael@0: value: 'bar', michael@0: writable: true, michael@0: enumerable: false, michael@0: configurable: true michael@0: }; michael@0: michael@0: var p = new Proxy(target, handler); michael@0: Object.defineProperty(p, 'foo', desc); michael@0: assertEq(called, true); michael@0: assertEq(Object.isExtensible(target), true); michael@0: assertEq(Object.isExtensible(p), true); michael@0: Object.preventExtensions(target); michael@0: assertEq(Object.isExtensible(target), false); michael@0: assertEq(Object.isExtensible(p), false);