diff options
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/dom_tests/dom_tests.coffee | 4 | ||||
| -rw-r--r-- | tests/dom_tests/dom_tests.html | 1 | ||||
| -rw-r--r-- | tests/unit_tests/handler_stack_test.coffee | 52 | 
3 files changed, 55 insertions, 2 deletions
| diff --git a/tests/dom_tests/dom_tests.coffee b/tests/dom_tests/dom_tests.coffee index 3d981ee5..a0254acf 100644 --- a/tests/dom_tests/dom_tests.coffee +++ b/tests/dom_tests/dom_tests.coffee @@ -177,11 +177,11 @@ context "Input focus",      focusInput 1      assert.equal "first", document.activeElement.id      # deactivate the tabbing mode and its overlays -    handlerStack[handlerStack.length - 1].keydown mockKeyboardEvent("A") +    handlerStack.bubbleEvent 'keydown', mockKeyboardEvent("A")      focusInput 100      assert.equal "third", document.activeElement.id -    handlerStack[handlerStack.length - 1].keydown mockKeyboardEvent("A") +    handlerStack.bubbleEvent 'keydown', mockKeyboardEvent("A")  Tests.outputMethod = (args...) ->    newOutput = args.join "\n" diff --git a/tests/dom_tests/dom_tests.html b/tests/dom_tests/dom_tests.html index 1dc45782..c658235b 100644 --- a/tests/dom_tests/dom_tests.html +++ b/tests/dom_tests/dom_tests.html @@ -32,6 +32,7 @@      <script type="text/javascript" src="../../lib/utils.js"></script>      <script type="text/javascript" src="../../lib/keyboard_utils.js"></script>      <script type="text/javascript" src="../../lib/dom_utils.js"></script> +    <script type="text/javascript" src="../../lib/handler_stack.js"></script>      <script type="text/javascript" src="../../lib/clipboard.js"></script>      <script type="text/javascript" src="../../content_scripts/link_hints.js"></script>      <script type="text/javascript" src="../../content_scripts/vomnibar.js"></script> 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 | 
