/* 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 . */ // This test covers changing to a distinct "project root" // i.e. displaying only one particular thread, domain, or directory in the Source Tree. "use strict"; const httpServer = createTestHTTPServer(); const HOST = `localhost:${httpServer.identity.primaryPort}`; const BASE_URL = `http://${HOST}/`; const INDEX_PAGE_CONTENT = ` `; httpServer.registerPathHandler("/index.html", (request, response) => { response.setStatusLine(request.httpVersion, 200, "OK"); response.write(INDEX_PAGE_CONTENT); }); httpServer.registerPathHandler("/root-script.js", (request, response) => { response.setStatusLine(request.httpVersion, 200, "OK"); response.write("console.log('root script')"); }); httpServer.registerPathHandler( "/folder/folder-script.js", (request, response) => { response.setStatusLine(request.httpVersion, 200, "OK"); response.write("console.log('folder script')"); } ); httpServer.registerPathHandler( "/folder/sub-folder/sub-folder-script.js", (request, response) => { response.setStatusLine(request.httpVersion, 200, "OK"); response.write("console.log('sub folder script')"); } ); const ALL_SCRIPTS = [ "root-script.js", "folder-script.js", "sub-folder-script.js", ]; add_task(async function testProjectRoot() { const dbg = await initDebuggerWithAbsoluteURL( BASE_URL + "index.html", ...ALL_SCRIPTS ); await waitForSourcesInSourceTree(dbg, ALL_SCRIPTS); info("Select the Main Thread as project root"); const threadItem = findSourceNodeWithText(dbg, "Main Thread"); await setProjectRoot(dbg, threadItem); assertRootLabel(dbg, "Main Thread"); await waitForSourcesInSourceTree(dbg, ALL_SCRIPTS); info("Select the host as project root"); const hostItem = findSourceNodeWithText(dbg, HOST); await setProjectRoot(dbg, hostItem); assertRootLabel(dbg, HOST); await waitForSourcesInSourceTree(dbg, ALL_SCRIPTS); info("Select 'folder' as project root"); const folderItem = findSourceNodeWithText(dbg, "folder"); await setProjectRoot(dbg, folderItem); assertRootLabel(dbg, "folder"); await waitForSourcesInSourceTree(dbg, [ "folder-script.js", "sub-folder-script.js", ]); info("Reload and see if project root is preserved"); await reload(dbg, "folder-script.js", "sub-folder-script.js"); assertRootLabel(dbg, "folder"); await waitForSourcesInSourceTree(dbg, [ "folder-script.js", "sub-folder-script.js", ]); info("Select 'sub-folder' as project root"); const subFolderItem = findSourceNodeWithText(dbg, "sub-folder"); await setProjectRoot(dbg, subFolderItem); assertRootLabel(dbg, "sub-folder"); await waitForSourcesInSourceTree(dbg, ["sub-folder-script.js"]); info("Clear project root"); await clearProjectRoot(dbg); await waitForSourcesInSourceTree(dbg, ALL_SCRIPTS); }); async function setProjectRoot(dbg, treeNode) { return triggerSourceTreeContextMenu( dbg, treeNode, "#node-set-directory-root" ); } function assertRootLabel(dbg, label) { const rootHeaderLabel = dbg.win.document.querySelector( ".sources-clear-root-label" ); is(rootHeaderLabel.textContent, label); } async function clearProjectRoot(dbg) { const rootHeader = dbg.win.document.querySelector(".sources-clear-root"); rootHeader.click(); }