|
1
|
|
|
import os |
|
2
|
|
|
|
|
3
|
|
|
import pytest |
|
4
|
|
|
|
|
5
|
|
|
from pynvim.api import NvimError |
|
6
|
|
|
from pynvim.compat import IS_PYTHON3 |
|
7
|
|
|
|
|
8
|
|
|
|
|
9
|
|
|
def test_repr(vim): |
|
10
|
|
|
assert repr(vim.current.buffer) == "<Buffer(handle=1)>" |
|
11
|
|
|
|
|
12
|
|
|
|
|
13
|
|
|
def test_get_length(vim): |
|
14
|
|
|
assert len(vim.current.buffer) == 1 |
|
15
|
|
|
vim.current.buffer.append('line') |
|
16
|
|
|
assert len(vim.current.buffer) == 2 |
|
17
|
|
|
vim.current.buffer.append('line') |
|
18
|
|
|
assert len(vim.current.buffer) == 3 |
|
19
|
|
|
vim.current.buffer[-1] = None |
|
20
|
|
|
assert len(vim.current.buffer) == 2 |
|
21
|
|
|
vim.current.buffer[-1] = None |
|
22
|
|
|
vim.current.buffer[-1] = None |
|
23
|
|
|
# There's always at least one line |
|
24
|
|
|
assert len(vim.current.buffer) == 1 |
|
25
|
|
|
|
|
26
|
|
|
|
|
27
|
|
|
def test_get_set_del_line(vim): |
|
28
|
|
|
assert vim.current.buffer[0] == '' |
|
29
|
|
|
vim.current.buffer[0] = 'line1' |
|
30
|
|
|
assert vim.current.buffer[0] == 'line1' |
|
31
|
|
|
vim.current.buffer[0] = 'line2' |
|
32
|
|
|
assert vim.current.buffer[0] == 'line2' |
|
33
|
|
|
vim.current.buffer[0] = None |
|
34
|
|
|
assert vim.current.buffer[0] == '' |
|
35
|
|
|
# __delitem__ |
|
36
|
|
|
vim.current.buffer[:] = ['line1', 'line2', 'line3'] |
|
37
|
|
|
assert vim.current.buffer[2] == 'line3' |
|
38
|
|
|
del vim.current.buffer[0] |
|
39
|
|
|
assert vim.current.buffer[0] == 'line2' |
|
40
|
|
|
assert vim.current.buffer[1] == 'line3' |
|
41
|
|
|
del vim.current.buffer[-1] |
|
42
|
|
|
assert vim.current.buffer[0] == 'line2' |
|
43
|
|
|
assert len(vim.current.buffer) == 1 |
|
44
|
|
|
|
|
45
|
|
|
|
|
46
|
|
|
def test_get_set_del_slice(vim): |
|
47
|
|
|
assert vim.current.buffer[:] == [''] |
|
48
|
|
|
# Replace buffer |
|
49
|
|
|
vim.current.buffer[:] = ['a', 'b', 'c'] |
|
50
|
|
|
assert vim.current.buffer[:] == ['a', 'b', 'c'] |
|
51
|
|
|
assert vim.current.buffer[1:] == ['b', 'c'] |
|
52
|
|
|
assert vim.current.buffer[1:2] == ['b'] |
|
53
|
|
|
assert vim.current.buffer[1:1] == [] |
|
54
|
|
|
assert vim.current.buffer[:-1] == ['a', 'b'] |
|
55
|
|
|
assert vim.current.buffer[1:-1] == ['b'] |
|
56
|
|
|
assert vim.current.buffer[-2:] == ['b', 'c'] |
|
57
|
|
|
vim.current.buffer[1:2] = ['a', 'b', 'c'] |
|
58
|
|
|
assert vim.current.buffer[:] == ['a', 'a', 'b', 'c', 'c'] |
|
59
|
|
|
vim.current.buffer[-1:] = ['a', 'b', 'c'] |
|
60
|
|
|
assert vim.current.buffer[:] == ['a', 'a', 'b', 'c', 'a', 'b', 'c'] |
|
61
|
|
|
vim.current.buffer[:-3] = None |
|
62
|
|
|
assert vim.current.buffer[:] == ['a', 'b', 'c'] |
|
63
|
|
|
vim.current.buffer[:] = None |
|
64
|
|
|
assert vim.current.buffer[:] == [''] |
|
65
|
|
|
# __delitem__ |
|
66
|
|
|
vim.current.buffer[:] = ['a', 'b', 'c'] |
|
67
|
|
|
del vim.current.buffer[:] |
|
68
|
|
|
assert vim.current.buffer[:] == [''] |
|
69
|
|
|
vim.current.buffer[:] = ['a', 'b', 'c'] |
|
70
|
|
|
del vim.current.buffer[:1] |
|
71
|
|
|
assert vim.current.buffer[:] == ['b', 'c'] |
|
72
|
|
|
del vim.current.buffer[:-1] |
|
73
|
|
|
assert vim.current.buffer[:] == ['c'] |
|
74
|
|
|
|
|
75
|
|
|
|
|
76
|
|
View Code Duplication |
def test_vars(vim): |
|
|
|
|
|
|
77
|
|
|
vim.current.buffer.vars['python'] = [1, 2, {'3': 1}] |
|
78
|
|
|
assert vim.current.buffer.vars['python'] == [1, 2, {'3': 1}] |
|
79
|
|
|
assert vim.eval('b:python') == [1, 2, {'3': 1}] |
|
80
|
|
|
assert vim.current.buffer.vars.get('python') == [1, 2, {'3': 1}] |
|
81
|
|
|
|
|
82
|
|
|
del vim.current.buffer.vars['python'] |
|
83
|
|
|
with pytest.raises(KeyError): |
|
84
|
|
|
vim.current.buffer.vars['python'] |
|
85
|
|
|
assert vim.eval('exists("b:python")') == 0 |
|
86
|
|
|
|
|
87
|
|
|
with pytest.raises(KeyError): |
|
88
|
|
|
del vim.current.buffer.vars['python'] |
|
89
|
|
|
|
|
90
|
|
|
assert vim.current.buffer.vars.get('python', 'default') == 'default' |
|
91
|
|
|
|
|
92
|
|
|
|
|
93
|
|
|
def test_api(vim): |
|
94
|
|
|
vim.current.buffer.api.set_var('myvar', 'thetext') |
|
95
|
|
|
assert vim.current.buffer.api.get_var('myvar') == 'thetext' |
|
96
|
|
|
assert vim.eval('b:myvar') == 'thetext' |
|
97
|
|
|
vim.current.buffer.api.set_lines(0, -1, True, ['alpha', 'beta']) |
|
98
|
|
|
assert vim.current.buffer.api.get_lines(0, -1, True) == ['alpha', 'beta'] |
|
99
|
|
|
assert vim.current.buffer[:] == ['alpha', 'beta'] |
|
100
|
|
|
|
|
101
|
|
|
|
|
102
|
|
View Code Duplication |
def test_options(vim): |
|
|
|
|
|
|
103
|
|
|
assert vim.current.buffer.options['shiftwidth'] == 8 |
|
104
|
|
|
vim.current.buffer.options['shiftwidth'] = 4 |
|
105
|
|
|
assert vim.current.buffer.options['shiftwidth'] == 4 |
|
106
|
|
|
# global-local option |
|
107
|
|
|
vim.current.buffer.options['define'] = 'test' |
|
108
|
|
|
assert vim.current.buffer.options['define'] == 'test' |
|
109
|
|
|
# Doesn't change the global value |
|
110
|
|
|
assert vim.options['define'] == r'^\s*#\s*define' |
|
111
|
|
|
|
|
112
|
|
|
with pytest.raises(KeyError) as excinfo: |
|
113
|
|
|
vim.current.buffer.options['doesnotexist'] |
|
114
|
|
|
assert excinfo.value.args == ("Invalid option name: 'doesnotexist'",) |
|
115
|
|
|
|
|
116
|
|
|
|
|
117
|
|
|
def test_number(vim): |
|
118
|
|
|
curnum = vim.current.buffer.number |
|
119
|
|
|
vim.command('new') |
|
120
|
|
|
assert vim.current.buffer.number == curnum + 1 |
|
121
|
|
|
vim.command('new') |
|
122
|
|
|
assert vim.current.buffer.number == curnum + 2 |
|
123
|
|
|
|
|
124
|
|
|
|
|
125
|
|
|
def test_name(vim): |
|
126
|
|
|
vim.command('new') |
|
127
|
|
|
assert vim.current.buffer.name == '' |
|
128
|
|
|
new_name = vim.eval('resolve(tempname())') |
|
129
|
|
|
vim.current.buffer.name = new_name |
|
130
|
|
|
assert vim.current.buffer.name == new_name |
|
131
|
|
|
vim.command('silent w!') |
|
132
|
|
|
assert os.path.isfile(new_name) |
|
133
|
|
|
os.unlink(new_name) |
|
134
|
|
|
|
|
135
|
|
|
|
|
136
|
|
|
def test_valid(vim): |
|
137
|
|
|
vim.command('new') |
|
138
|
|
|
buffer = vim.current.buffer |
|
139
|
|
|
assert buffer.valid |
|
140
|
|
|
vim.command('bw!') |
|
141
|
|
|
assert not buffer.valid |
|
142
|
|
|
|
|
143
|
|
|
|
|
144
|
|
|
def test_append(vim): |
|
145
|
|
|
vim.current.buffer.append('a') |
|
146
|
|
|
assert vim.current.buffer[:] == ['', 'a'] |
|
147
|
|
|
vim.current.buffer.append('b', 0) |
|
148
|
|
|
assert vim.current.buffer[:] == ['b', '', 'a'] |
|
149
|
|
|
vim.current.buffer.append(['c', 'd']) |
|
150
|
|
|
assert vim.current.buffer[:] == ['b', '', 'a', 'c', 'd'] |
|
151
|
|
|
vim.current.buffer.append(['c', 'd'], 2) |
|
152
|
|
|
assert vim.current.buffer[:] == ['b', '', 'c', 'd', 'a', 'c', 'd'] |
|
153
|
|
|
vim.current.buffer.append(b'bytes') |
|
154
|
|
|
assert vim.current.buffer[:] == ['b', '', 'c', 'd', 'a', 'c', 'd', 'bytes'] |
|
155
|
|
|
|
|
156
|
|
|
|
|
157
|
|
|
def test_mark(vim): |
|
158
|
|
|
vim.current.buffer.append(['a', 'bit of', 'text']) |
|
159
|
|
|
vim.current.window.cursor = [3, 4] |
|
160
|
|
|
vim.command('mark V') |
|
161
|
|
|
assert vim.current.buffer.mark('V') == [3, 0] |
|
162
|
|
|
|
|
163
|
|
|
|
|
164
|
|
|
def test_invalid_utf8(vim): |
|
165
|
|
|
vim.command('normal "=printf("%c", 0xFF)\np') |
|
166
|
|
|
assert vim.eval("char2nr(getline(1))") == 0xFF |
|
167
|
|
|
|
|
168
|
|
|
assert vim.current.buffer[:] == ['\udcff'] if IS_PYTHON3 else ['\xff'] |
|
169
|
|
|
vim.current.line += 'x' |
|
170
|
|
|
assert vim.eval("getline(1)", decode=False) == b'\xFFx' |
|
171
|
|
|
assert vim.current.buffer[:] == ['\udcffx'] if IS_PYTHON3 else ['\xffx'] |
|
172
|
|
|
|
|
173
|
|
|
|
|
174
|
|
|
def test_get_exceptions(vim): |
|
175
|
|
|
with pytest.raises(KeyError) as excinfo: |
|
176
|
|
|
vim.current.buffer.options['invalid-option'] |
|
177
|
|
|
|
|
178
|
|
|
assert not isinstance(excinfo.value, NvimError) |
|
179
|
|
|
assert excinfo.value.args == ("Invalid option name: 'invalid-option'",) |
|
180
|
|
|
|
|
181
|
|
|
|
|
182
|
|
|
def test_set_items_for_range(vim): |
|
183
|
|
|
vim.current.buffer[:] = ['a', 'b', 'c', 'd', 'e'] |
|
184
|
|
|
r = vim.current.buffer.range(1, 3) |
|
185
|
|
|
r[1:3] = ['foo'] * 3 |
|
186
|
|
|
assert vim.current.buffer[:] == ['a', 'foo', 'foo', 'foo', 'd', 'e'] |
|
187
|
|
|
|
|
188
|
|
|
|
|
189
|
|
|
# NB: we can't easily test the effect of this. But at least run the lua |
|
190
|
|
|
# function sync, so we know it runs without runtime error with simple args. |
|
191
|
|
|
def test_update_highlights(vim): |
|
192
|
|
|
vim.current.buffer[:] = ['a', 'b', 'c'] |
|
193
|
|
|
src_id = vim.new_highlight_source() |
|
194
|
|
|
vim.current.buffer.update_highlights( |
|
195
|
|
|
src_id, [["Comment", 0, 0, -1], ("String", 1, 0, 1)], clear=True, async_=False |
|
196
|
|
|
) |
|
197
|
|
|
|
|
198
|
|
|
|
|
199
|
|
|
def test_buffer_inequality(vim): |
|
200
|
|
|
b = vim.current.buffer |
|
201
|
|
|
assert not (b != vim.current.buffer) |
|
202
|
|
|
|