diff -r 000000000000 -r 6474c204b198 browser/devtools/debugger/test/browser_dbg_sources-cache.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/devtools/debugger/test/browser_dbg_sources-cache.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,142 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +/** + * Tests if the sources cache knows how to cache sources when prompted. + */ + +const TAB_URL = EXAMPLE_URL + "doc_function-search.html"; +const TOTAL_SOURCES = 4; + +let gTab, gDebuggee, gPanel, gDebugger; +let gEditor, gSources, gControllerSources; +let gPrevLabelsCache, gPrevGroupsCache; + +function test() { + initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => { + gTab = aTab; + gDebuggee = aDebuggee; + gPanel = aPanel; + gDebugger = gPanel.panelWin; + gEditor = gDebugger.DebuggerView.editor; + gSources = gDebugger.DebuggerView.Sources; + gControllerSources = gDebugger.DebuggerController.SourceScripts; + gPrevLabelsCache = gDebugger.SourceUtils._labelsCache; + gPrevGroupsCache = gDebugger.SourceUtils._groupsCache; + + waitForSourceShown(gPanel, "-01.js") + .then(initialChecks) + .then(getTextForSourcesAndCheckIntegrity) + .then(performReloadAndTestState) + .then(() => closeDebuggerAndFinish(gPanel)) + .then(null, aError => { + ok(false, "Got an error: " + aError.message + "\n" + aError.stack); + }); + }); +} + +function initialChecks() { + ok(gEditor.getText().contains("First source!"), + "Editor text contents appears to be correct."); + is(gSources.selectedItem.attachment.label, "code_function-search-01.js", + "The currently selected label in the sources container is correct."); + ok(gSources.selectedValue.contains("code_function-search-01.js"), + "The currently selected value in the sources container appears to be correct."); + + is(gSources.itemCount, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " sources present in the sources list."); + is(gSources.visibleItems.length, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " sources visible in the sources list."); + is(gSources.attachments.length, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " attachments stored in the sources container model.") + is(gSources.values.length, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " values stored in the sources container model.") + + info("Source labels: " + gSources.attachments.toSource()); + info("Source values: " + gSources.values.toSource()); + + is(gSources.attachments[0].label, "code_function-search-01.js", + "The first source label is correct."); + ok(gSources.values[0].contains("code_function-search-01.js"), + "The first source value appears to be correct."); + + is(gSources.attachments[1].label, "code_function-search-02.js", + "The second source label is correct."); + ok(gSources.values[1].contains("code_function-search-02.js"), + "The second source value appears to be correct."); + + is(gSources.attachments[2].label, "code_function-search-03.js", + "The third source label is correct."); + ok(gSources.values[2].contains("code_function-search-03.js"), + "The third source value appears to be correct."); + + is(gSources.attachments[3].label, "doc_function-search.html", + "The third source label is correct."); + ok(gSources.values[3].contains("doc_function-search.html"), + "The third source value appears to be correct."); + + is(gDebugger.SourceUtils._labelsCache.size, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " labels cached."); + is(gDebugger.SourceUtils._groupsCache.size, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " groups cached."); +} + +function getTextForSourcesAndCheckIntegrity() { + return gControllerSources.getTextForSources(gSources.values).then(testCacheIntegrity); +} + +function performReloadAndTestState() { + gDebugger.gTarget.once("will-navigate", testStateBeforeReload); + gDebugger.gTarget.once("navigate", testStateAfterReload); + return reloadActiveTab(gPanel, gDebugger.EVENTS.SOURCE_SHOWN); +} + +function testCacheIntegrity(aSources) { + for (let [url, contents] of aSources) { + // Sources of a debugee don't always finish fetching consecutively. D'uh. + let index = gSources.values.indexOf(url); + + ok(index >= 0 && index <= TOTAL_SOURCES, + "Found a source url cached correctly (" + index + ")."); + ok(contents.contains( + ["First source!", "Second source!", "Third source!", "Peanut butter jelly time!"][index]), + "Found a source's text contents cached correctly (" + index + ")."); + + info("Cached source url at " + index + ": " + url); + info("Cached source text at " + index + ": " + contents); + } +} + +function testStateBeforeReload() { + is(gSources.itemCount, 0, + "There should be no sources present in the sources list during reload."); + is(gDebugger.SourceUtils._labelsCache, gPrevLabelsCache, + "The labels cache has been refreshed during reload and no new objects were created."); + is(gDebugger.SourceUtils._groupsCache, gPrevGroupsCache, + "The groups cache has been refreshed during reload and no new objects were created."); + is(gDebugger.SourceUtils._labelsCache.size, 0, + "There should be no labels cached during reload"); + is(gDebugger.SourceUtils._groupsCache.size, 0, + "There should be no groups cached during reload"); +} + +function testStateAfterReload() { + is(gSources.itemCount, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " sources present in the sources list."); + is(gDebugger.SourceUtils._labelsCache.size, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " labels cached after reload."); + is(gDebugger.SourceUtils._groupsCache.size, TOTAL_SOURCES, + "There should be " + TOTAL_SOURCES + " groups cached after reload."); +} + +registerCleanupFunction(function() { + gTab = null; + gDebuggee = null; + gPanel = null; + gDebugger = null; + gEditor = null; + gSources = null; + gControllerSources = null; + gPrevLabelsCache = null; + gPrevGroupsCache = null; +});