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