test_promises_object_timetosettle-01.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. /* Any copyright is dedicated to the Public Domain.
  2. http://creativecommons.org/publicdomain/zero/1.0/ */
  3. /**
  4. * Test whether or not we get the time to settle depending on the state of the
  5. * promise.
  6. */
  7. "use strict";
  8. const { PromisesFront } = require("devtools/shared/fronts/promises");
  9. var events = require("sdk/event/core");
  10. add_task(function* () {
  11. let client = yield startTestDebuggerServer("test-promises-timetosettle");
  12. let chromeActors = yield getChromeActors(client);
  13. ok(Promise.toString().includes("native code"), "Expect native DOM Promise.");
  14. // We have to attach the chrome TabActor before playing with the PromiseActor
  15. yield attachTab(client, chromeActors);
  16. yield testGetTimeToSettle(client, chromeActors, () => {
  17. let p = new Promise(() => {});
  18. p.name = "p";
  19. let q = p.then();
  20. q.name = "q";
  21. return p;
  22. });
  23. let response = yield listTabs(client);
  24. let targetTab = findTab(response.tabs, "test-promises-timetosettle");
  25. ok(targetTab, "Found our target tab.");
  26. yield testGetTimeToSettle(client, targetTab, () => {
  27. const debuggee =
  28. DebuggerServer.getTestGlobal("test-promises-timetosettle");
  29. let p = new debuggee.Promise(() => {});
  30. p.name = "p";
  31. let q = p.then();
  32. q.name = "q";
  33. return p;
  34. });
  35. yield close(client);
  36. });
  37. function* testGetTimeToSettle(client, form, makePromises) {
  38. let front = PromisesFront(client, form);
  39. yield front.attach();
  40. yield front.listPromises();
  41. let onNewPromise = new Promise(resolve => {
  42. events.on(front, "new-promises", promises => {
  43. for (let p of promises) {
  44. if (p.promiseState.state === "pending") {
  45. ok(!p.promiseState.timeToSettle,
  46. "Expect no time to settle for unsettled promise.");
  47. } else {
  48. ok(p.promiseState.timeToSettle,
  49. "Expect time to settle for settled promise.");
  50. equal(typeof p.promiseState.timeToSettle, "number",
  51. "Expect time to settle to be a number.");
  52. }
  53. }
  54. resolve();
  55. });
  56. });
  57. let promise = makePromises();
  58. yield onNewPromise;
  59. yield front.detach();
  60. // Appease eslint
  61. void promise;
  62. }