summaryrefslogtreecommitdiffstats
path: root/toolkit/components/xulstore/tests
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/xulstore/tests')
-rw-r--r--toolkit/components/xulstore/tests/chrome/chrome.ini5
-rw-r--r--toolkit/components/xulstore/tests/chrome/test_persistence.xhtml30
-rw-r--r--toolkit/components/xulstore/tests/chrome/window_persistence.xhtml67
-rw-r--r--toolkit/components/xulstore/tests/xpcshell/test_XULStore.js150
-rw-r--r--toolkit/components/xulstore/tests/xpcshell/xpcshell.ini4
5 files changed, 256 insertions, 0 deletions
diff --git a/toolkit/components/xulstore/tests/chrome/chrome.ini b/toolkit/components/xulstore/tests/chrome/chrome.ini
new file mode 100644
index 0000000000..c8f4ddf073
--- /dev/null
+++ b/toolkit/components/xulstore/tests/chrome/chrome.ini
@@ -0,0 +1,5 @@
+[DEFAULT]
+support-files =
+ window_persistence.xhtml
+
+[test_persistence.xhtml]
diff --git a/toolkit/components/xulstore/tests/chrome/test_persistence.xhtml b/toolkit/components/xulstore/tests/chrome/test_persistence.xhtml
new file mode 100644
index 0000000000..b3e65fb050
--- /dev/null
+++ b/toolkit/components/xulstore/tests/chrome/test_persistence.xhtml
@@ -0,0 +1,30 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
+
+<window title="Persistence Tests"
+ onload="runTest()"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
+
+ <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
+
+ <script>
+ SimpleTest.waitForExplicitFinish();
+ function runTest() {
+ window.openDialog("window_persistence.xhtml", "_blank", "chrome,noopener", true, window);
+ }
+
+ function windowOpened() {
+ window.openDialog("window_persistence.xhtml", "_blank", "chrome,noopener", false, window);
+ }
+
+ function testDone() {
+ SimpleTest.finish();
+ }
+ </script>
+
+<body xmlns="http://www.w3.org/1999/xhtml">
+ <p id="display"/>
+</body>
+
+</window>
diff --git a/toolkit/components/xulstore/tests/chrome/window_persistence.xhtml b/toolkit/components/xulstore/tests/chrome/window_persistence.xhtml
new file mode 100644
index 0000000000..d474891cfc
--- /dev/null
+++ b/toolkit/components/xulstore/tests/chrome/window_persistence.xhtml
@@ -0,0 +1,67 @@
+<?xml version="1.0"?>
+<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
+<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>
+
+<window title="Persistence Tests"
+ onload="opened()"
+ xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
+ persist="screenX screenY width height">
+
+<button id="button1" label="Button1" persist="value"/>
+<button id="button2" label="Button2" value="Normal" persist="value"/>
+<button id="button3" label="Button3" value="Normal" persist="hidden" hidden="true"/>
+
+<script>
+<![CDATA[
+
+const XULStore = Services.xulStore;
+let URI = "chrome://mochitests/content/chrome/toolkit/components/xulstore/tests/chrome/window_persistence.xhtml";
+
+function opened()
+{
+ runTest();
+}
+
+function runTest()
+{
+ var firstRun = window.arguments[0];
+ var button1 = document.getElementById("button1");
+ var button2 = document.getElementById("button2");
+ var button3 = document.getElementById("button3");
+ if (firstRun) {
+ button1.setAttribute("value", "Pressed");
+ button2.removeAttribute("value");
+
+ button2.setAttribute("foo", "bar");
+ XULStore.persist(button2, "foo");
+ is(XULStore.getValue(URI, "button2", "foo"), "bar", "attribute persisted");
+ button2.removeAttribute("foo");
+ XULStore.persist(button2, "foo");
+ is(XULStore.hasValue(URI, "button2", "foo"), false, "attribute removed");
+
+ button3.removeAttribute("hidden");
+
+ window.close();
+ window.arguments[1].windowOpened();
+ }
+ else {
+ is(button1.getAttribute("value"), "Pressed",
+ "Attribute set");
+ is(button2.hasAttribute("value"), false,
+ "Attribute cleared");
+ is(button2.hasAttribute("foo"), false,
+ "Attribute cleared");
+
+ is(button3.hasAttribute("hidden"), false,
+ "Attribute cleared");
+
+ window.close();
+ window.arguments[1].testDone();
+ }
+}
+
+function is(l, r, n) { window.arguments[1].SimpleTest.is(l,r,n); }
+
+]]></script>
+
+</window>
diff --git a/toolkit/components/xulstore/tests/xpcshell/test_XULStore.js b/toolkit/components/xulstore/tests/xpcshell/test_XULStore.js
new file mode 100644
index 0000000000..d100592e81
--- /dev/null
+++ b/toolkit/components/xulstore/tests/xpcshell/test_XULStore.js
@@ -0,0 +1,150 @@
+/* Any copyright is dedicated to the Public Domain.
+ http://creativecommons.org/publicdomain/zero/1.0/◦
+*/
+
+"use strict";
+
+var XULStore = null;
+var browserURI = "chrome://browser/content/browser.xhtml";
+var aboutURI = "about:config";
+
+function run_test() {
+ do_get_profile();
+ run_next_test();
+}
+
+function checkValue(uri, id, attr, reference) {
+ let value = XULStore.getValue(uri, id, attr);
+ Assert.equal(value, reference);
+}
+
+function checkValueExists(uri, id, attr, exists) {
+ Assert.equal(XULStore.hasValue(uri, id, attr), exists);
+}
+
+function getIDs(uri) {
+ return Array.from(XULStore.getIDsEnumerator(uri)).sort();
+}
+
+function getAttributes(uri, id) {
+ return Array.from(XULStore.getAttributeEnumerator(uri, id)).sort();
+}
+
+function checkArrays(a, b) {
+ a.sort();
+ b.sort();
+ Assert.equal(a.toString(), b.toString());
+}
+
+add_task(async function setup() {
+ // Set a value that a future test depends on manually
+ XULStore = Services.xulStore;
+ XULStore.setValue(browserURI, "main-window", "width", "994");
+});
+
+add_task(async function testTruncation() {
+ let dos = Array(8192).join("~");
+ // Long id names should trigger an exception
+ Assert.throws(
+ () => XULStore.setValue(browserURI, dos, "foo", "foo"),
+ /NS_ERROR_ILLEGAL_VALUE/
+ );
+
+ // Long attr names should trigger an exception
+ Assert.throws(
+ () => XULStore.setValue(browserURI, "foo", dos, "foo"),
+ /NS_ERROR_ILLEGAL_VALUE/
+ );
+
+ // Long values should be truncated
+ XULStore.setValue(browserURI, "dos", "dos", dos);
+ dos = XULStore.getValue(browserURI, "dos", "dos");
+ Assert.ok(dos.length == 4096);
+ XULStore.removeValue(browserURI, "dos", "dos");
+});
+
+add_task(async function testGetValue() {
+ // Get non-existing property
+ checkValue(browserURI, "side-window", "height", "");
+
+ // Get existing property
+ checkValue(browserURI, "main-window", "width", "994");
+});
+
+add_task(async function testHasValue() {
+ // Check non-existing property
+ checkValueExists(browserURI, "side-window", "height", false);
+
+ // Check existing property
+ checkValueExists(browserURI, "main-window", "width", true);
+});
+
+add_task(async function testSetValue() {
+ // Set new attribute
+ checkValue(browserURI, "side-bar", "width", "");
+ XULStore.setValue(browserURI, "side-bar", "width", "1000");
+ checkValue(browserURI, "side-bar", "width", "1000");
+ checkArrays(["main-window", "side-bar"], getIDs(browserURI));
+ checkArrays(["width"], getAttributes(browserURI, "side-bar"));
+
+ // Modify existing property
+ checkValue(browserURI, "side-bar", "width", "1000");
+ XULStore.setValue(browserURI, "side-bar", "width", "1024");
+ checkValue(browserURI, "side-bar", "width", "1024");
+ checkArrays(["main-window", "side-bar"], getIDs(browserURI));
+ checkArrays(["width"], getAttributes(browserURI, "side-bar"));
+
+ // Add another attribute
+ checkValue(browserURI, "side-bar", "height", "");
+ XULStore.setValue(browserURI, "side-bar", "height", "1000");
+ checkValue(browserURI, "side-bar", "height", "1000");
+ checkArrays(["main-window", "side-bar"], getIDs(browserURI));
+ checkArrays(["width", "height"], getAttributes(browserURI, "side-bar"));
+});
+
+add_task(async function testRemoveValue() {
+ // Remove first attribute
+ checkValue(browserURI, "side-bar", "width", "1024");
+ XULStore.removeValue(browserURI, "side-bar", "width");
+ checkValue(browserURI, "side-bar", "width", "");
+ checkValueExists(browserURI, "side-bar", "width", false);
+ checkArrays(["main-window", "side-bar"], getIDs(browserURI));
+ checkArrays(["height"], getAttributes(browserURI, "side-bar"));
+
+ // Remove second attribute
+ checkValue(browserURI, "side-bar", "height", "1000");
+ XULStore.removeValue(browserURI, "side-bar", "height");
+ checkValue(browserURI, "side-bar", "height", "");
+ checkArrays(["main-window"], getIDs(browserURI));
+
+ // Removing an attribute that doesn't exists shouldn't fail
+ XULStore.removeValue(browserURI, "main-window", "bar");
+
+ // Removing from an id that doesn't exists shouldn't fail
+ XULStore.removeValue(browserURI, "foo", "bar");
+
+ // Removing from a document that doesn't exists shouldn't fail
+ let nonDocURI = "chrome://example/content/other.xul";
+ XULStore.removeValue(nonDocURI, "foo", "bar");
+
+ // Remove all attributes in browserURI
+ XULStore.removeValue(browserURI, "addon-bar", "collapsed");
+ checkArrays([], getAttributes(browserURI, "addon-bar"));
+ XULStore.removeValue(browserURI, "main-window", "width");
+ XULStore.removeValue(browserURI, "main-window", "height");
+ XULStore.removeValue(browserURI, "main-window", "screenX");
+ XULStore.removeValue(browserURI, "main-window", "screenY");
+ XULStore.removeValue(browserURI, "main-window", "sizemode");
+ checkArrays([], getAttributes(browserURI, "main-window"));
+ XULStore.removeValue(browserURI, "sidebar-title", "value");
+ checkArrays([], getAttributes(browserURI, "sidebar-title"));
+ checkArrays([], getIDs(browserURI));
+
+ // Remove all attributes in aboutURI
+ XULStore.removeValue(aboutURI, "prefCol", "ordinal");
+ XULStore.removeValue(aboutURI, "prefCol", "sortDirection");
+ checkArrays([], getAttributes(aboutURI, "prefCol"));
+ XULStore.removeValue(aboutURI, "lockCol", "ordinal");
+ checkArrays([], getAttributes(aboutURI, "lockCol"));
+ checkArrays([], getIDs(aboutURI));
+});
diff --git a/toolkit/components/xulstore/tests/xpcshell/xpcshell.ini b/toolkit/components/xulstore/tests/xpcshell/xpcshell.ini
new file mode 100644
index 0000000000..accfb1c95b
--- /dev/null
+++ b/toolkit/components/xulstore/tests/xpcshell/xpcshell.ini
@@ -0,0 +1,4 @@
+[DEFAULT]
+skip-if = toolkit == 'android'
+
+[test_XULStore.js]