@@ -188,3 +188,60 @@ require('./helpers/add-event-compat-test');
188188require ( './helpers/add-event-jquery-test' ) ;
189189require ( './helpers/add-jquery-events-test' ) ;
190190require ( './helpers/util-test' ) ;
191+
192+ unit . test ( 'domEvents.addDelegateListener call inner-most handler first (#62)' , function ( assert ) {
193+ var done = assert . async ( ) ;
194+ var grandparent = document . createElement ( 'div' ) ;
195+ var parent = document . createElement ( 'p' ) ;
196+ var child = document . createElement ( 'input' ) ;
197+
198+ grandparent . appendChild ( parent ) ;
199+ parent . appendChild ( child ) ;
200+
201+ var handlerCallCount = 0 ;
202+
203+ var paragraphClickHandler = function paragraphClickHandler ( ) {
204+ domEvents . removeDelegateListener ( grandparent , 'click' , 'p' , paragraphClickHandler ) ;
205+ assert . equal ( ++ handlerCallCount , 2 , 'outer handler called second' ) ;
206+ } ;
207+
208+ var inputClickHandler = function inputClickHandler ( ) {
209+ domEvents . removeDelegateListener ( grandparent , 'click' , 'input' , inputClickHandler ) ;
210+ assert . equal ( ++ handlerCallCount , 1 , 'inner handler called first' ) ;
211+ } ;
212+
213+ domEvents . addDelegateListener ( grandparent , 'click' , 'p' , paragraphClickHandler ) ;
214+ domEvents . addDelegateListener ( grandparent , 'click' , 'input' , inputClickHandler ) ;
215+
216+ domEvents . dispatch ( child , 'click' ) ;
217+ done ( ) ;
218+ } ) ;
219+
220+ [ 'stopPropagation' , 'stopImmediatePropagation' ] . forEach ( function ( stopMethod ) {
221+ unit . test ( 'domEvents.addDelegateListener should have a working ev.' + stopMethod + ' (#62)' , function ( assert ) {
222+ var done = assert . async ( ) ;
223+ var grandparent = document . createElement ( 'div' ) ;
224+ var parent = document . createElement ( 'p' ) ;
225+ var child = document . createElement ( 'input' ) ;
226+
227+ grandparent . appendChild ( parent ) ;
228+ parent . appendChild ( child ) ;
229+
230+ var paragraphClickHandler = function paragraphClickHandler ( ) {
231+ domEvents . removeDelegateListener ( grandparent , 'click' , 'p' , paragraphClickHandler ) ;
232+ assert . ok ( false , 'ev.stopPropagation works' ) ;
233+ } ;
234+
235+ var inputClickHandler = function inputClickHandler ( event ) {
236+ event [ stopMethod ] ( ) ;
237+ domEvents . removeDelegateListener ( grandparent , 'click' , 'input' , inputClickHandler ) ;
238+ assert . ok ( true , 'inner-most click handler called first' ) ;
239+ } ;
240+
241+ domEvents . addDelegateListener ( grandparent , 'click' , 'p' , paragraphClickHandler ) ;
242+ domEvents . addDelegateListener ( grandparent , 'click' , 'input' , inputClickHandler ) ;
243+
244+ domEvents . dispatch ( child , 'click' ) ;
245+ done ( ) ;
246+ } ) ;
247+ } ) ;
0 commit comments