|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ */ |
|
3 |
|
4 Cu.import("resource://services-common/storageservice.js"); |
|
5 |
|
6 function run_test() { |
|
7 initTestLogging("Trace"); |
|
8 |
|
9 run_next_test(); |
|
10 } |
|
11 |
|
12 add_test(function test_bso_constructor() { |
|
13 _("Ensure created BSO instances are initialized properly."); |
|
14 |
|
15 let bso = new BasicStorageObject(); |
|
16 do_check_eq(bso.id, null); |
|
17 do_check_eq(bso.collection, null); |
|
18 do_check_attribute_count(bso.data, 0); |
|
19 do_check_eq(bso.payload, null); |
|
20 do_check_eq(bso.modified, null); |
|
21 do_check_eq(bso.sortindex, 0); |
|
22 do_check_eq(bso.ttl, null); |
|
23 |
|
24 let bso = new BasicStorageObject("foobar"); |
|
25 do_check_eq(bso.id, "foobar"); |
|
26 do_check_eq(bso.collection, null); |
|
27 do_check_attribute_count(bso.data, 0); |
|
28 |
|
29 let bso = new BasicStorageObject("foo", "coll"); |
|
30 do_check_eq(bso.id, "foo"); |
|
31 do_check_eq(bso.collection, "coll"); |
|
32 do_check_attribute_count(bso.data, 0); |
|
33 |
|
34 run_next_test(); |
|
35 }); |
|
36 |
|
37 add_test(function test_bso_attributes() { |
|
38 _("Ensure attribute getters and setters work."); |
|
39 |
|
40 let bso = new BasicStorageObject("foobar"); |
|
41 bso.payload = "pay"; |
|
42 do_check_eq(bso.payload, "pay"); |
|
43 |
|
44 bso.modified = 35423; |
|
45 do_check_eq(bso.modified, 35423); |
|
46 |
|
47 bso.sortindex = 10; |
|
48 do_check_eq(bso.sortindex, 10); |
|
49 |
|
50 bso.ttl = 60; |
|
51 do_check_eq(bso.ttl, 60); |
|
52 |
|
53 run_next_test(); |
|
54 }); |
|
55 |
|
56 add_test(function test_bso_deserialize() { |
|
57 _("Ensure that deserialize() works."); |
|
58 |
|
59 _("A simple working test."); |
|
60 let json = '{"id": "foobar", "payload": "pay", "modified": 1223145532}'; |
|
61 let bso = new BasicStorageObject(); |
|
62 bso.deserialize(json); |
|
63 do_check_neq(bso, null); |
|
64 do_check_eq(bso.id, "foobar"); |
|
65 do_check_eq(bso.payload, "pay"); |
|
66 do_check_eq(bso.modified, 1223145532); |
|
67 |
|
68 _("Invalid JSON."); |
|
69 let json = '{id: "foobar}'; |
|
70 let bso = new BasicStorageObject(); |
|
71 try { |
|
72 bso.deserialize(json); |
|
73 do_check_true(false); |
|
74 } catch (ex) { |
|
75 do_check_eq(ex.name, "SyntaxError"); |
|
76 } |
|
77 |
|
78 _("Invalid key in JSON."); |
|
79 let json = '{"id": "foo", "payload": "pay", "BADKEY": "irrelevant"}'; |
|
80 let bso = new BasicStorageObject(); |
|
81 try { |
|
82 bso.deserialize(json); |
|
83 do_check_true(false); |
|
84 } catch (ex) { |
|
85 do_check_eq(ex.name, "Error"); |
|
86 do_check_eq(ex.message.indexOf("Invalid key"), 0); |
|
87 } |
|
88 |
|
89 _("Loading native JS objects works."); |
|
90 let bso = new BasicStorageObject(); |
|
91 bso.deserialize({id: "foo", payload: "pay"}); |
|
92 do_check_neq(bso, null); |
|
93 do_check_eq(bso.id, "foo"); |
|
94 do_check_eq(bso.payload, "pay"); |
|
95 |
|
96 _("Passing invalid type is caught."); |
|
97 let bso = new BasicStorageObject(); |
|
98 try { |
|
99 bso.deserialize(["foo", "bar"]); |
|
100 do_check_true(false); |
|
101 } catch (ex) { |
|
102 do_check_eq(ex.name, "Error"); |
|
103 } |
|
104 |
|
105 run_next_test(); |
|
106 }); |
|
107 |
|
108 add_test(function test_bso_toJSON() { |
|
109 _("Ensure JSON serialization works."); |
|
110 |
|
111 let bso = new BasicStorageObject(); |
|
112 do_check_attribute_count(bso.toJSON(), 0); |
|
113 |
|
114 bso.id = "foo"; |
|
115 bso.payload = "pay"; |
|
116 let json = bso.toJSON(); |
|
117 let original = json; |
|
118 |
|
119 do_check_attribute_count(original, 2); |
|
120 do_check_eq(original.id, "foo"); |
|
121 do_check_eq(original.payload, "pay"); |
|
122 |
|
123 run_next_test(); |
|
124 }); |