browser/devtools/debugger/test/browser_dbg_search-global-01.js

Wed, 31 Dec 2014 06:09:35 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Wed, 31 Dec 2014 06:09:35 +0100
changeset 0
6474c204b198
permissions
-rw-r--r--

Cloned upstream origin tor-browser at tor-browser-31.3.0esr-4.5-1-build1
revision ID fc1c9ff7c1b2defdbc039f12214767608f46423f for hacking purpose.

     1 /* Any copyright is dedicated to the Public Domain.
     2    http://creativecommons.org/publicdomain/zero/1.0/ */
     4 /**
     5  * Tests basic functionality of global search (lowercase + upper case, expected
     6  * UI behavior, number of results found etc.)
     7  */
     9 const TAB_URL = EXAMPLE_URL + "doc_script-switching-01.html";
    11 let gTab, gDebuggee, gPanel, gDebugger;
    12 let gEditor, gSources, gSearchView, gSearchBox;
    14 function test() {
    15   initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => {
    16     gTab = aTab;
    17     gDebuggee = aDebuggee;
    18     gPanel = aPanel;
    19     gDebugger = gPanel.panelWin;
    20     gEditor = gDebugger.DebuggerView.editor;
    21     gSources = gDebugger.DebuggerView.Sources;
    22     gSearchView = gDebugger.DebuggerView.GlobalSearch;
    23     gSearchBox = gDebugger.DebuggerView.Filtering._searchbox;
    25     waitForSourceAndCaretAndScopes(gPanel, "-02.js", 1)
    26       .then(firstSearch)
    27       .then(secondSearch)
    28       .then(clearSearch)
    29       .then(() => resumeDebuggerThenCloseAndFinish(gPanel))
    30       .then(null, aError => {
    31         ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
    32       });
    34     gDebuggee.firstCall();
    35   });
    36 }
    38 function firstSearch() {
    39   let deferred = promise.defer();
    41   is(gSearchView.itemCount, 0,
    42     "The global search pane shouldn't have any entries yet.");
    43   is(gSearchView.widget._parent.hidden, true,
    44     "The global search pane shouldn't be visible yet.");
    45   is(gSearchView._splitter.hidden, true,
    46     "The global search pane splitter shouldn't be visible yet.");
    48   gDebugger.once(gDebugger.EVENTS.GLOBAL_SEARCH_MATCH_FOUND, () => {
    49     // Some operations are synchronously dispatched on the main thread,
    50     // to avoid blocking UI, thus giving the impression of faster searching.
    51     executeSoon(() => {
    52       info("Current source url:\n" + gSources.selectedValue);
    53       info("Debugger editor text:\n" + gEditor.getText());
    55       ok(isCaretPos(gPanel, 1),
    56         "The editor shouldn't have jumped to a matching line yet.");
    57       ok(gSources.selectedValue.contains("-02.js"),
    58         "The current source shouldn't have changed after a global search.");
    59       is(gSources.visibleItems.length, 2,
    60         "Not all the sources are shown after the global search.");
    62       let sourceResults = gDebugger.document.querySelectorAll(".dbg-source-results");
    63       is(sourceResults.length, 2,
    64         "There should be matches found in two sources.");
    66       let item0 = gDebugger.SourceResults.getItemForElement(sourceResults[0]);
    67       let item1 = gDebugger.SourceResults.getItemForElement(sourceResults[1]);
    68       is(item0.instance.expanded, true,
    69         "The first source results should automatically be expanded.")
    70       is(item1.instance.expanded, true,
    71         "The second source results should automatically be expanded.")
    73       let searchResult0 = sourceResults[0].querySelectorAll(".dbg-search-result");
    74       let searchResult1 = sourceResults[1].querySelectorAll(".dbg-search-result");
    75       is(searchResult0.length, 1,
    76         "There should be one line result for the first url.");
    77       is(searchResult1.length, 2,
    78         "There should be two line results for the second url.");
    80       let firstLine0 = searchResult0[0];
    81       is(firstLine0.querySelector(".dbg-results-line-number").getAttribute("value"), "1",
    82         "The first result for the first source doesn't have the correct line attached.");
    84       is(firstLine0.querySelectorAll(".dbg-results-line-contents").length, 1,
    85         "The first result for the first source doesn't have the correct number of nodes for a line.");
    86       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string").length, 3,
    87         "The first result for the first source doesn't have the correct number of strings in a line.");
    89       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=true]").length, 1,
    90         "The first result for the first source doesn't have the correct number of matches in a line.");
    91       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=true]")[0].getAttribute("value"), "de",
    92         "The first result for the first source doesn't have the correct match in a line.");
    94       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=false]").length, 2,
    95         "The first result for the first source doesn't have the correct number of non-matches in a line.");
    96       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=false]")[0].getAttribute("value"), "/* Any copyright is ",
    97         "The first result for the first source doesn't have the correct non-matches in a line.");
    98       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=false]")[1].getAttribute("value"), "dicated to the Public Domain.",
    99         "The first result for the first source doesn't have the correct non-matches in a line.");
   101       let firstLine1 = searchResult1[0];
   102       is(firstLine1.querySelector(".dbg-results-line-number").getAttribute("value"), "1",
   103         "The first result for the second source doesn't have the correct line attached.");
   105       is(firstLine1.querySelectorAll(".dbg-results-line-contents").length, 1,
   106         "The first result for the second source doesn't have the correct number of nodes for a line.");
   107       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string").length, 3,
   108         "The first result for the second source doesn't have the correct number of strings in a line.");
   110       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=true]").length, 1,
   111         "The first result for the second source doesn't have the correct number of matches in a line.");
   112       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=true]")[0].getAttribute("value"), "de",
   113         "The first result for the second source doesn't have the correct match in a line.");
   115       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]").length, 2,
   116         "The first result for the second source doesn't have the correct number of non-matches in a line.");
   117       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]")[0].getAttribute("value"), "/* Any copyright is ",
   118         "The first result for the second source doesn't have the correct non-matches in a line.");
   119       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]")[1].getAttribute("value"), "dicated to the Public Domain.",
   120         "The first result for the second source doesn't have the correct non-matches in a line.");
   122       let secondLine1 = searchResult1[1];
   123       is(secondLine1.querySelector(".dbg-results-line-number").getAttribute("value"), "6",
   124         "The second result for the second source doesn't have the correct line attached.");
   126       is(secondLine1.querySelectorAll(".dbg-results-line-contents").length, 1,
   127         "The second result for the second source doesn't have the correct number of nodes for a line.");
   128       is(secondLine1.querySelectorAll(".dbg-results-line-contents-string").length, 3,
   129         "The second result for the second source doesn't have the correct number of strings in a line.");
   131       is(secondLine1.querySelectorAll(".dbg-results-line-contents-string[match=true]").length, 1,
   132         "The second result for the second source doesn't have the correct number of matches in a line.");
   133       is(secondLine1.querySelectorAll(".dbg-results-line-contents-string[match=true]")[0].getAttribute("value"), "de",
   134         "The second result for the second source doesn't have the correct match in a line.");
   136       is(secondLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]").length, 2,
   137         "The second result for the second source doesn't have the correct number of non-matches in a line.");
   138       is(secondLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]")[0].getAttribute("value"), '  eval("',
   139         "The second result for the second source doesn't have the correct non-matches in a line.");
   140       is(secondLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]")[1].getAttribute("value"), 'bugger;");',
   141         "The second result for the second source doesn't have the correct non-matches in a line.");
   143       deferred.resolve();
   144     });
   145   });
   147   setText(gSearchBox, "!de");
   149   return deferred.promise;
   150 }
   152 function secondSearch() {
   153   let deferred = promise.defer();
   155   is(gSearchView.itemCount, 2,
   156     "The global search pane should have some child nodes from the previous search.");
   157   is(gSearchView.widget._parent.hidden, false,
   158     "The global search pane should be visible from the previous search.");
   159   is(gSearchView._splitter.hidden, false,
   160     "The global search pane splitter should be visible from the previous search.");
   162   gDebugger.once(gDebugger.EVENTS.GLOBAL_SEARCH_MATCH_FOUND, () => {
   163     // Some operations are synchronously dispatched on the main thread,
   164     // to avoid blocking UI, thus giving the impression of faster searching.
   165     executeSoon(() => {
   166       info("Current source url:\n" + gSources.selectedValue);
   167       info("Debugger editor text:\n" + gEditor.getText());
   169       ok(isCaretPos(gPanel, 1),
   170         "The editor shouldn't have jumped to a matching line yet.");
   171       ok(gSources.selectedValue.contains("-02.js"),
   172         "The current source shouldn't have changed after a global search.");
   173       is(gSources.visibleItems.length, 2,
   174         "Not all the sources are shown after the global search.");
   176       let sourceResults = gDebugger.document.querySelectorAll(".dbg-source-results");
   177       is(sourceResults.length, 2,
   178         "There should be matches found in two sources.");
   180       let item0 = gDebugger.SourceResults.getItemForElement(sourceResults[0]);
   181       let item1 = gDebugger.SourceResults.getItemForElement(sourceResults[1]);
   182       is(item0.instance.expanded, true,
   183         "The first source results should automatically be expanded.")
   184       is(item1.instance.expanded, true,
   185         "The second source results should automatically be expanded.")
   187       let searchResult0 = sourceResults[0].querySelectorAll(".dbg-search-result");
   188       let searchResult1 = sourceResults[1].querySelectorAll(".dbg-search-result");
   189       is(searchResult0.length, 1,
   190         "There should be one line result for the first url.");
   191       is(searchResult1.length, 1,
   192         "There should be one line result for the second url.");
   194       let firstLine0 = searchResult0[0];
   195       is(firstLine0.querySelector(".dbg-results-line-number").getAttribute("value"), "1",
   196         "The first result for the first source doesn't have the correct line attached.");
   198       is(firstLine0.querySelectorAll(".dbg-results-line-contents").length, 1,
   199         "The first result for the first source doesn't have the correct number of nodes for a line.");
   200       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string").length, 5,
   201         "The first result for the first source doesn't have the correct number of strings in a line.");
   203       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=true]").length, 2,
   204         "The first result for the first source doesn't have the correct number of matches in a line.");
   205       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=true]")[0].getAttribute("value"), "ed",
   206         "The first result for the first source doesn't have the correct matches in a line.");
   207       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=true]")[1].getAttribute("value"), "ed",
   208         "The first result for the first source doesn't have the correct matches in a line.");
   210       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=false]").length, 3,
   211         "The first result for the first source doesn't have the correct number of non-matches in a line.");
   212       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=false]")[0].getAttribute("value"), "/* Any copyright is d",
   213         "The first result for the first source doesn't have the correct non-matches in a line.");
   214       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=false]")[1].getAttribute("value"), "icat",
   215         "The first result for the first source doesn't have the correct non-matches in a line.");
   216       is(firstLine0.querySelectorAll(".dbg-results-line-contents-string[match=false]")[2].getAttribute("value"), " to the Public Domain.",
   217         "The first result for the first source doesn't have the correct non-matches in a line.");
   219       let firstLine1 = searchResult1[0];
   220       is(firstLine1.querySelector(".dbg-results-line-number").getAttribute("value"), "1",
   221         "The first result for the second source doesn't have the correct line attached.");
   223       is(firstLine1.querySelectorAll(".dbg-results-line-contents").length, 1,
   224         "The first result for the second source doesn't have the correct number of nodes for a line.");
   225       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string").length, 5,
   226         "The first result for the second source doesn't have the correct number of strings in a line.");
   228       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=true]").length, 2,
   229         "The first result for the second source doesn't have the correct number of matches in a line.");
   230       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=true]")[0].getAttribute("value"), "ed",
   231         "The first result for the second source doesn't have the correct matches in a line.");
   232       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=true]")[1].getAttribute("value"), "ed",
   233         "The first result for the second source doesn't have the correct matches in a line.");
   235       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]").length, 3,
   236         "The first result for the second source doesn't have the correct number of non-matches in a line.");
   237       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]")[0].getAttribute("value"), "/* Any copyright is d",
   238         "The first result for the second source doesn't have the correct non-matches in a line.");
   239       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]")[1].getAttribute("value"), "icat",
   240         "The first result for the second source doesn't have the correct non-matches in a line.");
   241       is(firstLine1.querySelectorAll(".dbg-results-line-contents-string[match=false]")[2].getAttribute("value"), " to the Public Domain.",
   242         "The first result for the second source doesn't have the correct non-matches in a line.");
   244       deferred.resolve();
   245     });
   246   });
   248   backspaceText(gSearchBox, 2);
   249   typeText(gSearchBox, "ED");
   251   return deferred.promise;
   252 }
   254 function clearSearch() {
   255   gSearchView.clearView();
   257   is(gSearchView.itemCount, 0,
   258     "The global search pane shouldn't have any child nodes after clearing.");
   259   is(gSearchView.widget._parent.hidden, true,
   260     "The global search pane shouldn't be visible after clearing.");
   261   is(gSearchView._splitter.hidden, true,
   262     "The global search pane splitter shouldn't be visible after clearing.");
   263 }
   265 registerCleanupFunction(function() {
   266   gTab = null;
   267   gDebuggee = null;
   268   gPanel = null;
   269   gDebugger = null;
   270   gEditor = null;
   271   gSources = null;
   272   gSearchView = null;
   273   gSearchBox = null;
   274 });

mercurial