neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

encode_spec.lua (3260B)


      1 local t = require('test.unit.testutil')
      2 local itp = t.gen_itp(it)
      3 local t_eval = require('test.unit.eval.testutil')
      4 
      5 local cimport = t.cimport
      6 local to_cstr = t.to_cstr
      7 local eq = t.eq
      8 
      9 local list = t_eval.list
     10 local lst2tbl = t_eval.lst2tbl
     11 local type_key = t_eval.type_key
     12 local list_type = t_eval.list_type
     13 local null_string = t_eval.null_string
     14 
     15 local encode = cimport('./src/nvim/eval/encode.h')
     16 
     17 describe('encode_list_write()', function()
     18  local encode_list_write = function(l, s)
     19    return encode.encode_list_write(l, to_cstr(s), #s)
     20  end
     21 
     22  itp('writes empty string', function()
     23    local l = list()
     24    encode_list_write(l, '')
     25    eq({ [type_key] = list_type }, lst2tbl(l))
     26  end)
     27 
     28  itp('writes ASCII string literal with printable characters', function()
     29    local l = list()
     30    encode_list_write(l, 'abc')
     31    eq({ 'abc' }, lst2tbl(l))
     32  end)
     33 
     34  itp('writes string starting with NL', function()
     35    local l = list()
     36    encode_list_write(l, '\nabc')
     37    eq({ null_string, 'abc' }, lst2tbl(l))
     38  end)
     39 
     40  itp('writes string starting with NL twice', function()
     41    local l = list()
     42    encode_list_write(l, '\nabc')
     43    eq({ null_string, 'abc' }, lst2tbl(l))
     44    encode_list_write(l, '\nabc')
     45    eq({ null_string, 'abc', 'abc' }, lst2tbl(l))
     46  end)
     47 
     48  itp('writes string ending with NL', function()
     49    local l = list()
     50    encode_list_write(l, 'abc\n')
     51    eq({ 'abc', null_string }, lst2tbl(l))
     52  end)
     53 
     54  itp('writes string ending with NL twice', function()
     55    local l = list()
     56    encode_list_write(l, 'abc\n')
     57    eq({ 'abc', null_string }, lst2tbl(l))
     58    encode_list_write(l, 'abc\n')
     59    eq({ 'abc', 'abc', null_string }, lst2tbl(l))
     60  end)
     61 
     62  itp('writes string starting, ending and containing NL twice', function()
     63    local l = list()
     64    encode_list_write(l, '\na\nb\n')
     65    eq({ null_string, 'a', 'b', null_string }, lst2tbl(l))
     66    encode_list_write(l, '\na\nb\n')
     67    eq({ null_string, 'a', 'b', null_string, 'a', 'b', null_string }, lst2tbl(l))
     68  end)
     69 
     70  itp('writes string starting, ending and containing NUL with NL between twice', function()
     71    local l = list()
     72    encode_list_write(l, '\0\n\0\n\0')
     73    eq({ '\n', '\n', '\n' }, lst2tbl(l))
     74    encode_list_write(l, '\0\n\0\n\0')
     75    eq({ '\n', '\n', '\n\n', '\n', '\n' }, lst2tbl(l))
     76  end)
     77 
     78  itp('writes string starting, ending and containing NL with NUL between twice', function()
     79    local l = list()
     80    encode_list_write(l, '\n\0\n\0\n')
     81    eq({ null_string, '\n', '\n', null_string }, lst2tbl(l))
     82    encode_list_write(l, '\n\0\n\0\n')
     83    eq({ null_string, '\n', '\n', null_string, '\n', '\n', null_string }, lst2tbl(l))
     84  end)
     85 
     86  itp('writes string containing a single NL twice', function()
     87    local l = list()
     88    encode_list_write(l, '\n')
     89    eq({ null_string, null_string }, lst2tbl(l))
     90    encode_list_write(l, '\n')
     91    eq({ null_string, null_string, null_string }, lst2tbl(l))
     92  end)
     93 
     94  itp('writes string containing a few NLs twice', function()
     95    local l = list()
     96    encode_list_write(l, '\n\n\n')
     97    eq({ null_string, null_string, null_string, null_string }, lst2tbl(l))
     98    encode_list_write(l, '\n\n\n')
     99    eq(
    100      { null_string, null_string, null_string, null_string, null_string, null_string, null_string },
    101      lst2tbl(l)
    102    )
    103  end)
    104 end)