Bug 1444106 - Add test for rapid addition and removal of items in the storage inspector r?ochameau
MozReview-Commit-ID: 5sM12SBiBSF
--- a/devtools/client/storage/test/browser.ini
+++ b/devtools/client/storage/test/browser.ini
@@ -1,12 +1,13 @@
[DEFAULT]
tags = devtools
subsuite = devtools
support-files =
+ storage-blank.html
storage-cache-error.html
storage-complex-values.html
storage-cookies.html
storage-cookies-samesite.html
storage-empty-objectstores.html
storage-idb-delete-blocked.html
storage-indexeddb-duplicate-names.html
storage-listings.html
@@ -50,16 +51,17 @@ tags = usercontextid
[browser_storage_dynamic_updates_sessionStorage.js]
[browser_storage_empty_objectstores.js]
[browser_storage_indexeddb_delete.js]
[browser_storage_indexeddb_delete_blocked.js]
[browser_storage_indexeddb_duplicate_names.js]
[browser_storage_localstorage_add.js]
[browser_storage_localstorage_edit.js]
[browser_storage_localstorage_error.js]
+[browser_storage_localstorage_rapid_add_remove.js]
[browser_storage_overflow.js]
[browser_storage_search.js]
[browser_storage_search_keyboard_trap.js]
[browser_storage_sessionstorage_add.js]
[browser_storage_sessionstorage_edit.js]
[browser_storage_sidebar.js]
[browser_storage_sidebar_toggle.js]
[browser_storage_sidebar_update.js]
new file mode 100644
--- /dev/null
+++ b/devtools/client/storage/test/browser_storage_localstorage_rapid_add_remove.js
@@ -0,0 +1,34 @@
+/* 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/. */
+
+/* import-globals-from head.js */
+
+// Basic test to check the rapid adding and removing of localStorage entries.
+
+"use strict";
+
+add_task(function* () {
+ yield openTabAndSetupStorage(MAIN_DOMAIN + "storage-blank.html");
+ yield selectTreeItem(["localStorage", "http://test1.example.org"]);
+
+ ok(isTableEmpty(), "Table empty on init");
+
+ for (let i = 0; i < 10; i++) {
+ yield addRemove(`test${i}`);
+ }
+
+ yield finishTests();
+});
+
+function* addRemove(name) {
+ yield ContentTask.spawn(gBrowser.selectedBrowser, name, innerName => {
+ content.localStorage.setItem(innerName, "true");
+ content.localStorage.removeItem(innerName);
+ });
+
+ info("Waiting for store objects to be changed");
+ yield gUI.once("store-objects-edit");
+
+ ok(isTableEmpty(), `Table empty after rapid add/remove of "${name}"`);
+}
--- a/devtools/client/storage/test/head.js
+++ b/devtools/client/storage/test/head.js
@@ -636,16 +636,27 @@ function getRowCells(id, includeHidden =
}
cells[name] = column.cellNodes[index];
}
return cells;
}
/**
+ * Check for an empty table.
+ */
+function isTableEmpty() {
+ let doc = gPanelWindow.document;
+ let table = gUI.table;
+ let cells = doc.querySelectorAll(".table-widget-column#" + table.uniqueId +
+ " .table-widget-cell");
+ return cells.length === 0;
+}
+
+/**
* Get available ids... useful for error reporting.
*/
function getAvailableIds() {
let doc = gPanelWindow.document;
let table = gUI.table;
let out = "Available ids:\n";
let cells = doc.querySelectorAll(".table-widget-column#" + table.uniqueId +
new file mode 100644
--- /dev/null
+++ b/devtools/client/storage/test/storage-blank.html
@@ -0,0 +1,9 @@
+<!doctype html>
+<html>
+ <head>
+ <meta charset="utf-8" />
+ </head>
+ <body>
+ <h2>storage-blank.html</h2>
+ </body>
+</html>