browser/devtools/debugger/test/browser_dbg_server-conditional-bp-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  * Bug 740825: Test adding conditional breakpoints (with server-side support)
     6  */
     8 const TAB_URL = EXAMPLE_URL + "doc_conditional-breakpoints.html";
    10 function test() {
    11   // Linux debug test slaves are a bit slow at this test sometimes.
    12   requestLongerTimeout(2);
    14   let gTab, gDebuggee, gPanel, gDebugger;
    15   let gEditor, gSources, gBreakpoints, gBreakpointsAdded, gBreakpointsRemoving;
    17   initDebugger(TAB_URL).then(([aTab, aDebuggee, aPanel]) => {
    18     gTab = aTab;
    19     gDebuggee = aDebuggee;
    20     gPanel = aPanel;
    21     gDebugger = gPanel.panelWin;
    22     gEditor = gDebugger.DebuggerView.editor;
    23     gSources = gDebugger.DebuggerView.Sources;
    24     gBreakpoints = gDebugger.DebuggerController.Breakpoints;
    25     gBreakpointsAdded = gBreakpoints._added;
    26     gBreakpointsRemoving = gBreakpoints._removing;
    28     waitForSourceAndCaretAndScopes(gPanel, ".html", 17)
    29       .then(() => addBreakpoints())
    30       .then(() => initialChecks())
    31       .then(() => resumeAndTestBreakpoint(20))
    32       .then(() => resumeAndTestBreakpoint(21))
    33       .then(() => resumeAndTestBreakpoint(22))
    34       .then(() => resumeAndTestBreakpoint(23))
    35       .then(() => resumeAndTestBreakpoint(24))
    36       .then(() => resumeAndTestBreakpoint(25))
    37       .then(() => resumeAndTestBreakpoint(27))
    38       .then(() => resumeAndTestBreakpoint(28))
    39       .then(() => resumeAndTestBreakpoint(29))
    40       .then(() => resumeAndTestNoBreakpoint())
    41       .then(() => reloadActiveTab(gPanel, gDebugger.EVENTS.BREAKPOINT_SHOWN, 13))
    42       .then(() => testAfterReload())
    43       .then(() => closeDebuggerAndFinish(gPanel))
    44       .then(null, aError => {
    45         ok(false, "Got an error: " + aError.message + "\n" + aError.stack);
    46       });
    48     gDebuggee.ermahgerd();
    49   });
    51   function addBreakpoints() {
    52     return promise.resolve(null)
    53       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    54                                          line: 18,
    55                                          condition: "undefined"
    56                                        }))
    57       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    58                                          line: 19,
    59                                          condition: "null"
    60                                        }))
    61       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    62                                          line: 20,
    63                                          condition: "42"
    64                                        }))
    65       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    66                                          line: 21,
    67                                          condition: "true"
    68                                        }))
    69       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    70                                          line: 22,
    71                                          condition: "'nasu'"
    72                                        }))
    73       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    74                                          line: 23,
    75                                          condition: "/regexp/"
    76                                        }))
    77       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    78                                          line: 24,
    79                                          condition: "({})"
    80                                        }))
    81       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    82                                          line: 25,
    83                                          condition: "(function() {})"
    84                                        }))
    85       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    86                                          line: 26,
    87                                          condition: "(function() { return false; })()"
    88                                        }))
    89       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    90                                          line: 27,
    91                                          condition: "a"
    92                                        }))
    93       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    94                                          line: 28,
    95                                          condition: "a !== undefined"
    96                                        }))
    97       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
    98                                          line: 29,
    99                                          condition: "a !== null"
   100                                        }))
   101       .then(() => gPanel.addBreakpoint({ url: gSources.selectedValue,
   102                                          line: 30,
   103                                          condition: "b"
   104                                        }));
   105   }
   107   function initialChecks() {
   108     is(gDebugger.gThreadClient.state, "paused",
   109       "Should only be getting stack frames while paused.");
   110     is(gSources.itemCount, 1,
   111       "Found the expected number of sources.");
   112     is(gEditor.getText().indexOf("ermahgerd"), 253,
   113       "The correct source was loaded initially.");
   114     is(gSources.selectedValue, gSources.values[0],
   115       "The correct source is selected.");
   117     is(gBreakpointsAdded.size, 13,
   118       "13 breakpoints currently added.");
   119     is(gBreakpointsRemoving.size, 0,
   120       "No breakpoints currently being removed.");
   121     is(gEditor.getBreakpoints().length, 13,
   122       "13 breakpoints currently shown in the editor.");
   124     ok(!gBreakpoints._getAdded({ url: "foo", line: 3 }),
   125       "_getAdded('foo', 3) returns falsey.");
   126     ok(!gBreakpoints._getRemoving({ url: "bar", line: 3 }),
   127       "_getRemoving('bar', 3) returns falsey.");
   128   }
   130   function resumeAndTestBreakpoint(aLine) {
   131     let finished = waitForCaretUpdated(gPanel, aLine).then(() => testBreakpoint(aLine));
   133     EventUtils.sendMouseEvent({ type: "mousedown" },
   134       gDebugger.document.getElementById("resume"),
   135       gDebugger);
   137     return finished;
   138   }
   140   function resumeAndTestNoBreakpoint() {
   141     let finished = waitForDebuggerEvents(gPanel, gDebugger.EVENTS.AFTER_FRAMES_CLEARED).then(() => {
   142       is(gSources.itemCount, 1,
   143         "Found the expected number of sources.");
   144       is(gEditor.getText().indexOf("ermahgerd"), 253,
   145         "The correct source was loaded initially.");
   146       is(gSources.selectedValue, gSources.values[0],
   147         "The correct source is selected.");
   149       ok(gSources.selectedItem,
   150         "There should be a selected source in the sources pane.")
   151       ok(!gSources._selectedBreakpointItem,
   152         "There should be no selected breakpoint in the sources pane.")
   153       is(gSources._conditionalPopupVisible, false,
   154         "The breakpoint conditional expression popup should not be shown.");
   156       is(gDebugger.document.querySelectorAll(".dbg-stackframe").length, 0,
   157         "There should be no visible stackframes.");
   158       is(gDebugger.document.querySelectorAll(".dbg-breakpoint").length, 13,
   159         "There should be thirteen visible breakpoints.");
   160     });
   162     gDebugger.gThreadClient.resume();
   164     return finished;
   165   }
   167   function testBreakpoint(aLine, aHighlightBreakpoint) {
   168     // Highlight the breakpoint only if required.
   169     if (aHighlightBreakpoint) {
   170       let finished = waitForCaretUpdated(gPanel, aLine).then(() => testBreakpoint(aLine));
   171       gSources.highlightBreakpoint({ url: gSources.selectedValue, line: aLine });
   172       return finished;
   173     }
   175     let selectedUrl = gSources.selectedValue;
   176     let selectedBreakpoint = gSources._selectedBreakpointItem;
   178     ok(selectedUrl,
   179       "There should be a selected item in the sources pane.");
   180     ok(selectedBreakpoint,
   181       "There should be a selected brekapoint in the sources pane.");
   183     is(selectedBreakpoint.attachment.url, selectedUrl,
   184       "The breakpoint on line " + aLine + " wasn't added on the correct source.");
   185     is(selectedBreakpoint.attachment.line, aLine,
   186       "The breakpoint on line " + aLine + " wasn't found.");
   187     is(!!selectedBreakpoint.attachment.disabled, false,
   188       "The breakpoint on line " + aLine + " should be enabled.");
   189     is(!!selectedBreakpoint.attachment.openPopup, false,
   190       "The breakpoint on line " + aLine + " should not have opened a popup.");
   191     is(gSources._conditionalPopupVisible, false,
   192       "The breakpoint conditional expression popup should not have been shown.");
   194     return gBreakpoints._getAdded(selectedBreakpoint.attachment).then(aBreakpointClient => {
   195       is(aBreakpointClient.location.url, selectedUrl,
   196         "The breakpoint's client url is correct");
   197       is(aBreakpointClient.location.line, aLine,
   198         "The breakpoint's client line is correct");
   199       isnot(aBreakpointClient.condition, undefined,
   200         "The breakpoint on line " + aLine + " should have a conditional expression.");
   202       ok(isCaretPos(gPanel, aLine),
   203         "The editor caret position is not properly set.");
   204     });
   205   }
   207   function testAfterReload() {
   208     let selectedUrl = gSources.selectedValue;
   209     let selectedBreakpoint = gSources._selectedBreakpointItem;
   211     ok(selectedUrl,
   212       "There should be a selected item in the sources pane after reload.");
   213     ok(!selectedBreakpoint,
   214       "There should be no selected brekapoint in the sources pane after reload.");
   216     return promise.resolve(null)
   217       .then(() => testBreakpoint(18, true))
   218       .then(() => testBreakpoint(19, true))
   219       .then(() => testBreakpoint(20, true))
   220       .then(() => testBreakpoint(21, true))
   221       .then(() => testBreakpoint(22, true))
   222       .then(() => testBreakpoint(23, true))
   223       .then(() => testBreakpoint(24, true))
   224       .then(() => testBreakpoint(25, true))
   225       .then(() => testBreakpoint(26, true))
   226       .then(() => testBreakpoint(27, true))
   227       .then(() => testBreakpoint(28, true))
   228       .then(() => testBreakpoint(29, true))
   229       .then(() => testBreakpoint(30, true))
   230       .then(() => {
   231         is(gSources.itemCount, 1,
   232           "Found the expected number of sources.");
   233         is(gEditor.getText().indexOf("ermahgerd"), 253,
   234           "The correct source was loaded again.");
   235         is(gSources.selectedValue, gSources.values[0],
   236           "The correct source is selected.");
   238         ok(gSources.selectedItem,
   239           "There should be a selected source in the sources pane.")
   240         ok(gSources._selectedBreakpointItem,
   241           "There should be a selected breakpoint in the sources pane.")
   242         is(gSources._conditionalPopupVisible, false,
   243           "The breakpoint conditional expression popup should not be shown.");
   244       });
   245   }
   246 }

mercurial