153 lines
4.4 KiB
JavaScript
153 lines
4.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
"use strict";
|
|
|
|
/**
|
|
* Tests that $json.data is accessible from the console and contains
|
|
* the parsed JSON object.
|
|
*/
|
|
|
|
/**
|
|
* Helper function to get console messages from the content page.
|
|
*/
|
|
function getConsoleMessages() {
|
|
const consoleStorageInner = Cc["@mozilla.org/consoleAPI-storage;1"];
|
|
const storageInner = consoleStorageInner.getService(Ci.nsIConsoleAPIStorage);
|
|
const events = storageInner.getEvents();
|
|
|
|
// Find messages from the JSON viewer
|
|
return events
|
|
.filter(e => e.arguments && !!e.arguments.length)
|
|
.map(e => {
|
|
// Get the formatted message text
|
|
return e.arguments.map(arg => String(arg)).join(" ");
|
|
});
|
|
}
|
|
|
|
add_task(async function test_console_welcome_message() {
|
|
// Clear any existing console messages
|
|
const consoleStorage = Cc["@mozilla.org/consoleAPI-storage;1"];
|
|
const storage = consoleStorage.getService(Ci.nsIConsoleAPIStorage);
|
|
storage.clearEvents();
|
|
|
|
await addJsonViewTab("data:application/json," + JSON.stringify({ test: 1 }));
|
|
|
|
// Get console messages
|
|
const messages = await SpecialPowers.spawn(
|
|
gBrowser.selectedBrowser,
|
|
[],
|
|
getConsoleMessages
|
|
);
|
|
|
|
// Check that the welcome message was logged
|
|
const welcomeMessage = messages.find(msg =>
|
|
msg.includes("Data available from the console")
|
|
);
|
|
ok(welcomeMessage, "Console welcome message was logged");
|
|
|
|
// Verify the message documents the available fields
|
|
ok(welcomeMessage.includes("$json.data"), "Message documents $json.data");
|
|
ok(welcomeMessage.includes("$json.text"), "Message documents $json.text");
|
|
ok(
|
|
welcomeMessage.includes("$json.headers"),
|
|
"Message documents $json.headers"
|
|
);
|
|
});
|
|
|
|
/**
|
|
* Load the JSON viewer for the given json string and get $json.data from it.
|
|
*/
|
|
async function getJSONViewData(json) {
|
|
await addJsonViewTab("data:application/json," + json);
|
|
|
|
return await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
|
|
return content.wrappedJSObject.$json?.data;
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Helper function to test that $json.data matches the original object.
|
|
*
|
|
* @param {*} obj - The object to stringify, load, and verify
|
|
* @param {string} dataDescription - Description of the data being tested
|
|
*/
|
|
async function testJSONViewData(obj, dataDescription) {
|
|
const json = JSON.stringify(obj);
|
|
const data = await getJSONViewData(json);
|
|
|
|
Assert.deepEqual(data, obj, `$json.data matches ${dataDescription}`);
|
|
}
|
|
|
|
add_task(async function test_jsonview_data_object() {
|
|
await testJSONViewData(
|
|
{
|
|
name: "test",
|
|
values: [1, 2, 3],
|
|
nested: { foo: "bar" },
|
|
},
|
|
"original object"
|
|
);
|
|
});
|
|
|
|
add_task(async function test_jsonview_data_array() {
|
|
await testJSONViewData([10, 20, 30, { key: "value" }], "original array");
|
|
});
|
|
|
|
add_task(async function test_jsonview_data_primitive() {
|
|
await testJSONViewData(42, "original number");
|
|
});
|
|
|
|
add_task(async function test_jsonview_data_string() {
|
|
await testJSONViewData("hello world", "original string");
|
|
});
|
|
|
|
add_task(async function test_jsonview_data_null() {
|
|
await testJSONViewData(null, "original null");
|
|
});
|
|
|
|
add_task(async function test_jsonview_data_invalid_json() {
|
|
const invalidJson = "{this is not valid json}";
|
|
const data = await getJSONViewData(invalidJson);
|
|
|
|
is(data, undefined, "$json.data is undefined for invalid JSON");
|
|
});
|
|
|
|
add_task(async function test_jsonview_data_large_array() {
|
|
const largeArray = Array(1000)
|
|
.fill(null)
|
|
.map((_, i) => i * 2);
|
|
|
|
await testJSONViewData(largeArray, "large array");
|
|
});
|
|
|
|
add_task(async function test_jsonview_text() {
|
|
const obj = { name: "test", value: 42 };
|
|
const json = JSON.stringify(obj);
|
|
await addJsonViewTab("data:application/json," + json);
|
|
|
|
const text = await SpecialPowers.spawn(gBrowser.selectedBrowser, [], () => {
|
|
return content.wrappedJSObject.$json?.text;
|
|
});
|
|
|
|
is(text, json, "$json.text matches the original JSON text");
|
|
});
|
|
|
|
add_task(async function test_jsonview_headers() {
|
|
await addJsonViewTab(
|
|
"data:application/json," + JSON.stringify({ foo: "bar" })
|
|
);
|
|
|
|
const headers = await SpecialPowers.spawn(
|
|
gBrowser.selectedBrowser,
|
|
[],
|
|
() => {
|
|
return content.wrappedJSObject.$json?.headers;
|
|
}
|
|
);
|
|
|
|
ok(headers, "$json.headers is defined");
|
|
ok(Array.isArray(headers.response), "$json.headers.response is an array");
|
|
ok(Array.isArray(headers.request), "$json.headers.request is an array");
|
|
});
|