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
90
91
92
93
94
95
96
97
98
99
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
const { require } = ChromeUtils.importESModule(
"resource://devtools/shared/loader/Loader.sys.mjs"
);
const {
DevToolsServer,
} = require("resource://devtools/server/devtools-server.js");
const {
DevToolsClient,
} = require("resource://devtools/client/devtools-client.js");
function dumpn(msg) {
dump("DBG-TEST: " + msg + "\n");
}
function connectPipeTracing() {
return new TracingTransport(DevToolsServer.connectPipe());
}
/**
* Mock the `Transport` class in order to intercept all the packet
* getting in and out and then being able to assert them and dump them.
*/
function TracingTransport(childTransport) {
this.hooks = null;
this.child = childTransport;
this.child.hooks = this;
this.expectations = [];
this.packets = [];
this.checkIndex = 0;
}
TracingTransport.prototype = {
// Remove actor names
normalize(packet) {
return JSON.parse(
JSON.stringify(packet, (key, value) => {
if (key === "to" || key === "from" || key === "actor") {
return "<actorid>";
}
return value;
})
);
},
send(packet) {
this.packets.push({
type: "sent",
packet: this.normalize(packet),
});
return this.child.send(packet);
},
close() {
return this.child.close();
},
ready() {
return this.child.ready();
},
onPacket(packet) {
this.packets.push({
type: "received",
packet: this.normalize(packet),
});
this.hooks.onPacket(packet);
},
onTransportClosed() {
if (this.hooks.onTransportClosed) {
this.hooks.onTransportClosed();
}
},
expectSend(expected) {
const packet = this.packets[this.checkIndex++];
Assert.equal(packet.type, "sent");
deepEqual(packet.packet, this.normalize(expected));
},
expectReceive(expected) {
const packet = this.packets[this.checkIndex++];
Assert.equal(packet.type, "received");
deepEqual(packet.packet, this.normalize(expected));
},
// Write your tests, call dumpLog at the end, inspect the output,
// then sprinkle the calls through the right places in your test.
dumpLog() {
for (const entry of this.packets) {
if (entry.type === "sent") {
dumpn("trace.expectSend(" + entry.packet + ");");
} else {
dumpn("trace.expectReceive(" + entry.packet + ");");
}
}
},
};
|