Dactyloidae/devtools/client/webconsole/new-console-output/test/fixtures/stub-generators/head.js

192 lines
5.8 KiB
JavaScript

/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
/* Any copyright is dedicated to the Public Domain.
* http://creativecommons.org/publicdomain/zero/1.0/ */
/* import-globals-from ../../../../framework/test/shared-head.js */
"use strict";
// shared-head.js handles imports, constants, and utility functions
// Load the shared-head file first.
Services.scriptloader.loadSubScript(
"chrome://mochitests/content/browser/devtools/client/framework/test/shared-head.js",
this);
Services.prefs.setBoolPref("devtools.webconsole.new-frontend-enabled", true);
registerCleanupFunction(() => {
Services.prefs.clearUserPref("devtools.webconsole.new-frontend-enabled");
});
const { prepareMessage } = require("devtools/client/webconsole/new-console-output/utils/messages");
const { stubPackets } = require("devtools/client/webconsole/new-console-output/test/fixtures/stubs/index.js");
const BASE_PATH = "../../../../devtools/client/webconsole/new-console-output/test/fixtures";
const TEMP_FILE_PATH = OS.Path.join(`${BASE_PATH}/stub-generators`, "test-tempfile.js");
let cachedPackets = {};
function getCleanedPacket(key, packet) {
if(Object.keys(cachedPackets).includes(key)) {
return cachedPackets[key];
}
// Strip escaped characters.
let safeKey = key
.replace(/\\n/g, "\n")
.replace(/\\r/g, "\r")
.replace(/\\\"/g, `\"`)
.replace(/\\\'/g, `\'`);
// If the stub already exist, we want to ignore irrelevant properties
// (actor, timeStamp, timer, ...) that might changed and "pollute"
// the diff resulting from this stub generation.
let res;
if(stubPackets.has(safeKey)) {
let existingPacket = stubPackets.get(safeKey);
res = Object.assign({}, packet, {
from: existingPacket.from
});
// Clean root timestamp.
if(res.timestamp) {
res.timestamp = existingPacket.timestamp;
}
if (res.message) {
// Clean timeStamp on the message prop.
res.message.timeStamp = existingPacket.message.timeStamp;
if (res.message.timer) {
// Clean timer properties on the message.
// Those properties are found on console.time and console.timeEnd calls,
// and those time can vary, which is why we need to clean them.
if (res.message.timer.started) {
res.message.timer.started = existingPacket.message.timer.started;
}
if (res.message.timer.duration) {
res.message.timer.duration = existingPacket.message.timer.duration;
}
}
if(Array.isArray(res.message.arguments)) {
// Clean actor ids on each message.arguments item.
res.message.arguments.forEach((argument, i) => {
if (argument && argument.actor) {
argument.actor = existingPacket.message.arguments[i].actor;
}
});
}
}
if (res.result) {
// Clean actor ids on evaluation result messages.
res.result.actor = existingPacket.result.actor;
if (res.result.preview) {
if(res.result.preview.timestamp) {
// Clean timestamp there too.
res.result.preview.timestamp = existingPacket.result.preview.timestamp;
}
}
}
if (res.exception) {
// Clean actor ids on exception messages.
res.exception.actor = existingPacket.exception.actor;
if (res.exception.preview) {
if(res.exception.preview.timestamp) {
// Clean timestamp there too.
res.exception.preview.timestamp = existingPacket.exception.preview.timestamp;
}
}
}
if (res.eventActor) {
// Clean actor ids, timeStamp and startedDateTime on network messages.
res.eventActor.actor = existingPacket.eventActor.actor;
res.eventActor.startedDateTime = existingPacket.eventActor.startedDateTime;
res.eventActor.timeStamp = existingPacket.eventActor.timeStamp;
}
if (res.pageError) {
// Clean timeStamp on pageError messages.
res.pageError.timeStamp = existingPacket.pageError.timeStamp;
}
} else {
res = packet;
}
cachedPackets[key] = res;
return res;
}
function formatPacket(key, packet) {
return `
stubPackets.set("${key}", ${JSON.stringify(getCleanedPacket(key, packet), null, "\t")});
`;
}
function formatStub(key, packet) {
let prepared = prepareMessage(
getCleanedPacket(key, packet),
{getNextId: () => "1"}
);
return `
stubPreparedMessages.set("${key}", new ConsoleMessage(${JSON.stringify(prepared, null, "\t")}));
`;
}
function formatNetworkStub(key, packet) {
let actor = packet.eventActor;
let networkInfo = {
_type: "NetworkEvent",
timeStamp: actor.timeStamp,
node: null,
actor: actor.actor,
discardRequestBody: true,
discardResponseBody: true,
startedDateTime: actor.startedDateTime,
request: {
url: actor.url,
method: actor.method,
},
isXHR: actor.isXHR,
cause: actor.cause,
response: {},
timings: {},
// track the list of network event updates
updates: [],
private: actor.private,
fromCache: actor.fromCache,
fromServiceWorker: actor.fromServiceWorker
};
let prepared = prepareMessage(networkInfo, {getNextId: () => "1"});
return `
stubPreparedMessages.set("${key}", new NetworkEventMessage(${JSON.stringify(prepared, null, "\t")}));
`;
}
function formatFile(stubs) {
return `/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
/*
* THIS FILE IS AUTOGENERATED. DO NOT MODIFY BY HAND. RUN TESTS IN FIXTURES/ TO UPDATE.
*/
const { ConsoleMessage, NetworkEventMessage } = require("devtools/client/webconsole/new-console-output/types");
let stubPreparedMessages = new Map();
let stubPackets = new Map();
${stubs.preparedMessages.join("")}
${stubs.packets.join("")}
module.exports = {
stubPreparedMessages,
stubPackets,
}`;
}