summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/unit/test_frameactor-05.js
blob: feece598ef2da29fd8f9a11a82ed41d2b024b8be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

/**
 * Verify that frame actors retrieved with the frames request
 * are included in the pause packet's popped-frames property.
 */

var gDebuggee;
var gClient;
var gThreadClient;

function run_test()
{
  initTestDebuggerServer();
  gDebuggee = addTestGlobal("test-stack");
  gClient = new DebuggerClient(DebuggerServer.connectPipe());
  gClient.connect().then(function () {
    attachTestTabAndResume(gClient, "test-stack", function (aResponse, aTabClient, aThreadClient) {
      gThreadClient = aThreadClient;
      test_pause_frame();
    });
  });
  do_test_pending();
}

function test_frame_slice() {
  if (gSliceTests.length == 0) {
    gThreadClient.resume(function () { finishClient(gClient); });
    return;
  }

  let test = gSliceTests.shift();
  gThreadClient.getFrames(test.start, test.count, function (aResponse) {
    var testFrames = gFrames.slice(test.start, test.count ? test.start + test.count : undefined);
    do_check_eq(testFrames.length, aResponse.frames.length);
    for (var i = 0; i < testFrames.length; i++) {
      let expected = testFrames[i];
      let actual = aResponse.frames[i];

      if (test.resetActors) {
        expected.actor = actual.actor;
      }

      for (var key in expected) {
        do_check_eq(expected[key], actual[key]);
      }
    }
    test_frame_slice();
  });
}

function test_pause_frame()
{
  gThreadClient.addOneTimeListener("paused", function (aEvent, aPacket1) {
    gThreadClient.getFrames(0, null, function (aFrameResponse) {
      do_check_eq(aFrameResponse.frames.length, 5);
      // Now wait for the next pause, after which the three
      // youngest actors should be popped..
      let expectPopped = aFrameResponse.frames.slice(0, 3).map(frame => frame.actor);
      expectPopped.sort();

      gThreadClient.addOneTimeListener("paused", function (aEvent, aPausePacket) {
        let popped = aPausePacket.poppedFrames.sort();
        do_check_eq(popped.length, 3);
        for (let i = 0; i < 3; i++) {
          do_check_eq(expectPopped[i], popped[i]);
        }

        gThreadClient.resume(function () { finishClient(gClient); });
      });
      gThreadClient.resume();
    });
  });

  gDebuggee.eval("(" + function () {
    function depth3() {
      debugger;
    }
    function depth2() {
      depth3();
    }
    function depth1() {
      depth2();
    }
    depth1();
    debugger;
  } + ")()");
}