aboutsummaryrefslogtreecommitdiffstats
path: root/tests/dom_tests/vomnibar_test.coffee
blob: c5974a4cd25a993a9da5ba604be424347ce8e9fb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
vomnibarFrame = null
SearchEngines.refresh ""
Vomnibar.init()

context "Keep selection within bounds",

  setup ->
    @completions = []

    vomnibarFrame = Vomnibar.vomnibarUI.iframeElement.contentWindow

    # The Vomnibar frame is dynamically injected, so inject our stubs here.
    vomnibarFrame.Function::bind = Function::bind
    vomnibarFrame.chrome = chrome

    oldGetCompleter = vomnibarFrame.Vomnibar.getCompleter.bind vomnibarFrame.Vomnibar
    stub vomnibarFrame.Vomnibar, 'getCompleter', (name) =>
      completer = oldGetCompleter name
      stub completer, 'filter', ({ callback }) => callback results: @completions
      completer

    # Shoulda.js doesn't support async tests, so we have to hack around.
    stub Vomnibar.vomnibarUI, "postMessage", (data) ->
      vomnibarFrame.UIComponentServer.handleMessage {data}
    stub vomnibarFrame.UIComponentServer, "postMessage", (data) ->
      UIComponent.handleMessage {data}

    stub Vomnibar.vomnibarUI, "uiComponentIsReady", true

  tearDown ->
    Vomnibar.vomnibarUI.hide()

  should "set selection to position -1 for omni completion by default", ->
    Vomnibar.activate()
    ui = vomnibarFrame.Vomnibar.vomnibarUI

    @completions = []
    ui.update(true)
    assert.equal -1, ui.selection

    @completions = [{html:'foo',type:'tab',url:'http://example.com'}]
    ui.update(true)
    assert.equal -1, ui.selection

    @completions = []
    ui.update(true)
    assert.equal -1, ui.selection

  should "set selection to position 0 for bookmark completion if possible", ->
    Vomnibar.activateBookmarks()
    ui = vomnibarFrame.Vomnibar.vomnibarUI

    @completions = []
    ui.update(true)
    assert.equal -1, ui.selection

    @completions = [{html:'foo',type:'bookmark',url:'http://example.com'}]
    ui.update(true)
    assert.equal 0, ui.selection

    @completions = []
    ui.update(true)
    assert.equal -1, ui.selection

  should "keep selection within bounds", ->
    Vomnibar.activate()
    ui = vomnibarFrame.Vomnibar.vomnibarUI

    @completions = []
    ui.update(true)

    eventMock =
      preventDefault: ->
      stopImmediatePropagation: ->

    @completions = [{html:'foo',type:'tab',url:'http://example.com'}]
    ui.update(true)
    stub ui, "actionFromKeyEvent", -> "down"
    ui.onKeydown eventMock
    assert.equal 0, ui.selection

    @completions = []
    ui.update(true)
    assert.equal -1, ui.selection