mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
105 lines
2.8 KiB
JavaScript
105 lines
2.8 KiB
JavaScript
|
/* Any copyright is dedicated to the Public Domain.
|
||
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||
|
|
||
|
/**
|
||
|
* Test that we can black box source mapped sources.
|
||
|
*/
|
||
|
|
||
|
var gDebuggee;
|
||
|
var gClient;
|
||
|
var gThreadClient;
|
||
|
|
||
|
Components.utils.import('resource:///modules/devtools/SourceMap.jsm');
|
||
|
|
||
|
const promise = devtools.require("sdk/core/promise");
|
||
|
|
||
|
function run_test()
|
||
|
{
|
||
|
initTestDebuggerServer();
|
||
|
gDebuggee = addTestGlobal("test-black-box");
|
||
|
gClient = new DebuggerClient(DebuggerServer.connectPipe());
|
||
|
gClient.connect(function() {
|
||
|
attachTestTabAndResume(gClient, "test-black-box", function(aResponse, aTabClient, aThreadClient) {
|
||
|
gThreadClient = aThreadClient;
|
||
|
|
||
|
promise.resolve(setup_code())
|
||
|
.then(black_box_code)
|
||
|
.then(run_code)
|
||
|
.then(test_correct_location)
|
||
|
.then(null, function (error) {
|
||
|
do_check_true(false, "Should not get an error, got " + error);
|
||
|
})
|
||
|
.then(function () {
|
||
|
finishClient(gClient);
|
||
|
});
|
||
|
});
|
||
|
});
|
||
|
do_test_pending();
|
||
|
}
|
||
|
|
||
|
function setup_code() {
|
||
|
let { code, map } = (new SourceNode(null, null, null, [
|
||
|
new SourceNode(1, 0, "a.js", "" + function a() {
|
||
|
return b();
|
||
|
}),
|
||
|
"\n",
|
||
|
new SourceNode(1, 0, "b.js", "" + function b() {
|
||
|
debugger; // Don't want to stop here.
|
||
|
return c();
|
||
|
}),
|
||
|
"\n",
|
||
|
new SourceNode(1, 0, "c.js", "" + function c() {
|
||
|
debugger; // Want to stop here.
|
||
|
}),
|
||
|
"\n"
|
||
|
])).toStringWithSourceMap({
|
||
|
file: "abc.js",
|
||
|
sourceRoot: "http://example.com/"
|
||
|
});
|
||
|
|
||
|
code += "//# sourceMappingURL=data:text/json," + map.toString();
|
||
|
|
||
|
Components.utils.evalInSandbox(code,
|
||
|
gDebuggee,
|
||
|
"1.8",
|
||
|
"http://example.com/abc.js");
|
||
|
}
|
||
|
|
||
|
function black_box_code() {
|
||
|
const d = promise.defer();
|
||
|
|
||
|
gThreadClient.getSources(function ({ sources, error }) {
|
||
|
do_check_true(!error, "Shouldn't get an error getting sources");
|
||
|
const source = sources.filter((s) => {
|
||
|
return s.url.indexOf("b.js") !== -1;
|
||
|
})[0];
|
||
|
do_check_true(!!source, "We should have our source in the sources list");
|
||
|
|
||
|
gThreadClient.source(source).blackBox(function ({ error }) {
|
||
|
do_check_true(!error, "Should not get an error black boxing");
|
||
|
d.resolve(true);
|
||
|
});
|
||
|
});
|
||
|
|
||
|
return d.promise;
|
||
|
}
|
||
|
|
||
|
function run_code() {
|
||
|
const d = promise.defer();
|
||
|
|
||
|
gClient.addOneTimeListener("paused", function (aEvent, aPacket) {
|
||
|
d.resolve(aPacket);
|
||
|
gThreadClient.resume();
|
||
|
});
|
||
|
gDebuggee.a();
|
||
|
|
||
|
return d.promise;
|
||
|
}
|
||
|
|
||
|
function test_correct_location(aPacket) {
|
||
|
do_check_eq(aPacket.why.type, "debuggerStatement",
|
||
|
"Should hit a debugger statement.");
|
||
|
do_check_eq(aPacket.frame.where.url, "http://example.com/c.js",
|
||
|
"Should have skipped over the debugger statement in the black boxed source");
|
||
|
}
|