Luigit
repositories / dotfiles

dotfiles

bugabingas dorkfiles

owned by admin

neovim/tests/std/dbg/encode_spec.lua

Raw
local mod = require 'std.dbg.encode'
local encode = mod.encode
local decode = mod.decode

describe('std.dbg.encode', function()
  describe('encode()', function()
    it('should produce single-line JSON without trailing newline', function()
      local result = encode({ kind = 'DEBUG', date = 1234567890 })
      assert.is_string(result)
      assert.is_not_nil(result:match '^%{')
      assert.is_nil(result:match '\n')
      assert.is_nil(result:match '\n$')
    end)

    it('should round-trip a simple event', function()
      local original = { kind = 'DEBUG', date = 1234567890 }
      local encoded = encode(original)
      local decoded = decode(encoded)
      assert.equal(original.kind, decoded.kind)
      assert.equal(original.date, decoded.date)
    end)

    it('should handle nested tables in data field', function()
      local original = {
        kind = 'ERROR',
        date = 1234567890,
        data = { { a = 1 }, { b = 2 } },
      }
      local encoded = encode(original)
      local decoded = decode(encoded)
      assert.equal(original.kind, decoded.kind)
      assert.equal(original.data[1].a, decoded.data[1].a)
      assert.equal(original.data[2].b, decoded.data[2].b)
    end)

    it('should handle nil values in tables via luanil', function()
      local original = {
        kind = 'DEBUG',
        date = 1234567890,
        data = { nil, value = 'yes' },
      }
      local encoded = encode(original)
      local decoded = decode(encoded)
      assert.is_nil(decoded.data[1])
      assert.equal('yes', decoded.data.value)
    end)

    it('should escape forward slashes', function()
      local result = encode({ format = 'path/like/this' })
      assert.is_string(result)
      assert.is_nil(result:match '([^\\])/[^/]')
    end)

    it('should handle all string types in kind, format, filename, fn', function()
      local original = {
        kind = 'TRACE',
        date = 1234567890,
        format = 'test message',
        data = {},
        filename = '/path/to/file.lua',
        fn = 'my_function',
        line = 42,
      }
      local encoded = encode(original)
      local decoded = decode(encoded)
      assert.equal(original.kind, decoded.kind)
      assert.equal(original.format, decoded.format)
      assert.equal(original.filename, decoded.filename)
      assert.equal(original.fn, decoded.fn)
      assert.equal(original.line, decoded.line)
    end)
  end)

  describe('decode()', function()
    it('should decode a valid JSON line', function()
      local line = '{"kind":"DEBUG","date":1234567890}'
      local decoded = decode(line)
      assert.equal('DEBUG', decoded.kind)
      assert.equal(1234567890, decoded.date)
    end)

    it('should handle empty data arrays', function()
      local original = { kind = 'DEBUG', data = {} }
      local encoded = encode(original)
      local decoded = decode(encoded)
      assert.is_table(decoded.data)
      assert.equal(0, #decoded.data)
    end)

    it('should handle numeric fields correctly', function()
      local original = { kind = 'ERROR', date = 0, line = 0 }
      local encoded = encode(original)
      local decoded = decode(encoded)
      assert.equal(0, decoded.date)
      assert.equal(0, decoded.line)
    end)
  end)
end)