|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 /** |
|
5 * This test checks that we properly set the frozen, sealed, and non-extensbile |
|
6 * attributes on variables so that the F/S/N is shown in the variables view. |
|
7 */ |
|
8 |
|
9 const TAB_URL = EXAMPLE_URL + "doc_frame-parameters.html"; |
|
10 |
|
11 let gTab, gDebuggee, gPanel, gDebugger; |
|
12 |
|
13 function test() { |
|
14 initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => { |
|
15 gTab = aTab; |
|
16 gDebuggee = aDebuggee; |
|
17 gPanel = aPanel; |
|
18 gDebugger = gPanel.panelWin; |
|
19 |
|
20 prepareTest(); |
|
21 }); |
|
22 } |
|
23 |
|
24 function prepareTest() { |
|
25 gDebugger.once(gDebugger.EVENTS.FETCHED_SCOPES, runTest); |
|
26 |
|
27 gDebuggee.eval("(" + function() { |
|
28 var frozen = Object.freeze({}); |
|
29 var sealed = Object.seal({}); |
|
30 var nonExtensible = Object.preventExtensions({}); |
|
31 var extensible = {}; |
|
32 var string = "foo bar baz"; |
|
33 |
|
34 debugger; |
|
35 } + "())"); |
|
36 } |
|
37 |
|
38 function runTest() { |
|
39 let hasNoneTester = function(aVariable) { |
|
40 ok(!aVariable.hasAttribute("frozen"), |
|
41 "The variable should not be frozen."); |
|
42 ok(!aVariable.hasAttribute("sealed"), |
|
43 "The variable should not be sealed."); |
|
44 ok(!aVariable.hasAttribute("non-extensible"), |
|
45 "The variable should be extensible."); |
|
46 }; |
|
47 |
|
48 let testers = { |
|
49 frozen: function (aVariable) { |
|
50 ok(aVariable.hasAttribute("frozen"), |
|
51 "The variable should be frozen."); |
|
52 }, |
|
53 sealed: function (aVariable) { |
|
54 ok(aVariable.hasAttribute("sealed"), |
|
55 "The variable should be sealed."); |
|
56 }, |
|
57 nonExtensible: function (aVariable) { |
|
58 ok(aVariable.hasAttribute("non-extensible"), |
|
59 "The variable should be non-extensible."); |
|
60 }, |
|
61 extensible: hasNoneTester, |
|
62 string: hasNoneTester, |
|
63 arguments: hasNoneTester, |
|
64 this: hasNoneTester |
|
65 }; |
|
66 |
|
67 let variables = gDebugger.document.querySelectorAll(".variable-or-property"); |
|
68 |
|
69 for (let variable of variables) { |
|
70 let name = variable.querySelector(".name").getAttribute("value"); |
|
71 let tester = testers[name]; |
|
72 delete testers[name]; |
|
73 |
|
74 ok(tester, "We should have a tester for the '" + name + "' variable."); |
|
75 tester(variable); |
|
76 } |
|
77 |
|
78 is(Object.keys(testers).length, 0, |
|
79 "We should have run and removed all the testers."); |
|
80 |
|
81 resumeDebuggerThenCloseAndFinish(gPanel); |
|
82 } |
|
83 |
|
84 registerCleanupFunction(function() { |
|
85 gTab = null; |
|
86 gDebuggee = null; |
|
87 gPanel = null; |
|
88 gDebugger = null; |
|
89 }); |