neovim /
pynvim
| 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
Duplication
introduced
by
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
|
|||
| 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 |