neovim/test/unit/message_spec.lua
James McCoy 4e3a2784ec vim-patch:7.4.2068
Problem:    Not all arguments of trunc_string() are tested.  Memory access
            error when running the message tests.
Solution:   Add another test case. (Yegappan Lakshmanan)  Make it easy to run
            unittests with valgrind.  Fix the access error.

b9644433d2
2017-03-06 15:36:09 -05:00

60 lines
1.7 KiB
Lua

local helpers = require("test.unit.helpers")
local ffi = helpers.ffi
local eq = helpers.eq
local to_cstr = helpers.to_cstr
local cimp = helpers.cimport('./src/nvim/message.h', './src/nvim/memory.h',
'./src/nvim/strings.h')
describe('trunc_string', function()
local buflen = 40
local function test_inplace(s, expected, room)
room = room and room or 20
local buf = cimp.xmalloc(ffi.sizeof('char_u') * buflen)
ffi.C.strcpy(buf, s)
cimp.trunc_string(buf, buf, room, buflen)
eq(expected, ffi.string(buf))
cimp.xfree(buf)
end
local function test_copy(s, expected, room)
room = room and room or 20
local buf = cimp.xmalloc(ffi.sizeof('char_u') * buflen)
local str = cimp.vim_strsave(to_cstr(s))
cimp.trunc_string(str, buf, room, buflen)
eq(expected, ffi.string(buf))
cimp.xfree(buf)
cimp.xfree(str)
end
local permutations = {
{ ['desc'] = 'in-place', ['func'] = test_inplace },
{ ['desc'] = 'by copy', ['func'] = test_copy },
}
for _,t in ipairs(permutations) do
describe('populates buf '..t.desc, function()
it('with a small string', function()
t.func('text', 'text')
end)
it('with a medium string', function()
t.func('a short text', 'a short text')
end)
it('with a string of length == 1/2 room', function()
t.func('a text that fits', 'a text that fits', 34)
end)
it('with a string exactly the truncate size', function()
t.func('a text tha just fits', 'a text tha just fits')
end)
it('with a string that must be truncated', function()
t.func('a text that nott fits', 'a text t...nott fits')
end)
end)
end
end)