browser_dbg_promises-allocation-stack.js 2.4 KB

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