browser_dbg_cmd-dbg.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. /* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
  2. /* Any copyright is dedicated to the Public Domain.
  3. * http://creativecommons.org/publicdomain/zero/1.0/ */
  4. /**
  5. * Tests that the debugger commands work as they should.
  6. */
  7. const TEST_URI = EXAMPLE_URL + "doc_cmd-dbg.html";
  8. function test() {
  9. return Task.spawn(function* () {
  10. let options = yield helpers.openTab(TEST_URI);
  11. yield helpers.openToolbar(options);
  12. yield helpers.audit(options, [{
  13. setup: "dbg open",
  14. exec: { output: "" }
  15. }]);
  16. let [gTab, gDebuggee, gPanel] = yield initDebugger(gBrowser.selectedTab);
  17. let gDebugger = gPanel.panelWin;
  18. let gThreadClient = gDebugger.gThreadClient;
  19. yield helpers.audit(options, [{
  20. setup: "dbg list",
  21. exec: { output: /doc_cmd-dbg.html/ }
  22. }]);
  23. let button = gDebuggee.document.querySelector("input[type=button]");
  24. let output = gDebuggee.document.querySelector("input[type=text]");
  25. let cmd = function (aTyped, aState) {
  26. return promise.all([
  27. waitForThreadEvents(gPanel, aState),
  28. helpers.audit(options, [{ setup: aTyped, exec: { output: "" } }])
  29. ]);
  30. };
  31. let click = function (aElement, aState) {
  32. return promise.all([
  33. waitForThreadEvents(gPanel, aState),
  34. executeSoon(() => EventUtils.sendMouseEvent({ type: "click" }, aElement, gDebuggee))
  35. ]);
  36. };
  37. yield cmd("dbg interrupt", "paused");
  38. is(gThreadClient.state, "paused", "Debugger is paused.");
  39. yield cmd("dbg continue", "resumed");
  40. isnot(gThreadClient.state, "paused", "Debugger has continued.");
  41. yield click(button, "paused");
  42. is(gThreadClient.state, "paused", "Debugger is paused again.");
  43. yield cmd("dbg step in", "paused");
  44. yield cmd("dbg step in", "paused");
  45. yield cmd("dbg step in", "paused");
  46. is(output.value, "step in", "Debugger stepped in.");
  47. yield cmd("dbg step over", "paused");
  48. is(output.value, "step over", "Debugger stepped over.");
  49. yield cmd("dbg step out", "paused");
  50. is(output.value, "step out", "Debugger stepped out.");
  51. yield cmd("dbg continue", "paused");
  52. is(output.value, "dbg continue", "Debugger continued.");
  53. let closeDebugger = function () {
  54. let deferred = promise.defer();
  55. helpers.audit(options, [{
  56. setup: "dbg close",
  57. exec: { output: "" }
  58. }])
  59. .then(() => {
  60. let toolbox = gDevTools.getToolbox(options.target);
  61. if (!toolbox) {
  62. ok(true, "Debugger is closed.");
  63. deferred.resolve();
  64. } else {
  65. toolbox.on("destroyed", () => {
  66. ok(true, "Debugger just closed.");
  67. deferred.resolve();
  68. });
  69. }
  70. });
  71. return deferred.promise;
  72. };
  73. // We close the debugger twice to ensure 'dbg close' doesn't error when
  74. // toolbox is already closed. See bug 884638 for more info.
  75. yield closeDebugger();
  76. yield closeDebugger();
  77. yield helpers.closeToolbar(options);
  78. yield helpers.closeTab(options);
  79. }).then(finish, helpers.handleError);
  80. }