michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: * http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: Cu.import("resource://services-common/storageservice.js"); michael@0: michael@0: function run_test() { michael@0: initTestLogging("Trace"); michael@0: michael@0: run_next_test(); michael@0: } michael@0: michael@0: add_test(function test_bso_constructor() { michael@0: _("Ensure created BSO instances are initialized properly."); michael@0: michael@0: let bso = new BasicStorageObject(); michael@0: do_check_eq(bso.id, null); michael@0: do_check_eq(bso.collection, null); michael@0: do_check_attribute_count(bso.data, 0); michael@0: do_check_eq(bso.payload, null); michael@0: do_check_eq(bso.modified, null); michael@0: do_check_eq(bso.sortindex, 0); michael@0: do_check_eq(bso.ttl, null); michael@0: michael@0: let bso = new BasicStorageObject("foobar"); michael@0: do_check_eq(bso.id, "foobar"); michael@0: do_check_eq(bso.collection, null); michael@0: do_check_attribute_count(bso.data, 0); michael@0: michael@0: let bso = new BasicStorageObject("foo", "coll"); michael@0: do_check_eq(bso.id, "foo"); michael@0: do_check_eq(bso.collection, "coll"); michael@0: do_check_attribute_count(bso.data, 0); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_bso_attributes() { michael@0: _("Ensure attribute getters and setters work."); michael@0: michael@0: let bso = new BasicStorageObject("foobar"); michael@0: bso.payload = "pay"; michael@0: do_check_eq(bso.payload, "pay"); michael@0: michael@0: bso.modified = 35423; michael@0: do_check_eq(bso.modified, 35423); michael@0: michael@0: bso.sortindex = 10; michael@0: do_check_eq(bso.sortindex, 10); michael@0: michael@0: bso.ttl = 60; michael@0: do_check_eq(bso.ttl, 60); michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_bso_deserialize() { michael@0: _("Ensure that deserialize() works."); michael@0: michael@0: _("A simple working test."); michael@0: let json = '{"id": "foobar", "payload": "pay", "modified": 1223145532}'; michael@0: let bso = new BasicStorageObject(); michael@0: bso.deserialize(json); michael@0: do_check_neq(bso, null); michael@0: do_check_eq(bso.id, "foobar"); michael@0: do_check_eq(bso.payload, "pay"); michael@0: do_check_eq(bso.modified, 1223145532); michael@0: michael@0: _("Invalid JSON."); michael@0: let json = '{id: "foobar}'; michael@0: let bso = new BasicStorageObject(); michael@0: try { michael@0: bso.deserialize(json); michael@0: do_check_true(false); michael@0: } catch (ex) { michael@0: do_check_eq(ex.name, "SyntaxError"); michael@0: } michael@0: michael@0: _("Invalid key in JSON."); michael@0: let json = '{"id": "foo", "payload": "pay", "BADKEY": "irrelevant"}'; michael@0: let bso = new BasicStorageObject(); michael@0: try { michael@0: bso.deserialize(json); michael@0: do_check_true(false); michael@0: } catch (ex) { michael@0: do_check_eq(ex.name, "Error"); michael@0: do_check_eq(ex.message.indexOf("Invalid key"), 0); michael@0: } michael@0: michael@0: _("Loading native JS objects works."); michael@0: let bso = new BasicStorageObject(); michael@0: bso.deserialize({id: "foo", payload: "pay"}); michael@0: do_check_neq(bso, null); michael@0: do_check_eq(bso.id, "foo"); michael@0: do_check_eq(bso.payload, "pay"); michael@0: michael@0: _("Passing invalid type is caught."); michael@0: let bso = new BasicStorageObject(); michael@0: try { michael@0: bso.deserialize(["foo", "bar"]); michael@0: do_check_true(false); michael@0: } catch (ex) { michael@0: do_check_eq(ex.name, "Error"); michael@0: } michael@0: michael@0: run_next_test(); michael@0: }); michael@0: michael@0: add_test(function test_bso_toJSON() { michael@0: _("Ensure JSON serialization works."); michael@0: michael@0: let bso = new BasicStorageObject(); michael@0: do_check_attribute_count(bso.toJSON(), 0); michael@0: michael@0: bso.id = "foo"; michael@0: bso.payload = "pay"; michael@0: let json = bso.toJSON(); michael@0: let original = json; michael@0: michael@0: do_check_attribute_count(original, 2); michael@0: do_check_eq(original.id, "foo"); michael@0: do_check_eq(original.payload, "pay"); michael@0: michael@0: run_next_test(); michael@0: });