1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/services/sync/tests/unit/test_utils_deferGetSet.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,45 @@ 1.4 +_("Make sure various combinations of deferGetSet arguments correctly defer getting/setting properties to another object"); 1.5 +Cu.import("resource://services-sync/util.js"); 1.6 + 1.7 +function run_test() { 1.8 + let base = function() {}; 1.9 + base.prototype = { 1.10 + dst: {}, 1.11 + 1.12 + get a() "a", 1.13 + set b(val) this.dst.b = val + "!!!" 1.14 + }; 1.15 + let src = new base(); 1.16 + 1.17 + _("get/set a single property"); 1.18 + Utils.deferGetSet(base, "dst", "foo"); 1.19 + src.foo = "bar"; 1.20 + do_check_eq(src.dst.foo, "bar"); 1.21 + do_check_eq(src.foo, "bar"); 1.22 + 1.23 + _("editing the target also updates the source"); 1.24 + src.dst.foo = "baz"; 1.25 + do_check_eq(src.dst.foo, "baz"); 1.26 + do_check_eq(src.foo, "baz"); 1.27 + 1.28 + _("handle multiple properties"); 1.29 + Utils.deferGetSet(base, "dst", ["p1", "p2"]); 1.30 + src.p1 = "v1"; 1.31 + src.p2 = "v2"; 1.32 + do_check_eq(src.p1, "v1"); 1.33 + do_check_eq(src.dst.p1, "v1"); 1.34 + do_check_eq(src.p2, "v2"); 1.35 + do_check_eq(src.dst.p2, "v2"); 1.36 + 1.37 + _("make sure existing getter keeps its functionality"); 1.38 + Utils.deferGetSet(base, "dst", "a"); 1.39 + src.a = "not a"; 1.40 + do_check_eq(src.dst.a, "not a"); 1.41 + do_check_eq(src.a, "a"); 1.42 + 1.43 + _("make sure existing setter keeps its functionality"); 1.44 + Utils.deferGetSet(base, "dst", "b"); 1.45 + src.b = "b"; 1.46 + do_check_eq(src.dst.b, "b!!!"); 1.47 + do_check_eq(src.b, "b!!!"); 1.48 +}