/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ // Test to verify that the keys shown in sidebar are correct // Format of the test cases: { // action: Either "selectTreeItem" to select a tree item or // "assertTableItem" to select a table item, // ids: ID array for tree item to select if `action` is "selectTreeItem", // id: ID of the table item if `action` is "assertTableItem", // keyValuePairs: Array of key value pair objects which will be asserted // to exist in the storage sidebar (optional) // } "use strict"; const LONG_WORD = "a".repeat(1000); add_task(async function () { await openTabAndSetupStorage( MAIN_DOMAIN_SECURED + "storage-complex-keys.html" ); gUI.tree.expandAll(); await testLocalStorage(); await testSessionStorage(); await testIndexedDB(); }); async function testLocalStorage() { const tests = [ { action: "selectTreeItem", ids: ["localStorage", "https://test1.example.org"], }, { action: "assertTableItem", id: "", value: "1", }, { action: "assertTableItem", id: "键", value: "2", }, ]; await makeTests(tests); } async function testSessionStorage() { const tests = [ { action: "selectTreeItem", ids: ["sessionStorage", "https://test1.example.org"], }, { action: "assertTableItem", id: "Key with spaces", value: "3", }, { action: "assertTableItem", id: "Key#with~special$characters", value: "4", }, { action: "assertTableItem", id: LONG_WORD, value: "5", }, ]; await makeTests(tests); } async function testIndexedDB() { const tests = [ { action: "selectTreeItem", ids: ["indexedDB", "https://test1.example.org", "idb (default)", "obj"], }, { action: "assertTableItem", id: "", value: JSON.stringify({ id: "", name: "foo" }), keyValuePairs: [ { name: ".id", value: "" }, { name: ".name", value: "foo" }, ], }, { action: "assertTableItem", id: "键", value: JSON.stringify({ id: "键", name: "foo2" }), keyValuePairs: [ { name: "键.id", value: "键" }, { name: "键.name", value: "foo2" }, ], }, { action: "assertTableItem", id: "Key with spaces", value: JSON.stringify({ id: "Key with spaces", name: "foo3" }), keyValuePairs: [ { name: "Key with spaces.id", value: "Key with spaces" }, { name: "Key with spaces.name", value: "foo3" }, ], }, { action: "assertTableItem", id: "Key#with~special$characters", value: JSON.stringify({ id: "Key#with~special$characters", name: "foo4", }), keyValuePairs: [ { name: "Key#with~special$characters.id", value: "Key#with~special$characters", }, { name: "Key#with~special$characters.name", value: "foo4" }, ], }, { action: "assertTableItem", id: LONG_WORD, value: JSON.stringify({ id: LONG_WORD, name: "foo5" }), keyValuePairs: [ { name: `${LONG_WORD}.id`, value: LONG_WORD }, { name: `${LONG_WORD}.name`, value: "foo5" }, ], }, ]; await makeTests(tests); } async function makeTests(tests) { for (const item of tests) { info(`Selecting item ${JSON.stringify(item)}`); switch (item.action) { case "selectTreeItem": await selectTreeItem(item.ids); break; case "assertTableItem": await selectTableItem(item.id); // Check the ID and value in the data section await findVariableViewProperties([ { name: item.id, value: item.value }, ]); // If there are key value pairs defined, check those in the // parsed value section if (item.keyValuePairs) { await findVariableViewProperties(item.keyValuePairs, true); } break; } } }