1
0
Fork 0
firefox/devtools/client/shared/source-map-loader/test/browser/browser_source-map.js
Daniel Baumann 5e9a113729
Adding upstream version 140.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
2025-06-25 09:37:52 +02:00

175 lines
3.9 KiB
JavaScript

/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// Cover the high level API of these modules:
// getOriginalURLs getGeneratedRangesForOriginal functions
async function assertFixtureOriginalURLs(
fixtureName,
expectedUrls,
testMessage
) {
const originalSources = await fetchFixtureSourceMap(fixtureName);
const urls = originalSources.map(s => s.url);
Assert.deepEqual(urls, expectedUrls, testMessage);
}
add_task(async function testGetOriginalURLs() {
await assertFixtureOriginalURLs(
"absolute",
["https://example.com/cheese/heart.js"],
"Test absolute URL"
);
await assertFixtureOriginalURLs(
"bundle",
[
"webpack:///webpack/bootstrap%204ef8c7ec7c1df790781e",
"webpack:///entry.js",
"webpack:///times2.js",
"webpack:///output.js",
"webpack:///opts.js",
],
"Test source with a url"
);
await assertFixtureOriginalURLs(
"empty",
[`${URL_ROOT_SSL}fixtures/heart.js`],
"Test empty sourceRoot resolution"
);
await assertFixtureOriginalURLs(
"noroot",
[`${URL_ROOT_SSL}fixtures/heart.js`],
"Test Non-existing sourceRoot resolution"
);
await assertFixtureOriginalURLs(
"noroot2",
[`${URL_ROOT_SSL}fixtures/heart.js`],
"Test Non-existing sourceRoot resolution with relative URLs"
);
});
add_task(async function testGetGeneratedRangesForOriginal() {
const originals = await fetchFixtureSourceMap("intermingled-sources");
const ranges = await gSourceMapLoader.getGeneratedRangesForOriginal(
originals[0].id
);
Assert.deepEqual(
ranges,
[
{
start: {
line: 4,
column: 69,
},
end: {
line: 9,
column: Infinity,
},
},
{
start: {
line: 11,
column: 0,
},
end: {
line: 17,
column: 3,
},
},
{
start: {
line: 19,
column: 18,
},
end: {
line: 19,
column: 22,
},
},
{
start: {
line: 26,
column: 0,
},
end: {
line: 26,
column: Infinity,
},
},
{
start: {
line: 28,
column: 0,
},
end: {
line: 28,
column: Infinity,
},
},
],
"Test the overall generated ranges on the source"
);
{
// Note that we have to clear the source map in order to get the merged ranges,
// otherwise we are still fetching the previous unmerged ones!
const secondOriginals = await fetchFixtureSourceMap("intermingled-sources");
const mergedRanges = await gSourceMapLoader.getGeneratedRangesForOriginal(
secondOriginals[0].id,
true
);
Assert.deepEqual(
mergedRanges,
[
{
start: {
line: 4,
column: 69,
},
end: {
line: 28,
column: Infinity,
},
},
],
"Test the merged generated ranges on the source"
);
}
});
add_task(async function testBaseURLErrorHandling() {
const source = {
id: "missingmap.js",
sourceMapURL: "missingmap.js.map",
// Notice the duplicated ":" which cause the error here
sourceMapBaseURL: "http:://example.com/",
};
try {
await gSourceMapLoader.getOriginalURLs(source);
ok(false, "Should throw");
} catch (e) {
// We have to use startsWith as the rest of the message will be the stack trace in the worker thread
ok(
e.message.startsWith(
"URL constructor: http:://example.com/ is not a valid URL."
),
"the worker thrown with the right error message"
);
ok(
e.message.includes(
"getOriginalURLs@resource://devtools/client/shared/source-map-loader/source-map.js"
),
"Found at least one frame of the stack"
);
}
});