From 646e37dc371cd7b73ff2855a228e498e1d530f3f Mon Sep 17 00:00:00 2001 From: Geoff Schmidt Date: Thu, 2 Aug 2012 21:13:32 -0700 Subject: [PATCH] test that landmarks properly update callbacks --- packages/spark/spark_tests.js | 86 +++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 39 deletions(-) diff --git a/packages/spark/spark_tests.js b/packages/spark/spark_tests.js index 0b2a2944c8..3261d9d213 100644 --- a/packages/spark/spark_tests.js +++ b/packages/spark/spark_tests.js @@ -1,4 +1,5 @@ // XXX make sure that when tests use id="..." to trigger patching, "preserve" happens +// XXX test that events inside constant regions still work after patching Spark._checkIECompliance = true; @@ -1025,9 +1026,12 @@ Tinytest.add("spark - labeled landmarks", function (test) { R.push(ReactiveVar("")); var x = []; - var expect = function (what) { - test.equal(x, what); + var s = []; + var expect = function (what_x, what_s) { + test.equal(x, what_x); + test.equal(s, what_s); x = []; + s = []; }; var excludeLandmarks = []; @@ -1035,27 +1039,33 @@ Tinytest.add("spark - labeled landmarks", function (test) { excludeLandmarks.push(ReactiveVar(false)); var isolateLandmarks = ReactiveVar(false); + var serial = 1; var testLandmark = function (id, htmlFunc) { + if (excludeLandmarks[id].get()) + return ""; + var f = function () { + var thisSerial = serial++; + return Spark.createLandmark({ create: function () { x.push("c", id); + s.push(thisSerial); this.id = id; }, render: function () { x.push("r", id); + s.push(thisSerial); test.equal(this.id, id); }, destroy: function () { x.push("d", id); + s.push(thisSerial); test.equal(this.id, id); } }, htmlFunc()); }; - if (excludeLandmarks[id].get()) - return ""; - if (isolateLandmarks.get()) return Spark.isolate(function () { return f(); }); else @@ -1083,79 +1093,77 @@ Tinytest.add("spark - labeled landmarks", function (test) { }); })); - expect([]); + expect([], []); Meteor.flush(); - expect(["c", 1, "r", 1, - "c", 2, "r", 2, - "c", 3, "r", 3, - "c", 4, "r", 4, - "c", 5, "r", 5]); + expect(["c", 1, "r", 1, "c", 2, "r", 2, "c", 3, "r", 3, + "c", 4, "r", 4, "c", 5, "r", 5], + [1, 1, 2, 2, 3, 3, 4, 4, 5, 5]); for (var i = 0; i < 10; i++) { R[i].set(1); - expect([]); + expect([], []); Meteor.flush(); - expect(["r", 1, "r", 2, "r", 3, "r", 4, "r", 5]); + expect(["r", 1, "r", 2, "r", 3, "r", 4, "r", 5], + [i*5 + 6, i*5 + 7, i*5 + 8, i*5 + 9, i*5 + 10]); }; excludeLandmarks[2].set(true); Meteor.flush(); - expect(["d", 2, "r", 1, "r", 3, "r", 4, "r", 5]); + expect(["d", 2, "r", 1, "r", 3, "r", 4, "r", 5], + [52, 56, 57, 58, 59]); excludeLandmarks[2].set(false); excludeLandmarks[3].set(true); Meteor.flush(); - expect(["d", 3, "d", 4, "d", 5, "r", 1, "c", 2, "r", 2]); + expect(["d", 3, "d", 4, "d", 5, "r", 1, "c", 2, "r", 2], + [57, 58, 59, 60, 61, 61]); excludeLandmarks[2].set(true); excludeLandmarks[3].set(false); Meteor.flush(); - expect(["d", 2, "r", 1, "c", 3, "r", 3, "c", 4, "r", 4, "c", 5, "r", 5]); + expect(["d", 2, "r", 1, "c", 3, "r", 3, "c", 4, "r", 4, "c", 5, "r", 5], + [61, 62, 63, 63, 64, 64, 65, 65]); excludeLandmarks[2].set(false); Meteor.flush(); - expect(["r", 1, "c", 2, "r", 2, "r", 3, "r", 4, "r", 5]); + expect(["r", 1, "c", 2, "r", 2, "r", 3, "r", 4, "r", 5], + [66, 67, 67, 68, 69, 70]); isolateLandmarks.set(true); Meteor.flush(); - expect(["r", 1, "r", 2, "r", 3, "r", 4, "r", 5]); + expect(["r", 1, "r", 2, "r", 3, "r", 4, "r", 5], + [71, 72, 73, 74, 75]); for (var i = 0; i < 10; i++) { var expected = [ - ["r", 1, "r", 2, "r", 3, "r", 4, "r", 5], - ["r", 1], - ["r", 1, "r", 2, "r", 3, "r", 4, "r", 5], - ["r", 2], - ["r", 1, "r", 2, "r", 3, "r", 4, "r", 5], - ["r", 3, "r", 4, "r", 5], - ["r", 3, "r", 4, "r", 5], - ["r", 4, "r", 5], - ["r", 4, "r", 5], - ["r", 5] + [["r", 1, "r", 2, "r", 3, "r", 4, "r", 5], [76, 77, 78, 79, 80]], + [["r", 1], [81]], + [["r", 1, "r", 2, "r", 3, "r", 4, "r", 5], [82, 83, 84, 85, 86]], + [["r", 2], [87]], + [["r", 1, "r", 2, "r", 3, "r", 4, "r", 5], [88, 89, 90, 91, 92]], + [["r", 3, "r", 4, "r", 5], [93, 94, 95]], + [["r", 3, "r", 4, "r", 5], [96, 97, 98]], + [["r", 4, "r", 5], [99, 100]], + [["r", 4, "r", 5], [101, 102]], + [["r", 5], [103]] ][i]; R[i].set(2); - expect([]); + expect([], []); Meteor.flush(); - expect(expected); + expect.apply(null, expected); }; excludeLandmarks[4].set(true); Meteor.flush(); - expect(["d", 4, "d", 5, "r", 3]); + expect(["d", 4, "d", 5, "r", 3], [101, 103, 104]); excludeLandmarks[4].set(false); excludeLandmarks[5].set(true); Meteor.flush(); - expect(["r", 3, "c", 4, "r", 4]); + expect(["r", 3, "c", 4, "r", 4], [105, 106, 106]); excludeLandmarks[5].set(false); Meteor.flush(); - expect(["r", 4, "c", 5, "r", 5]); - - - - - // XXX test that callbacks are replaced each time - + expect(["r", 4, "c", 5, "r", 5], [107, 108, 108]); }); var legacyLabels = {