aboutsummaryrefslogtreecommitdiff
path: root/test/functional/lua/text_spec.lua
blob: dd08a6ec0465a43b3a1e31fd618e3723dafffae1 (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
local t = require('test.testutil')
local n = require('test.functional.testnvim')()

local clear = n.clear
local eq = t.eq

describe('vim.text', function()
  before_each(clear)

  describe('hexencode() and hexdecode()', function()
    it('works', function()
      local cases = {
        { 'Hello world!', '48656C6C6F20776F726C6421' },
        { '😂', 'F09F9882' },
      }

      for _, v in ipairs(cases) do
        local input, output = unpack(v)
        eq(output, vim.text.hexencode(input))
        eq(input, vim.text.hexdecode(output))
      end
    end)

    it('works with very large strings', function()
      local input, output = string.rep('😂', 2 ^ 16), string.rep('F09F9882', 2 ^ 16)
      eq(output, vim.text.hexencode(input))
      eq(input, vim.text.hexdecode(output))
    end)

    it('errors on invalid input', function()
      -- Odd number of hex characters
      do
        local res, err = vim.text.hexdecode('ABC')
        eq(nil, res)
        eq('string must have an even number of hex characters', err)
      end

      -- Non-hexadecimal input
      do
        local res, err = vim.text.hexdecode('nothex')
        eq(nil, res)
        eq('string must contain only hex characters', err)
      end
    end)
  end)
end)