|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 Cu.import("resource://gre/modules/FileUtils.jsm"); |
|
5 Cu.import("resource://services-sync/util.js"); |
|
6 |
|
7 function run_test() { |
|
8 initTestLogging(); |
|
9 run_next_test(); |
|
10 } |
|
11 |
|
12 add_test(function test_roundtrip() { |
|
13 _("Do a simple write of an array to json and read"); |
|
14 Utils.jsonSave("foo", {}, ["v1", "v2"], ensureThrows(function(error) { |
|
15 do_check_eq(error, null); |
|
16 |
|
17 Utils.jsonLoad("foo", {}, ensureThrows(function(val) { |
|
18 let foo = val; |
|
19 do_check_eq(typeof foo, "object"); |
|
20 do_check_eq(foo.length, 2); |
|
21 do_check_eq(foo[0], "v1"); |
|
22 do_check_eq(foo[1], "v2"); |
|
23 run_next_test(); |
|
24 })); |
|
25 })); |
|
26 }); |
|
27 |
|
28 add_test(function test_string() { |
|
29 _("Try saving simple strings"); |
|
30 Utils.jsonSave("str", {}, "hi", ensureThrows(function(error) { |
|
31 do_check_eq(error, null); |
|
32 |
|
33 Utils.jsonLoad("str", {}, ensureThrows(function(val) { |
|
34 let str = val; |
|
35 do_check_eq(typeof str, "string"); |
|
36 do_check_eq(str.length, 2); |
|
37 do_check_eq(str[0], "h"); |
|
38 do_check_eq(str[1], "i"); |
|
39 run_next_test(); |
|
40 })); |
|
41 })); |
|
42 }); |
|
43 |
|
44 add_test(function test_number() { |
|
45 _("Try saving a number"); |
|
46 Utils.jsonSave("num", {}, 42, ensureThrows(function(error) { |
|
47 do_check_eq(error, null); |
|
48 |
|
49 Utils.jsonLoad("num", {}, ensureThrows(function(val) { |
|
50 let num = val; |
|
51 do_check_eq(typeof num, "number"); |
|
52 do_check_eq(num, 42); |
|
53 run_next_test(); |
|
54 })); |
|
55 })); |
|
56 }); |
|
57 |
|
58 add_test(function test_nonexistent_file() { |
|
59 _("Try loading a non-existent file."); |
|
60 Utils.jsonLoad("non-existent", {}, ensureThrows(function(val) { |
|
61 do_check_eq(val, undefined); |
|
62 run_next_test(); |
|
63 })); |
|
64 }); |
|
65 |
|
66 add_test(function test_save_logging() { |
|
67 _("Verify that writes are logged."); |
|
68 let trace; |
|
69 Utils.jsonSave("log", {_log: {trace: function(msg) { trace = msg; }}}, |
|
70 "hi", ensureThrows(function () { |
|
71 do_check_true(!!trace); |
|
72 run_next_test(); |
|
73 })); |
|
74 }); |
|
75 |
|
76 add_test(function test_load_logging() { |
|
77 _("Verify that reads and read errors are logged."); |
|
78 |
|
79 // Write a file with some invalid JSON |
|
80 let filePath = "weave/log.json"; |
|
81 let file = FileUtils.getFile("ProfD", filePath.split("/"), true); |
|
82 let fos = Cc["@mozilla.org/network/file-output-stream;1"] |
|
83 .createInstance(Ci.nsIFileOutputStream); |
|
84 let flags = FileUtils.MODE_WRONLY | FileUtils.MODE_CREATE |
|
85 | FileUtils.MODE_TRUNCATE; |
|
86 fos.init(file, flags, FileUtils.PERMS_FILE, fos.DEFER_OPEN); |
|
87 let stream = Cc["@mozilla.org/intl/converter-output-stream;1"] |
|
88 .createInstance(Ci.nsIConverterOutputStream); |
|
89 stream.init(fos, "UTF-8", 4096, 0x0000); |
|
90 stream.writeString("invalid json!"); |
|
91 stream.close(); |
|
92 |
|
93 let trace, debug; |
|
94 let obj = { |
|
95 _log: { |
|
96 trace: function(msg) { |
|
97 trace = msg; |
|
98 }, |
|
99 debug: function(msg) { |
|
100 debug = msg; |
|
101 } |
|
102 } |
|
103 }; |
|
104 Utils.jsonLoad("log", obj, ensureThrows(function(val) { |
|
105 do_check_true(!val); |
|
106 do_check_true(!!trace); |
|
107 do_check_true(!!debug); |
|
108 run_next_test(); |
|
109 })); |
|
110 }); |
|
111 |
|
112 add_task(function* test_undefined_callback() { |
|
113 yield Utils.jsonSave("foo", {}, ["v1", "v2"]); |
|
114 }); |