aboutsummaryrefslogtreecommitdiff
path: root/test/unit/message_spec.lua
blob: fee8f5124d390d6738222b9d7caa394593cb6aee (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
local t = require('test.unit.testutil')
local itp = t.gen_itp(it)

local ffi = t.ffi
local eq = t.eq
local to_cstr = t.to_cstr

local cimp = t.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') * 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') * buflen)
    local str = cimp.xstrdup(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 _, q in ipairs(permutations) do
    describe('populates buf ' .. q.desc, function()
      itp('with a small string', function()
        q.func('text', 'text')
      end)

      itp('with a medium string', function()
        q.func('a short text', 'a short text')
      end)

      itp('with a string of length == 1/2 room', function()
        q.func('a text that fits', 'a text that fits', 34)
      end)

      itp('with a string exactly the truncate size', function()
        q.func('a text tha just fits', 'a text tha just fits')
      end)

      itp('with a string that must be truncated', function()
        q.func('a text that nott fits', 'a text t...nott fits')
      end)
    end)
  end
end)