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)