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

/**
 * Test the monitor actor.
 */

"use strict";

function run_test()
{
  let EventEmitter = require("devtools/shared/event-emitter");

  function MonitorClient(client, form) {
    this.client = client;
    this.actor = form.monitorActor;
    this.events = ["update"];

    EventEmitter.decorate(this);
    client.registerClient(this);
  }
  MonitorClient.prototype.destroy = function () {
    this.client.unregisterClient(this);
  };
  MonitorClient.prototype.start = function (callback) {
    this.client.request({
      to: this.actor,
      type: "start"
    }, callback);
  };
  MonitorClient.prototype.stop = function (callback) {
    this.client.request({
      to: this.actor,
      type: "stop"
    }, callback);
  };

  let monitor, client;

  // Start the monitor actor.
  get_chrome_actors((c, form) => {
    client = c;
    monitor = new MonitorClient(client, form);
    monitor.on("update", gotUpdate);
    monitor.start(update);
  });

  let time = Date.now();

  function update() {
    let event = {
      graph: "Test",
      curve: "test",
      value: 42,
      time: time,
    };
    Services.obs.notifyObservers(null, "devtools-monitor-update", JSON.stringify(event));
  }

  function gotUpdate(type, packet) {
    packet.data.forEach(function (event) {
      // Ignore updates that were not sent by this test.
      if (event.graph === "Test") {
        do_check_eq(event.curve, "test");
        do_check_eq(event.value, 42);
        do_check_eq(event.time, time);
        monitor.stop(function (aResponse) {
          monitor.destroy();
          finishClient(client);
        });
      }
    });
  }

  do_test_pending();
}