Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
*/
"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
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));
});