summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Debugger-setInstrumentation-05.js
blob: 4a138c8480de11eb09c59b92317eedfefb7e6867 (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
// Test some inputs that should fail instrumentation validation.

var g = newGlobal({ newCompartment: true });
var dbg = Debugger(g);
var gdbg = dbg.addDebuggee(g);

function assertThrows(fn, text) {
  try {
    fn();
    assertEq(true, false);
  } catch (e) {
    if (!e.toString().includes(text)) {
      print(`Expected ${text}, got ${e}`);
      assertEq(true, false);
    }
  }
}

assertThrows(() => gdbg.setInstrumentation(undefined, []),
            "Instrumentation callback must be an object");
assertThrows(() => gdbg.setInstrumentation(gdbg.makeDebuggeeValue({}), ["foo"]),
            "Unknown instrumentation kind");

let lastScript = null;
dbg.onNewScript = script => lastScript = script;

assertThrows(() => {
  g.eval(`x = 3`);
  lastScript.setInstrumentationId("twelve");
}, "Script instrumentation ID must be a number");

assertThrows(() => {
  g.eval(`x = 3`);
  lastScript.setInstrumentationId(10);
  lastScript.setInstrumentationId(11);
}, "Script instrumentation ID is already set");

dbg.onNewScript = undefined;
gdbg.setInstrumentation(gdbg.makeDebuggeeValue({}), ["main"]);
gdbg.setInstrumentationActive(true);

assertThrows(() => { g.eval(`x = 3`) },
             "Instrumentation ID not set for script");