summaryrefslogtreecommitdiffstats
path: root/devtools/server/tests/xpcshell/test_dbgglobal.js
blob: 6e6f40bb5d951c0dd6816426c16c73e9f7c9fce2 (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
/* Any copyright is dedicated to the Public Domain.
   http://creativecommons.org/publicdomain/zero/1.0/ */

"use strict";

const {
  SocketListener,
} = require("resource://devtools/shared/security/socket.js");

function run_test() {
  // Should get an exception if we try to interact with DevToolsServer
  // before we initialize it...
  const socketListener = new SocketListener(DevToolsServer, {});
  Assert.throws(
    () => DevToolsServer.addSocketListener(socketListener),
    /DevToolsServer has not been initialized/,
    "addSocketListener should throw before it has been initialized"
  );
  Assert.throws(
    DevToolsServer.closeAllSocketListeners,
    /this is undefined/,
    "closeAllSocketListeners should throw before it has been initialized"
  );
  Assert.throws(
    DevToolsServer.connectPipe,
    /this is undefined/,
    "connectPipe should throw before it has been initialized"
  );

  // Allow incoming connections.
  DevToolsServer.init();

  // These should still fail because we haven't added a createRootActor
  // implementation yet.
  Assert.throws(
    DevToolsServer.closeAllSocketListeners,
    /this is undefined/,
    "closeAllSocketListeners should throw if createRootActor hasn't been added"
  );
  Assert.throws(
    DevToolsServer.connectPipe,
    /this is undefined/,
    "closeAllSocketListeners should throw if createRootActor hasn't been added"
  );

  const { createRootActor } = require("xpcshell-test/testactors");
  DevToolsServer.setRootActor(createRootActor);

  // Now they should work.
  DevToolsServer.addSocketListener(socketListener);
  DevToolsServer.closeAllSocketListeners();

  // Make sure we got the test's root actor all set up.
  const client1 = DevToolsServer.connectPipe();
  client1.hooks = {
    onPacket(packet1) {
      Assert.equal(packet1.from, "root");
      Assert.equal(packet1.applicationType, "xpcshell-tests");

      // Spin up a second connection, make sure it has its own root
      // actor.
      const client2 = DevToolsServer.connectPipe();
      client2.hooks = {
        onPacket(packet2) {
          Assert.equal(packet2.from, "root");
          Assert.notEqual(
            packet1.testConnectionPrefix,
            packet2.testConnectionPrefix
          );
          client2.close();
        },
        onTransportClosed() {
          client1.close();
        },
      };
      client2.ready();
    },

    onTransportClosed() {
      do_test_finished();
    },
  };

  client1.ready();
  do_test_pending();
}