Wed, 31 Dec 2014 06:09:35 +0100
Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.
1 /* Any copyright is dedicated to the Public Domain.
2 http://creativecommons.org/publicdomain/zero/1.0/ */
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 */
9 const TAB_URL = EXAMPLE_URL + "doc_frame-parameters.html";
11 let gTab, gDebuggee, gPanel, gDebugger;
13 function test() {
14 initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => {
15 gTab = aTab;
16 gDebuggee = aDebuggee;
17 gPanel = aPanel;
18 gDebugger = gPanel.panelWin;
20 prepareTest();
21 });
22 }
24 function prepareTest() {
25 gDebugger.once(gDebugger.EVENTS.FETCHED_SCOPES, runTest);
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";
34 debugger;
35 } + "())");
36 }
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 };
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 };
67 let variables = gDebugger.document.querySelectorAll(".variable-or-property");
69 for (let variable of variables) {
70 let name = variable.querySelector(".name").getAttribute("value");
71 let tester = testers[name];
72 delete testers[name];
74 ok(tester, "We should have a tester for the '" + name + "' variable.");
75 tester(variable);
76 }
78 is(Object.keys(testers).length, 0,
79 "We should have run and removed all the testers.");
81 resumeDebuggerThenCloseAndFinish(gPanel);
82 }
84 registerCleanupFunction(function() {
85 gTab = null;
86 gDebuggee = null;
87 gPanel = null;
88 gDebugger = null;
89 });