Bug 1444106 - Add test for rapid addition and removal of items in the storage inspector r?ochameau draft
authorMike Ratcliffe <mratcliffe@mozilla.com>
Fri, 09 Mar 2018 13:55:22 +0000 (2018-03-09)
changeset 766204 63d05c274554dbcd3dbffe9d268e42c6a308901b
parent 766203 28e0fd3bb4afac764585481c89047b6ca99768ae
push id102253
push userbmo:mratcliffe@mozilla.com
push dateMon, 12 Mar 2018 13:21:12 +0000 (2018-03-12)
reviewersochameau
bugs1444106
milestone60.0a1
Bug 1444106 - Add test for rapid addition and removal of items in the storage inspector r?ochameau MozReview-Commit-ID: 5sM12SBiBSF
devtools/client/storage/test/browser.ini
devtools/client/storage/test/browser_storage_localstorage_rapid_add_remove.js
devtools/client/storage/test/head.js
devtools/client/storage/test/storage-blank.html
--- 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>