diff --git a/packages/spacebars-tests/template_tests.html b/packages/spacebars-tests/template_tests.html index c8ed3068aa..3231ac29b0 100644 --- a/packages/spacebars-tests/template_tests.html +++ b/packages/spacebars-tests/template_tests.html @@ -1027,3 +1027,11 @@ Hi there! + + diff --git a/packages/spacebars-tests/template_tests.js b/packages/spacebars-tests/template_tests.js index 76cafdf73e..e409fc0a3c 100644 --- a/packages/spacebars-tests/template_tests.js +++ b/packages/spacebars-tests/template_tests.js @@ -10,7 +10,20 @@ var nodesToArray = function (array) { return _.map(array, _.identity); }; +var inDocument = function (elem) { + while ((elem = elem.parentNode)) { + if (elem == document) { + return true; + } + } + return false; +}; + + var clickIt = function (elem) { + if (!inDocument(elem)) + throw new Error("Can't click on elements without first adding them to the document"); + // jQuery's bubbling change event polyfill for IE 8 seems // to require that the element in question have focus when // it receives a simulated click. @@ -3084,3 +3097,42 @@ Tinytest.add("spacebars-tests - template_tests - custom block helper doesn't bre var div = renderToDiv(tmpl); test.equal(canonicalizeHtml(div.innerHTML), "hello hello"); }); + +Tinytest.add( + "spacebars-tests - template_tests - currentData and parentData in event handlers", + function (test) { + var tmpl = Template.spacebars_template_test_currentData_and_parentData_in_events; + + var clicked = false; + var currentInEvent; + var parentInEvent; + var currentInHelper; + var parentInHelper; + + tmpl.events({ + 'click button': function () { + currentInEvent = Template.currentData(); + parentInEvent = Template.parentData(1); + } + }); + + tmpl.helpers({ + label: function () { + currentInHelper = Template.currentData(); + parentInHelper = Template.parentData(1); + } + }); + + var div = renderToDiv(tmpl); + var button = div.querySelector('button'); + document.body.appendChild(div); + + clickIt(button); + + test.equal(currentInEvent, {y: 2}); + test.equal(parentInEvent, {x: 1}); + test.equal(currentInHelper, {y: 2}); + test.equal(parentInHelper, {x: 1}); + + document.body.removeChild(div); + });