repositories / dotfiles
dotfiles
bugabingas dorkfiles
owned by admin
neovim/tests/std/dbg/encode_spec.lua
Rawlocal 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)