summaryrefslogtreecommitdiffstats
path: root/devtools/client/webconsole/test/node/helpers.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/webconsole/test/node/helpers.js')
-rw-r--r--devtools/client/webconsole/test/node/helpers.js177
1 files changed, 177 insertions, 0 deletions
diff --git a/devtools/client/webconsole/test/node/helpers.js b/devtools/client/webconsole/test/node/helpers.js
new file mode 100644
index 0000000000..32514651bd
--- /dev/null
+++ b/devtools/client/webconsole/test/node/helpers.js
@@ -0,0 +1,177 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/ */
+
+"use strict";
+
+const reduxActions = require("devtools/client/webconsole/actions/index");
+const { configureStore } = require("devtools/client/webconsole/store");
+const {
+ IdGenerator,
+} = require("devtools/client/webconsole/utils/id-generator");
+const {
+ stubPackets,
+} = require("devtools/client/webconsole/test/node/fixtures/stubs/index");
+const {
+ getAllMessagesById,
+} = require("devtools/client/webconsole/selectors/messages");
+const { getPrefsService } = require("devtools/client/webconsole/utils/prefs");
+const prefsService = getPrefsService({});
+const { PREFS } = require("devtools/client/webconsole/constants");
+const Telemetry = require("devtools/client/shared/telemetry");
+const {
+ getSerializedPacket,
+ parsePacketAndCreateFronts,
+} = require("devtools/client/webconsole/test/browser/stub-generator-helpers");
+
+/**
+ * Prepare actions for use in testing.
+ */
+function setupActions() {
+ // Some actions use dependency injection. This helps them avoid using state in
+ // a hard-to-test way. We need to inject stubbed versions of these dependencies.
+ const wrappedActions = Object.assign({}, reduxActions);
+
+ const idGenerator = new IdGenerator();
+ wrappedActions.messagesAdd = packets => {
+ return reduxActions.messagesAdd(packets, idGenerator);
+ };
+
+ return {
+ ...reduxActions,
+ messagesAdd: packets => reduxActions.messagesAdd(packets, idGenerator),
+ };
+}
+
+/**
+ * Prepare the store for use in testing.
+ */
+function setupStore(
+ input = [],
+ { storeOptions = {}, actions, webConsoleUI } = {}
+) {
+ if (!webConsoleUI) {
+ webConsoleUI = getWebConsoleUiMock();
+ }
+ const store = configureStore(webConsoleUI, {
+ ...storeOptions,
+ thunkArgs: { toolbox: { sessionId: -1 } },
+ telemetry: new Telemetry(),
+ });
+
+ // Add the messages from the input commands to the store.
+ const messagesAdd = actions ? actions.messagesAdd : reduxActions.messagesAdd;
+ store.dispatch(messagesAdd(input.map(cmd => stubPackets.get(cmd))));
+
+ return store;
+}
+
+/**
+ * Create deep copy of given packet object.
+ */
+function clonePacket(packet) {
+ const strPacket = getSerializedPacket(packet);
+ return parsePacketAndCreateFronts(JSON.parse(strPacket));
+}
+
+/**
+ * Return the message in the store at the given index.
+ *
+ * @param {object} state - The redux state of the console.
+ * @param {int} index - The index of the message in the map.
+ * @return {Message} - The message, or undefined if the index does not exists in the map.
+ */
+function getMessageAt(state, index) {
+ const messages = getAllMessagesById(state);
+ return messages.get([...messages.keys()][index]);
+}
+
+/**
+ * Return the first message in the store.
+ *
+ * @param {object} state - The redux state of the console.
+ * @return {Message} - The last message, or undefined if there are no message in store.
+ */
+function getFirstMessage(state) {
+ return getMessageAt(state, 0);
+}
+
+/**
+ * Return the last message in the store.
+ *
+ * @param {object} state - The redux state of the console.
+ * @return {Message} - The last message, or undefined if there are no message in store.
+ */
+function getLastMessage(state) {
+ const lastIndex = getAllMessagesById(state).size - 1;
+ return getMessageAt(state, lastIndex);
+}
+
+function getFiltersPrefs() {
+ return Object.values(PREFS.FILTER).reduce((res, pref) => {
+ res[pref] = prefsService.getBoolPref(pref);
+ return res;
+ }, {});
+}
+
+function clearPrefs() {
+ [
+ "devtools.hud.loglimit",
+ ...Object.values(PREFS.FILTER),
+ ...Object.values(PREFS.UI),
+ ].forEach(prefsService.clearUserPref);
+}
+
+function getPrivatePacket(key) {
+ const packet = clonePacket(stubPackets.get(key));
+ if (packet.message) {
+ packet.message.private = true;
+ }
+ if (Object.getOwnPropertyNames(packet).includes("private")) {
+ packet.private = true;
+ }
+ return packet;
+}
+
+function getWebConsoleUiMock(hud, proxyOverrides) {
+ const proxy = getProxyMock(proxyOverrides);
+ return {
+ emit: () => {},
+ emitForTests: () => {},
+ hud,
+ getAllProxies: () => [proxy],
+ proxy,
+ clearNetworkRequests: () => {},
+ clearMessagesCache: () => {},
+ releaseActor: proxy.releaseActor,
+ getProxy: () => proxy,
+ inspectObjectActor: () => {},
+ toolbox: {
+ sessionId: 1,
+ },
+ watchCssMessages: () => {},
+ };
+}
+
+function getProxyMock(overrides = {}) {
+ return {
+ releaseActor: actor => {},
+ target: {
+ ensureCSSErrorReportingEnabled: () => {},
+ },
+ ...overrides,
+ };
+}
+
+module.exports = {
+ clearPrefs,
+ clonePacket,
+ getFiltersPrefs,
+ getFirstMessage,
+ getLastMessage,
+ getMessageAt,
+ getPrivatePacket,
+ getWebConsoleUiMock,
+ prefsService,
+ setupActions,
+ setupStore,
+};