Completed
Push — master ( 2bc9f2...ef56ad )
by Lambda
01:45
created

test_start_exception()   A

Complexity

Conditions 3

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
dl 0
loc 12
rs 9.4285
c 0
b 0
f 0
1
from unittest.mock import MagicMock
2
import pytest
3
from neovim_prompt.keystroke import Keystroke
4
from neovim_prompt.prompt import Prompt, Status, InsertMode
5
6
7
def test_Prompt_constructor(nvim, context):
8
    prompt = Prompt(nvim, context)
9
10
11
def test_prompt_text(prompt):
12
    assert prompt.text == ''
13
    assert prompt.caret.locus == 0
14
    prompt.text = 'foo'
15
    assert prompt.text == 'foo'
16
    assert prompt.caret.locus == 3
17
18
19
def test_prompt_apply_custom_mappings_from_vim_variable(prompt):
20
    nvim = prompt.nvim
21
    nvim.vars = {
22
        'prompt#custom_mappings': [
23
            ('<C-H>', '<BS>'),
24
            ('<C-D>', '<DEL>'),
25
        ]
26
    }
27
28
    # Fail silently
29
    prompt.apply_custom_mappings_from_vim_variable('does_not_exist')
30
    assert Keystroke.parse(nvim, '<C-H>') not in prompt.keymap.registry
31
    assert Keystroke.parse(nvim, '<C-D>') not in prompt.keymap.registry
32
33
    prompt.apply_custom_mappings_from_vim_variable('prompt#custom_mappings')
34
    assert Keystroke.parse(nvim, '<C-H>') in prompt.keymap.registry
35
    assert Keystroke.parse(nvim, '<C-D>') in prompt.keymap.registry
36
37
38
def test_insert_text(prompt):
39
    # docstring
40
    pass
41
42
43
def test_replace_text(prompt):
44
    # docstring
45
    pass
46
47
48
def test_update_text(prompt):
49
    # docstring
50
    pass
51
52
53
def test_start(prompt):
54
    nvim = prompt.nvim
55
    nvim.error = Exception
56
    nvim.call = MagicMock()
57
    nvim.eval = MagicMock()
58
    nvim.command = MagicMock()
59
    prompt.keymap = MagicMock()
60
    prompt.keymap.harvest.side_effect = [
61
        Keystroke.parse(nvim, 'a'),
62
        Keystroke.parse(nvim, 'b'),
63
        Keystroke.parse(nvim, 'c'),
64
        Keystroke.parse(nvim, '<prompt:accept>'),
65
    ]
66
    assert prompt.start() == 'abc'
67
68
    prompt.keymap.harvest.side_effect = [
69
        Keystroke.parse(nvim, 'a'),
70
        Keystroke.parse(nvim, 'b'),
71
        Keystroke.parse(nvim, 'c'),
72
        Keystroke.parse(nvim, '<prompt:accept>'),
73
    ]
74
    assert prompt.start('default') == 'defaultabc'
75
76
    prompt.keymap.harvest.side_effect = [
77
        Keystroke.parse(nvim, 'a'),
78
        Keystroke.parse(nvim, 'b'),
79
        Keystroke.parse(nvim, 'c'),
80
        Keystroke.parse(nvim, '<prompt:cancel>'),
81
    ]
82
    assert prompt.start() is None
83
84
85
def test_start_exception(prompt):
86
    nvim = prompt.nvim
87
    nvim.error = Exception
88
    nvim.call = MagicMock()
89
    nvim.eval = MagicMock()
90
    nvim.command = MagicMock()
91
    prompt.keymap = MagicMock()
92
    prompt.keymap.harvest.side_effect = KeyboardInterrupt
93
    assert prompt.start() is None
94
95
    prompt.keymap.harvest.side_effect = Exception
96
    assert prompt.start() is None
97
98
99
def test_on_init(prompt):
100
    prompt.nvim.call = MagicMock()
101
    prompt.text = 'Hello Goodbye'
102
    assert prompt.on_init(None) == None
103
    prompt.nvim.call.assert_called_with('inputsave')
104
    assert prompt.text == 'Hello Goodbye'
105
106
    assert prompt.on_init('default') == None
107
    prompt.nvim.call.assert_called_with('inputsave')
108
    assert prompt.text == 'default'
109
110
111
def test_on_update(prompt):
112
    assert prompt.on_update(Status.accept) == Status.accept
113
    assert prompt.on_update(Status.cancel) == Status.cancel
114
115
116
def test_on_redraw(prompt):
117
    prompt.nvim.command = MagicMock()
118
    prompt.prefix = '# '
119
    prompt.text = 'Hello Goodbye'
120
    prompt.caret.locus = 5
121
    assert prompt.on_redraw() == None
122
    prompt.nvim.command.assert_called_with('|'.join([
123
        'redraw',
124
        'echohl Question',
125
        'echon "# "',
126
        'echohl None',
127
        'echon "Hello"',
128
        'echohl Cursor',
129
        'echon " "',
130
        'echohl None',
131
        'echon "Goodbye"',
132
    ]))
133
134
135
def on_keypress(prompt):
136
    nvim = prompt.nvim
137
    prompt.action = MagicMock()
138
    prompt.action.call.return_value = Status.accept
139
    prompt.update_text = MagicMock()
140
141
    assert prompt.on_keypress(Keystroke.parse(nvim, '<prompt:accept>')) \
142
        == Status.accept
143
    prompt.action.call.assert_called_with(prompt, 'prompt:accept')
144
145
    assert prompt.on_keypress(Keystroke.parse(nvim, 'a')) == None
146
    prompt.update_text.assert_called_with('a')
147
148
149
def test_on_term(prompt):
150
    prompt.nvim.call = MagicMock()
151
    assert prompt.on_term(Status.accept, 'Hello Goodbye') == None
152
    prompt.nvim.call.assert_called_with('inputrestore')
153