1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/devtools/debugger/test/browser_dbg_variables-view-frozen-sealed-nonext.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,89 @@ 1.4 +/* Any copyright is dedicated to the Public Domain. 1.5 + http://creativecommons.org/publicdomain/zero/1.0/ */ 1.6 + 1.7 +/** 1.8 + * This test checks that we properly set the frozen, sealed, and non-extensbile 1.9 + * attributes on variables so that the F/S/N is shown in the variables view. 1.10 + */ 1.11 + 1.12 +const TAB_URL = EXAMPLE_URL + "doc_frame-parameters.html"; 1.13 + 1.14 +let gTab, gDebuggee, gPanel, gDebugger; 1.15 + 1.16 +function test() { 1.17 + initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => { 1.18 + gTab = aTab; 1.19 + gDebuggee = aDebuggee; 1.20 + gPanel = aPanel; 1.21 + gDebugger = gPanel.panelWin; 1.22 + 1.23 + prepareTest(); 1.24 + }); 1.25 +} 1.26 + 1.27 +function prepareTest() { 1.28 + gDebugger.once(gDebugger.EVENTS.FETCHED_SCOPES, runTest); 1.29 + 1.30 + gDebuggee.eval("(" + function() { 1.31 + var frozen = Object.freeze({}); 1.32 + var sealed = Object.seal({}); 1.33 + var nonExtensible = Object.preventExtensions({}); 1.34 + var extensible = {}; 1.35 + var string = "foo bar baz"; 1.36 + 1.37 + debugger; 1.38 + } + "())"); 1.39 +} 1.40 + 1.41 +function runTest() { 1.42 + let hasNoneTester = function(aVariable) { 1.43 + ok(!aVariable.hasAttribute("frozen"), 1.44 + "The variable should not be frozen."); 1.45 + ok(!aVariable.hasAttribute("sealed"), 1.46 + "The variable should not be sealed."); 1.47 + ok(!aVariable.hasAttribute("non-extensible"), 1.48 + "The variable should be extensible."); 1.49 + }; 1.50 + 1.51 + let testers = { 1.52 + frozen: function (aVariable) { 1.53 + ok(aVariable.hasAttribute("frozen"), 1.54 + "The variable should be frozen."); 1.55 + }, 1.56 + sealed: function (aVariable) { 1.57 + ok(aVariable.hasAttribute("sealed"), 1.58 + "The variable should be sealed."); 1.59 + }, 1.60 + nonExtensible: function (aVariable) { 1.61 + ok(aVariable.hasAttribute("non-extensible"), 1.62 + "The variable should be non-extensible."); 1.63 + }, 1.64 + extensible: hasNoneTester, 1.65 + string: hasNoneTester, 1.66 + arguments: hasNoneTester, 1.67 + this: hasNoneTester 1.68 + }; 1.69 + 1.70 + let variables = gDebugger.document.querySelectorAll(".variable-or-property"); 1.71 + 1.72 + for (let variable of variables) { 1.73 + let name = variable.querySelector(".name").getAttribute("value"); 1.74 + let tester = testers[name]; 1.75 + delete testers[name]; 1.76 + 1.77 + ok(tester, "We should have a tester for the '" + name + "' variable."); 1.78 + tester(variable); 1.79 + } 1.80 + 1.81 + is(Object.keys(testers).length, 0, 1.82 + "We should have run and removed all the testers."); 1.83 + 1.84 + resumeDebuggerThenCloseAndFinish(gPanel); 1.85 +} 1.86 + 1.87 +registerCleanupFunction(function() { 1.88 + gTab = null; 1.89 + gDebuggee = null; 1.90 + gPanel = null; 1.91 + gDebugger = null; 1.92 +});