/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at . */ "use strict"; add_task(async function () { const dbg = await initDebugger("doc-script-mutate.html"); const onPaused = waitForPaused(dbg); invokeInTab("mutate"); await onPaused; await waitForSelectedSource(dbg, "script-mutate"); await waitForDispatch(dbg.store, "ADD_INLINE_PREVIEW"); is( getScopeNodeLabel(dbg, 2), "", 'The second element in the scope panel is ""' ); is( getScopeNodeLabel(dbg, 4), "phonebook", 'The fourth element in the scope panel is "phonebook"' ); info("Expand `phonebook`"); await expandNode(dbg, 4); is( getScopeNodeLabel(dbg, 5), "S", 'The fifth element in the scope panel is "S"' ); info("Expand `S`"); await expandNode(dbg, 5); is( getScopeNodeLabel(dbg, 6), "sarah", 'The sixth element in the scope panel is "sarah"' ); is( getScopeNodeLabel(dbg, 7), "serena", 'The seventh element in the scope panel is "serena"' ); info("Expand `sarah`"); await expandNode(dbg, 6); is( getScopeNodeLabel(dbg, 7), "lastName", 'The seventh element in the scope panel is now "lastName"' ); is( getScopeNodeValue(dbg, 7), '"Doe"', 'The "lastName" element has the expected "Doe" value' ); await resume(dbg); await waitForPaused(dbg); await waitForDispatch(dbg.store, "ADD_INLINE_PREVIEW"); is( getScopeNodeLabel(dbg, 2), "", 'The second element in the scope panel is ""' ); is( getScopeNodeLabel(dbg, 4), "phonebook", 'The fourth element in the scope panel is "phonebook"' ); }); function expandNode(dbg, index) { const node = findElement(dbg, "scopeNode", index); const objectInspector = node.closest(".object-inspector"); const properties = objectInspector.querySelectorAll(".node").length; findElement(dbg, "scopeNode", index).click(); return waitUntil( () => objectInspector.querySelectorAll(".node").length !== properties ); }