|
1 // Exceptions thrown by obj.defineProperties are copied into the debugger compartment. |
|
2 |
|
3 var g = newGlobal(); |
|
4 var dbg = new Debugger; |
|
5 var gw = dbg.addDebuggee(g); |
|
6 |
|
7 function test(objexpr, descs) { |
|
8 var exca, excb; |
|
9 |
|
10 g.eval("obj = (" + objexpr + ");"); |
|
11 var gobjw = gw.getOwnPropertyDescriptor("obj").value; |
|
12 try { |
|
13 gobjw.defineProperties(descs); |
|
14 } catch (exc) { |
|
15 exca = exc; |
|
16 } |
|
17 |
|
18 var indirectEval = eval; |
|
19 var obj = indirectEval("(" + objexpr + ");"); |
|
20 try { |
|
21 Object.defineProperties(obj, descs); |
|
22 } catch (exc) { |
|
23 excb = exc; |
|
24 } |
|
25 |
|
26 assertEq(Object.getPrototypeOf(exca), Object.getPrototypeOf(excb)); |
|
27 assertEq(exca.message, excb.message); |
|
28 assertEq(typeof exca.fileName, "string"); |
|
29 assertEq(typeof exca.stack, "string"); |
|
30 } |
|
31 |
|
32 test("Object.create(null, {p: {value: 1}})", {p: {value: 2}}); |
|
33 test("({})", {x: {get: 'bad'}}); |