From 937caab6475e53a7ea0206e992f8a52449232e78 Mon Sep 17 00:00:00 2001 From: Matias Niemelä Date: Thu, 28 Nov 2013 01:10:28 -0500 Subject: feat(jqLite): provide support for element.one() --- test/jqLiteSpec.js | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'test') diff --git a/test/jqLiteSpec.js b/test/jqLiteSpec.js index 3a8fd404..931f9b2e 100644 --- a/test/jqLiteSpec.js +++ b/test/jqLiteSpec.js @@ -1177,6 +1177,63 @@ describe('jqLite', function() { } }); + describe('one', function() { + + it('should only fire the callback once', function() { + var element = jqLite(a); + var spy = jasmine.createSpy('click'); + + element.one('click', spy); + + browserTrigger(element, 'click'); + expect(spy).toHaveBeenCalledOnce(); + + browserTrigger(element, 'click'); + expect(spy).toHaveBeenCalledOnce(); + }); + + it('should deregister when off is called', function() { + var element = jqLite(a); + var spy = jasmine.createSpy('click'); + + element.one('click', spy); + element.off('click', spy); + + browserTrigger(element, 'click'); + expect(spy).not.toHaveBeenCalled(); + }); + + it('should return the same event object just as on() does', function() { + var element = jqLite(a); + var eventA, eventB; + element.on('click', function(event) { + eventA = event; + }); + element.one('click', function(event) { + eventB = event; + }); + + browserTrigger(element, 'click'); + expect(eventA).toEqual(eventB); + }); + + it('should not remove other event handlers of the same type after execution', function() { + var element = jqLite(a); + var calls = []; + element.one('click', function(event) { + calls.push('one'); + }); + element.on('click', function(event) { + calls.push('on'); + }); + + browserTrigger(element, 'click'); + browserTrigger(element, 'click'); + + expect(calls).toEqual(['one','on','on']); + }); + }); + describe('replaceWith', function() { it('should replaceWith', function() { -- cgit v1.2.3