summaryrefslogtreecommitdiffstats
path: root/devtools/client/storage/test/browser_storage_keys.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/storage/test/browser_storage_keys.js')
-rw-r--r--devtools/client/storage/test/browser_storage_keys.js164
1 files changed, 164 insertions, 0 deletions
diff --git a/devtools/client/storage/test/browser_storage_keys.js b/devtools/client/storage/test/browser_storage_keys.js
new file mode 100644
index 0000000000..d0c0bcaad0
--- /dev/null
+++ b/devtools/client/storage/test/browser_storage_keys.js
@@ -0,0 +1,164 @@
+/* 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;
+ }
+ }
+}