browser_dbg_promises-fulfillment-stack.js 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  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. * Test that we can get a stack to a promise's fulfillment point.
  6. */
  7. "use strict";
  8. const TAB_URL = EXAMPLE_URL + "doc_promise-get-fulfillment-stack.html";
  9. const { PromisesFront } = require("devtools/shared/fronts/promises");
  10. var events = require("sdk/event/core");
  11. const TEST_DATA = [
  12. {
  13. functionDisplayName: "returnPromise/<",
  14. line: 19,
  15. column: 37
  16. },
  17. {
  18. functionDisplayName: "returnPromise",
  19. line: 19,
  20. column: 14
  21. },
  22. {
  23. functionDisplayName: "makePromise",
  24. line: 14,
  25. column: 15
  26. },
  27. ];
  28. function test() {
  29. Task.spawn(function* () {
  30. DebuggerServer.init();
  31. DebuggerServer.addBrowserActors();
  32. let options = {
  33. source: TAB_URL,
  34. line: 1
  35. };
  36. const [ tab,, panel ] = yield initDebugger(TAB_URL, options);
  37. let client = new DebuggerClient(DebuggerServer.connectPipe());
  38. yield connect(client);
  39. let { tabs } = yield listTabs(client);
  40. let targetTab = findTab(tabs, TAB_URL);
  41. yield attachTab(client, targetTab);
  42. yield testGetFulfillmentStack(client, targetTab, tab);
  43. yield close(client);
  44. yield closeDebuggerAndFinish(panel);
  45. }).then(null, error => {
  46. ok(false, "Got an error: " + error.message + "\n" + error.stack);
  47. });
  48. }
  49. function* testGetFulfillmentStack(client, form, tab) {
  50. let front = PromisesFront(client, form);
  51. yield front.attach();
  52. yield front.listPromises();
  53. // Get the grip for promise p
  54. let onNewPromise = new Promise(resolve => {
  55. events.on(front, "new-promises", promises => {
  56. for (let p of promises) {
  57. if (p.preview.ownProperties.name &&
  58. p.preview.ownProperties.name.value === "p") {
  59. resolve(p);
  60. }
  61. }
  62. });
  63. });
  64. callInTab(tab, "makePromise");
  65. let grip = yield onNewPromise;
  66. ok(grip, "Found our promise p");
  67. let objectClient = new ObjectClient(client, grip);
  68. ok(objectClient, "Got Object Client");
  69. yield new Promise(resolve => {
  70. objectClient.getPromiseFulfillmentStack(response => {
  71. ok(response.fulfillmentStack.length, "Got promise allocation stack.");
  72. for (let i = 0; i < TEST_DATA.length; i++) {
  73. let stack = response.fulfillmentStack[i];
  74. let data = TEST_DATA[i];
  75. is(stack.source.url, TAB_URL, "Got correct source URL.");
  76. is(stack.functionDisplayName, data.functionDisplayName,
  77. "Got correct function display name.");
  78. is(stack.line, data.line, "Got correct stack line number.");
  79. is(stack.column, data.column, "Got correct stack column number.");
  80. }
  81. resolve();
  82. });
  83. });
  84. yield front.detach();
  85. }