aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unit_tests/handler_stack_test.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'tests/unit_tests/handler_stack_test.coffee')
-rw-r--r--tests/unit_tests/handler_stack_test.coffee52
1 files changed, 52 insertions, 0 deletions
diff --git a/tests/unit_tests/handler_stack_test.coffee b/tests/unit_tests/handler_stack_test.coffee
new file mode 100644
index 00000000..0ed8f4c0
--- /dev/null
+++ b/tests/unit_tests/handler_stack_test.coffee
@@ -0,0 +1,52 @@
+require "./test_helper.js"
+extend(global, require "../../lib/handler_stack.js")
+
+context "handlerStack",
+ setup ->
+ stub global, "DomUtils", {}
+ stub DomUtils, "suppressEvent", ->
+ @handlerStack = new HandlerStack
+ @handler1Called = false
+ @handler2Called = false
+
+ should "bubble events", ->
+ @handlerStack.push { keydown: => @handler1Called = true }
+ @handlerStack.push { keydown: => @handler2Called = true }
+ @handlerStack.bubbleEvent 'keydown', {}
+ assert.isTrue @handler2Called
+ assert.isTrue @handler1Called
+
+ should "terminate bubbling on falsy return value", ->
+ @handlerStack.push { keydown: => @handler1Called = true }
+ @handlerStack.push { keydown: => @handler2Called = true; false }
+ @handlerStack.bubbleEvent 'keydown', {}
+ assert.isTrue @handler2Called
+ assert.isFalse @handler1Called
+
+ should "remove handlers correctly", ->
+ @handlerStack.push { keydown: => @handler1Called = true }
+ handlerId = @handlerStack.push { keydown: => @handler2Called = true }
+ @handlerStack.remove handlerId
+ @handlerStack.bubbleEvent 'keydown', {}
+ assert.isFalse @handler2Called
+ assert.isTrue @handler1Called
+
+ should "remove handlers correctly", ->
+ handlerId = @handlerStack.push { keydown: => @handler1Called = true }
+ @handlerStack.push { keydown: => @handler2Called = true }
+ @handlerStack.remove handlerId
+ @handlerStack.bubbleEvent 'keydown', {}
+ assert.isTrue @handler2Called
+ assert.isFalse @handler1Called
+
+ should "handle self-removing handlers correctly", ->
+ ctx = @
+ @handlerStack.push { keydown: => @handler1Called = true }
+ @handlerStack.push { keydown: ->
+ ctx.handler2Called = true
+ @remove()
+ }
+ @handlerStack.bubbleEvent 'keydown', {}
+ assert.isTrue @handler2Called
+ assert.isTrue @handler1Called
+ assert.equal @handlerStack.stack.length, 1