Skip to content

Commit b65f62d

Browse files
meithamjustinmk
authored andcommitted
test: migrate to pytest (neovim#266)
1 parent d53415d commit b65f62d

13 files changed

+335
-392
lines changed

README.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -148,21 +148,21 @@ to use it for the plugin host.
148148
To run the tests execute
149149

150150
```sh
151-
nosetests
151+
pytest
152152
```
153153

154154
This will run the tests in an embedded instance of nvim.
155155
If you want to test a different version than `nvim` in `$PATH` use
156156
```sh
157-
NVIM_CHILD_ARGV='["/path/to/nvim", "-u", "NONE", "--embed"]' nosetests
157+
NVIM_CHILD_ARGV='["/path/to/nvim", "-u", "NONE", "--embed"]' pytest
158158
```
159159

160160
Alternatively, if you want to see the state of nvim, you could use
161161

162162
```sh
163163
export NVIM_LISTEN_ADDRESS=/tmp/nvimtest
164164
xterm -e "nvim -u NONE"&
165-
nosetests
165+
pytest
166166
```
167167

168168
But note you need to restart nvim every time you run the tests! Substitute your

setup.py

+10
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,14 @@
88
'msgpack>=0.5.0',
99
]
1010

11+
tests_require = [
12+
'pytest>=3.4.0',
13+
]
14+
15+
extras_require = {
16+
'pyuv': ['pyuv>=1.0.0'],
17+
}
18+
1119
if os.name == 'nt':
1220
install_requires.append('pyuv>=1.0.0')
1321
elif sys.version_info < (3, 4):
@@ -29,4 +37,6 @@
2937
packages=['neovim', 'neovim.api', 'neovim.msgpack_rpc',
3038
'neovim.msgpack_rpc.event_loop', 'neovim.plugin'],
3139
install_requires=install_requires,
40+
tests_require=tests_require,
41+
extras_require=extras_require,
3242
zip_safe=False)

test/conftest.py

+67
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import json
2+
import os
3+
import textwrap
4+
5+
import neovim
6+
import pytest
7+
8+
neovim.setup_logging("test")
9+
10+
11+
@pytest.fixture(autouse=True)
12+
def cleanup_func(vim):
13+
fun = textwrap.dedent(''':function BeforeEachTest()
14+
set all&
15+
redir => groups
16+
silent augroup
17+
redir END
18+
for group in split(groups)
19+
exe 'augroup '.group
20+
autocmd!
21+
augroup END
22+
endfor
23+
autocmd!
24+
tabnew
25+
let curbufnum = eval(bufnr('%'))
26+
redir => buflist
27+
silent ls!
28+
redir END
29+
let bufnums = []
30+
for buf in split(buflist, '\\n')
31+
let bufnum = eval(split(buf, '[ u]')[0])
32+
if bufnum != curbufnum
33+
call add(bufnums, bufnum)
34+
endif
35+
endfor
36+
if len(bufnums) > 0
37+
exe 'silent bwipeout! '.join(bufnums, ' ')
38+
endif
39+
silent tabonly
40+
for k in keys(g:)
41+
exe 'unlet g:'.k
42+
endfor
43+
filetype plugin indent off
44+
mapclear
45+
mapclear!
46+
abclear
47+
comclear
48+
endfunction
49+
''')
50+
vim.input(fun)
51+
vim.command('call BeforeEachTest()')
52+
assert len(vim.tabpages) == len(vim.windows) == len(vim.buffers) == 1
53+
54+
55+
@pytest.fixture
56+
def vim():
57+
child_argv = os.environ.get('NVIM_CHILD_ARGV')
58+
listen_address = os.environ.get('NVIM_LISTEN_ADDRESS')
59+
if child_argv is None and listen_address is None:
60+
child_argv = '["nvim", "-u", "NONE", "--embed"]'
61+
62+
if child_argv is not None:
63+
editor = neovim.attach('child', argv=json.loads(child_argv))
64+
else:
65+
editor = neovim.attach('socket', path=listen_address)
66+
67+
return editor

test/test_buffer.py

+75-93
Original file line numberDiff line numberDiff line change
@@ -1,181 +1,163 @@
11
import os
2-
from nose.tools import with_setup, eq_ as eq, ok_ as ok
3-
from test_common import vim, cleanup
42

53
from neovim.compat import IS_PYTHON3
64

75

8-
@with_setup(setup=cleanup)
9-
def test_get_length():
10-
eq(len(vim.current.buffer), 1)
6+
def test_get_length(vim):
7+
assert len(vim.current.buffer) == 1
118
vim.current.buffer.append('line')
12-
eq(len(vim.current.buffer), 2)
9+
assert len(vim.current.buffer) == 2
1310
vim.current.buffer.append('line')
14-
eq(len(vim.current.buffer), 3)
11+
assert len(vim.current.buffer) == 3
1512
vim.current.buffer[-1] = None
16-
eq(len(vim.current.buffer), 2)
13+
assert len(vim.current.buffer) == 2
1714
vim.current.buffer[-1] = None
1815
vim.current.buffer[-1] = None
1916
# There's always at least one line
20-
eq(len(vim.current.buffer), 1)
17+
assert len(vim.current.buffer) == 1
2118

2219

23-
@with_setup(setup=cleanup)
24-
def test_get_set_del_line():
25-
eq(vim.current.buffer[0], '')
20+
def test_get_set_del_line(vim):
21+
assert vim.current.buffer[0] == ''
2622
vim.current.buffer[0] = 'line1'
27-
eq(vim.current.buffer[0], 'line1')
23+
assert vim.current.buffer[0] == 'line1'
2824
vim.current.buffer[0] = 'line2'
29-
eq(vim.current.buffer[0], 'line2')
25+
assert vim.current.buffer[0] == 'line2'
3026
vim.current.buffer[0] = None
31-
eq(vim.current.buffer[0], '')
27+
assert vim.current.buffer[0] == ''
3228
# __delitem__
3329
vim.current.buffer[:] = ['line1', 'line2', 'line3']
34-
eq(vim.current.buffer[2], 'line3')
30+
assert vim.current.buffer[2] == 'line3'
3531
del vim.current.buffer[0]
36-
eq(vim.current.buffer[0], 'line2')
37-
eq(vim.current.buffer[1], 'line3')
32+
assert vim.current.buffer[0] == 'line2'
33+
assert vim.current.buffer[1] == 'line3'
3834
del vim.current.buffer[-1]
39-
eq(vim.current.buffer[0], 'line2')
40-
eq(len(vim.current.buffer), 1)
35+
assert vim.current.buffer[0] == 'line2'
36+
assert len(vim.current.buffer) == 1
4137

4238

43-
@with_setup(setup=cleanup)
44-
def test_get_set_del_slice():
45-
eq(vim.current.buffer[:], [''])
39+
def test_get_set_del_slice(vim):
40+
assert vim.current.buffer[:] == ['']
4641
# Replace buffer
4742
vim.current.buffer[:] = ['a', 'b', 'c']
48-
eq(vim.current.buffer[:], ['a', 'b', 'c'])
49-
eq(vim.current.buffer[1:], ['b', 'c'])
50-
eq(vim.current.buffer[1:2], ['b'])
51-
eq(vim.current.buffer[1:1], [])
52-
eq(vim.current.buffer[:-1], ['a', 'b'])
53-
eq(vim.current.buffer[1:-1], ['b'])
54-
eq(vim.current.buffer[-2:], ['b', 'c'])
43+
assert vim.current.buffer[:] == ['a', 'b', 'c']
44+
assert vim.current.buffer[1:] == ['b', 'c']
45+
assert vim.current.buffer[1:2] == ['b']
46+
assert vim.current.buffer[1:1] == []
47+
assert vim.current.buffer[:-1] == ['a', 'b']
48+
assert vim.current.buffer[1:-1] == ['b']
49+
assert vim.current.buffer[-2:] == ['b', 'c']
5550
vim.current.buffer[1:2] = ['a', 'b', 'c']
56-
eq(vim.current.buffer[:], ['a', 'a', 'b', 'c', 'c'])
51+
assert vim.current.buffer[:] == ['a', 'a', 'b', 'c', 'c']
5752
vim.current.buffer[-1:] = ['a', 'b', 'c']
58-
eq(vim.current.buffer[:], ['a', 'a', 'b', 'c', 'a', 'b', 'c'])
53+
assert vim.current.buffer[:] == ['a', 'a', 'b', 'c', 'a', 'b', 'c']
5954
vim.current.buffer[:-3] = None
60-
eq(vim.current.buffer[:], ['a', 'b', 'c'])
55+
assert vim.current.buffer[:] == ['a', 'b', 'c']
6156
vim.current.buffer[:] = None
62-
eq(vim.current.buffer[:], [''])
57+
assert vim.current.buffer[:] == ['']
6358
# __delitem__
6459
vim.current.buffer[:] = ['a', 'b', 'c']
6560
del vim.current.buffer[:]
66-
eq(vim.current.buffer[:], [''])
61+
assert vim.current.buffer[:] == ['']
6762
vim.current.buffer[:] = ['a', 'b', 'c']
6863
del vim.current.buffer[:1]
69-
eq(vim.current.buffer[:], ['b', 'c'])
64+
assert vim.current.buffer[:] == ['b', 'c']
7065
del vim.current.buffer[:-1]
71-
eq(vim.current.buffer[:], ['c'])
66+
assert vim.current.buffer[:] == ['c']
7267

7368

74-
@with_setup(setup=cleanup)
75-
def test_vars():
69+
def test_vars(vim):
7670
vim.current.buffer.vars['python'] = [1, 2, {'3': 1}]
77-
eq(vim.current.buffer.vars['python'], [1, 2, {'3': 1}])
78-
eq(vim.eval('b:python'), [1, 2, {'3': 1}])
71+
assert vim.current.buffer.vars['python'] == [1, 2, {'3': 1}]
72+
assert vim.eval('b:python') == [1, 2, {'3': 1}]
7973

8074

81-
@with_setup(setup=cleanup)
82-
def test_api():
75+
def test_api(vim):
8376
vim.current.buffer.api.set_var('myvar', 'thetext')
84-
eq(vim.current.buffer.api.get_var('myvar'), 'thetext')
85-
eq(vim.eval('b:myvar'), 'thetext')
86-
vim.current.buffer.api.set_lines(0,-1,True,['alpha', 'beta'])
87-
eq(vim.current.buffer.api.get_lines(0,-1,True), ['alpha', 'beta'])
88-
eq(vim.current.buffer[:], ['alpha', 'beta'])
77+
assert vim.current.buffer.api.get_var('myvar') == 'thetext'
78+
assert vim.eval('b:myvar') == 'thetext'
79+
vim.current.buffer.api.set_lines(0, -1, True, ['alpha', 'beta'])
80+
assert vim.current.buffer.api.get_lines(0, -1, True) == ['alpha', 'beta']
81+
assert vim.current.buffer[:] == ['alpha', 'beta']
8982

9083

91-
@with_setup(setup=cleanup)
92-
def test_options():
93-
eq(vim.current.buffer.options['shiftwidth'], 8)
84+
def test_options(vim):
85+
assert vim.current.buffer.options['shiftwidth'] == 8
9486
vim.current.buffer.options['shiftwidth'] = 4
95-
eq(vim.current.buffer.options['shiftwidth'], 4)
87+
assert vim.current.buffer.options['shiftwidth'] == 4
9688
# global-local option
9789
vim.current.buffer.options['define'] = 'test'
98-
eq(vim.current.buffer.options['define'], 'test')
90+
assert vim.current.buffer.options['define'] == 'test'
9991
# Doesn't change the global value
100-
eq(vim.options['define'], '^\s*#\s*define')
92+
assert vim.options['define'] == '^\s*#\s*define'
10193

10294

103-
@with_setup(setup=cleanup)
104-
def test_number():
95+
def test_number(vim):
10596
curnum = vim.current.buffer.number
10697
vim.command('new')
107-
eq(vim.current.buffer.number, curnum + 1)
98+
assert vim.current.buffer.number == curnum + 1
10899
vim.command('new')
109-
eq(vim.current.buffer.number, curnum + 2)
100+
assert vim.current.buffer.number == curnum + 2
110101

111102

112-
@with_setup(setup=cleanup)
113-
def test_name():
103+
def test_name(vim):
114104
vim.command('new')
115-
eq(vim.current.buffer.name, '')
105+
assert vim.current.buffer.name == ''
116106
new_name = vim.eval('resolve(tempname())')
117107
vim.current.buffer.name = new_name
118-
eq(vim.current.buffer.name, new_name)
108+
assert vim.current.buffer.name == new_name
119109
vim.command('silent w!')
120-
ok(os.path.isfile(new_name))
110+
assert os.path.isfile(new_name)
121111
os.unlink(new_name)
122112

123113

124-
@with_setup(setup=cleanup)
125-
def test_valid():
114+
def test_valid(vim):
126115
vim.command('new')
127116
buffer = vim.current.buffer
128-
ok(buffer.valid)
117+
assert buffer.valid
129118
vim.command('bw!')
130-
ok(not buffer.valid)
119+
assert not buffer.valid
131120

132121

133-
@with_setup(setup=cleanup)
134-
def test_append():
122+
def test_append(vim):
135123
vim.current.buffer.append('a')
136-
eq(vim.current.buffer[:], ['', 'a'])
124+
assert vim.current.buffer[:] == ['', 'a']
137125
vim.current.buffer.append('b', 0)
138-
eq(vim.current.buffer[:], ['b', '', 'a'])
126+
assert vim.current.buffer[:] == ['b', '', 'a']
139127
vim.current.buffer.append(['c', 'd'])
140-
eq(vim.current.buffer[:], ['b', '', 'a', 'c', 'd'])
128+
assert vim.current.buffer[:] == ['b', '', 'a', 'c', 'd']
141129
vim.current.buffer.append(['c', 'd'], 2)
142-
eq(vim.current.buffer[:], ['b', '', 'c', 'd', 'a', 'c', 'd'])
130+
assert vim.current.buffer[:] == ['b', '', 'c', 'd', 'a', 'c', 'd']
143131
vim.current.buffer.append(b'bytes')
144-
eq(vim.current.buffer[:], ['b', '', 'c', 'd', 'a', 'c', 'd', 'bytes'])
132+
assert vim.current.buffer[:] == ['b', '', 'c', 'd', 'a', 'c', 'd', 'bytes']
145133

146134

147-
@with_setup(setup=cleanup)
148-
def test_mark():
135+
def test_mark(vim):
149136
vim.current.buffer.append(['a', 'bit of', 'text'])
150137
vim.current.window.cursor = [3, 4]
151138
vim.command('mark V')
152-
eq(vim.current.buffer.mark('V'), [3, 0])
139+
assert vim.current.buffer.mark('V') == [3, 0]
153140

154-
@with_setup(setup=cleanup)
155-
def test_invalid_utf8():
141+
142+
def test_invalid_utf8(vim):
156143
vim.command('normal "=printf("%c", 0xFF)\np')
157-
eq(vim.eval("char2nr(getline(1))"), 0xFF)
144+
assert vim.eval("char2nr(getline(1))") == 0xFF
158145

159-
eq(vim.current.buffer[:], ['\udcff'] if IS_PYTHON3 else ['\xff'])
146+
assert vim.current.buffer[:] == ['\udcff'] if IS_PYTHON3 else ['\xff']
160147
vim.current.line += 'x'
161-
eq(vim.eval("getline(1)", decode=False), b'\xFFx')
162-
eq(vim.current.buffer[:], ['\udcffx'] if IS_PYTHON3 else ['\xffx'])
148+
assert vim.eval("getline(1)", decode=False) == b'\xFFx'
149+
assert vim.current.buffer[:] == ['\udcffx'] if IS_PYTHON3 else ['\xffx']
150+
163151

164-
@with_setup(setup=cleanup)
165-
def test_get_exceptions():
152+
def test_get_exceptions(vim):
166153
try:
167154
vim.current.buffer.options['invalid-option']
168-
ok(False)
155+
assert False
169156
except vim.error:
170157
pass
171158

172-
@with_setup(setup=cleanup)
173-
def test_contains():
174-
ok(vim.current.buffer in vim.buffers)
175-
176-
@with_setup(setup=cleanup)
177-
def test_set_items_for_range():
159+
def test_set_items_for_range(vim):
178160
vim.current.buffer[:] = ['a', 'b', 'c', 'd', 'e']
179161
r = vim.current.buffer.range(1, 3)
180162
r[1:3] = ['foo']*3
181-
eq(vim.current.buffer[:], ['a', 'foo', 'foo', 'foo', 'd', 'e'])
163+
assert vim.current.buffer[:] == ['a', 'foo', 'foo', 'foo', 'd', 'e']

0 commit comments

Comments
 (0)