summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/browser_dbg_sources-cache.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg_sources-cache.js')
-rw-r--r--devtools/client/debugger/test/mochitest/browser_dbg_sources-cache.js147
1 files changed, 147 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg_sources-cache.js b/devtools/client/debugger/test/mochitest/browser_dbg_sources-cache.js
new file mode 100644
index 000000000..2c5d9d0e2
--- /dev/null
+++ b/devtools/client/debugger/test/mochitest/browser_dbg_sources-cache.js
@@ -0,0 +1,147 @@
+/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
+/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
+/* 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;
+
+function test() {
+ let options = {
+ source: EXAMPLE_URL + "code_function-search-01.js",
+ line: 1
+ };
+ initDebugger(TAB_URL, options).then(([aTab, aDebuggee, aPanel]) => {
+ const gTab = aTab;
+ const gDebuggee = aDebuggee;
+ const gPanel = aPanel;
+ const gDebugger = gPanel.panelWin;
+ const gEditor = gDebugger.DebuggerView.editor;
+ const gSources = gDebugger.DebuggerView.Sources;
+ const gPrevLabelsCache = gDebugger.SourceUtils._labelsCache;
+ const gPrevGroupsCache = gDebugger.SourceUtils._groupsCache;
+ const getState = gDebugger.DebuggerController.getState;
+ const queries = gDebugger.require("./content/queries");
+ const actions = bindActionCreators(gPanel);
+
+ function initialChecks() {
+ ok(gEditor.getText().includes("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(getSelectedSourceURL(gSources).includes("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.attachments[0].source.url.includes("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.attachments[1].source.url.includes("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.attachments[2].source.url.includes("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.attachments[3].source.url.includes("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 performReloadAndTestState() {
+ gDebugger.gTarget.once("will-navigate", testStateBeforeReload);
+ gDebugger.gTarget.once("navigate", testStateAfterReload);
+ return reloadActiveTab(gPanel, gDebugger.EVENTS.SOURCE_SHOWN);
+ }
+
+ function testCacheIntegrity(cachedSources) {
+ const contents = {
+ [EXAMPLE_URL + "code_function-search-01.js"]: "First source!",
+ [EXAMPLE_URL + "code_function-search-02.js"]: "Second source!",
+ [EXAMPLE_URL + "code_function-search-03.js"]: "Third source!",
+ [EXAMPLE_URL + "doc_function-search.html"]: "Peanut butter jelly time!"
+ };
+
+ const sourcesText = getState().sources.sourcesText;
+ is(Object.keys(sourcesText).length, cachedSources.length,
+ "The right number of sources is cached");
+
+ cachedSources.forEach(sourceUrl => {
+ const source = queries.getSourceByURL(getState(), EXAMPLE_URL + sourceUrl);
+ const content = queries.getSourceText(getState(), source.actor);
+ ok(content, "Source text is cached");
+ ok(content.text.includes(contents[source.url]), "Source text is correct");
+ });
+ }
+
+ function fetchAllSources() {
+ const sources = queries.getSources(getState());
+ return Promise.all(Object.keys(sources).map(k => {
+ const source = sources[k];
+ return actions.loadSourceText(source);
+ }));
+ }
+
+ 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.");
+ }
+
+ Task.spawn(function* () {
+ yield initialChecks();
+ yield testCacheIntegrity(["code_function-search-01.js"]);
+ yield fetchAllSources();
+ yield testCacheIntegrity([
+ "code_function-search-01.js",
+ "code_function-search-02.js",
+ "code_function-search-03.js",
+ "doc_function-search.html"
+ ]);
+ yield performReloadAndTestState();
+ closeDebuggerAndFinish(gPanel);
+ });
+ });
+}