95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
const { FileUtils } = ChromeUtils.importESModule(
|
|
"resource://gre/modules/FileUtils.sys.mjs"
|
|
);
|
|
|
|
add_task(async function test_roundtrip() {
|
|
_("Do a simple write of an array to json and read");
|
|
await Utils.jsonSave("foo", {}, ["v1", "v2"]);
|
|
|
|
let foo = await Utils.jsonLoad("foo", {});
|
|
Assert.equal(typeof foo, "object");
|
|
Assert.equal(foo.length, 2);
|
|
Assert.equal(foo[0], "v1");
|
|
Assert.equal(foo[1], "v2");
|
|
});
|
|
|
|
add_task(async function test_string() {
|
|
_("Try saving simple strings");
|
|
await Utils.jsonSave("str", {}, "hi");
|
|
|
|
let str = await Utils.jsonLoad("str", {});
|
|
Assert.equal(typeof str, "string");
|
|
Assert.equal(str.length, 2);
|
|
Assert.equal(str[0], "h");
|
|
Assert.equal(str[1], "i");
|
|
});
|
|
|
|
add_task(async function test_number() {
|
|
_("Try saving a number");
|
|
await Utils.jsonSave("num", {}, 42);
|
|
|
|
let num = await Utils.jsonLoad("num", {});
|
|
Assert.equal(typeof num, "number");
|
|
Assert.equal(num, 42);
|
|
});
|
|
|
|
add_task(async function test_nonexistent_file() {
|
|
_("Try loading a non-existent file.");
|
|
let val = await Utils.jsonLoad("non-existent", {});
|
|
Assert.equal(val, undefined);
|
|
});
|
|
|
|
add_task(async function test_save_logging() {
|
|
_("Verify that writes are logged.");
|
|
let trace;
|
|
await Utils.jsonSave(
|
|
"log",
|
|
{
|
|
_log: {
|
|
trace(msg) {
|
|
trace = msg;
|
|
},
|
|
},
|
|
},
|
|
"hi"
|
|
);
|
|
Assert.ok(!!trace);
|
|
});
|
|
|
|
add_task(async function test_load_logging() {
|
|
_("Verify that reads and read errors are logged.");
|
|
|
|
// Write a file with some invalid JSON
|
|
let file = await IOUtils.getFile(PathUtils.profileDir, "weave", "log.json");
|
|
let fos = Cc["@mozilla.org/network/file-output-stream;1"].createInstance(
|
|
Ci.nsIFileOutputStream
|
|
);
|
|
let flags =
|
|
FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE | FileUtils.MODE_TRUNCATE;
|
|
fos.init(file, flags, FileUtils.PERMS_FILE, fos.DEFER_OPEN);
|
|
let stream = Cc["@mozilla.org/intl/converter-output-stream;1"].createInstance(
|
|
Ci.nsIConverterOutputStream
|
|
);
|
|
stream.init(fos, "UTF-8");
|
|
stream.writeString("invalid json!");
|
|
stream.close();
|
|
|
|
let trace, debug;
|
|
let obj = {
|
|
_log: {
|
|
trace(msg) {
|
|
trace = msg;
|
|
},
|
|
debug(msg) {
|
|
debug = msg;
|
|
},
|
|
},
|
|
};
|
|
let val = await Utils.jsonLoad("log", obj);
|
|
Assert.ok(!val);
|
|
Assert.ok(!!trace);
|
|
Assert.ok(!!debug);
|
|
});
|