Issues (18)

test/test_buffer.py (2 issues)

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):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
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):
0 ignored issues
show
This code seems to be duplicated in your project.
Loading history...
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