add unit tests for serialize_lib
This commit is contained in:
parent
cdad238183
commit
1b29cf6540
123
tests/serialize_spec.lua
Normal file
123
tests/serialize_spec.lua
Normal file
@ -0,0 +1,123 @@
|
||||
-- test the serialization function
|
||||
|
||||
|
||||
package.path = "../?.lua;" .. package.path
|
||||
|
||||
|
||||
ser = require("serialize")
|
||||
|
||||
|
||||
local mock_file = {}
|
||||
_G.mock_file = mock_file
|
||||
function mock_file:read(arg)
|
||||
if arg == "*l" then
|
||||
local l = self.lines[self.pointer or 1]
|
||||
self.pointer = (self.pointer or 1) + 1
|
||||
return l
|
||||
end
|
||||
end
|
||||
|
||||
function mock_file:close()
|
||||
return nil
|
||||
end
|
||||
|
||||
function mock_file:write(text)
|
||||
self.content = self.content..text
|
||||
end
|
||||
|
||||
function mock_file:create(lines)
|
||||
local f = {}
|
||||
setmetatable(f, mock_file)
|
||||
f.lines = lines or {}
|
||||
f.write = self.write
|
||||
f.close = self.close
|
||||
f.read = self.read
|
||||
f.content = ""
|
||||
return f
|
||||
end
|
||||
|
||||
|
||||
local testtable = {
|
||||
key = "value",
|
||||
[1] = "eins",
|
||||
[true] = {
|
||||
a = "b",
|
||||
c = false,
|
||||
},
|
||||
["es:cape1"] = "foo:bar",
|
||||
["es&ca\npe2"] = "baz&bam\nbim",
|
||||
["es&&ca&\npe3"] = "baz&&bam&\nbim",
|
||||
["es&:cape4"] = "foo\n:bar"
|
||||
}
|
||||
local testser = [[LUA_SER v=1
|
||||
B1:T
|
||||
Sa:Sb
|
||||
Sc:B0
|
||||
E
|
||||
Skey:Svalue
|
||||
Ses&&&&ca&&&npe3:Sbaz&&&&bam&&&nbim
|
||||
N1:Seins
|
||||
Ses&&&:cape4:Sfoo&n&:bar
|
||||
Ses&&ca&npe2:Sbaz&&bam&nbim
|
||||
Ses&:cape1:Sfoo&:bar
|
||||
E
|
||||
END_SER
|
||||
]]
|
||||
|
||||
local function check_write(tb, conf)
|
||||
f = mock_file:create()
|
||||
ser.write_to_fd(tb, f, conf or {})
|
||||
return f.content
|
||||
end
|
||||
|
||||
function string:split()
|
||||
local fields = {}
|
||||
self:gsub("[^\n]+", function(c) fields[#fields+1] = c end)
|
||||
return fields
|
||||
end
|
||||
|
||||
local function check_read(text)
|
||||
f = mock_file:create(text:split())
|
||||
return ser.read_from_fd(f)
|
||||
end
|
||||
|
||||
local noskip = [[LUA_SER v=1
|
||||
N1:T
|
||||
E
|
||||
E
|
||||
END_SER
|
||||
]]
|
||||
local skip = [[LUA_SER v=1
|
||||
E
|
||||
END_SER
|
||||
]]
|
||||
|
||||
describe("write_to_fd", function()
|
||||
it("serializes a table correctly", function()
|
||||
assert.equals(check_write(testtable), testser)
|
||||
end)
|
||||
it("does not skip empty tables", function()
|
||||
assert.equals(check_write({{}}),noskip)
|
||||
end)
|
||||
it("skips empty tables when needed", function()
|
||||
|
||||
assert.equals(check_write({{}},{skip_empty_tables=true}),skip)
|
||||
end)
|
||||
end)
|
||||
|
||||
describe("read_from_fd", function ()
|
||||
it("reads a table correctly", function()
|
||||
assert.same(check_read(testser),testtable)
|
||||
end)
|
||||
it("handles some edge cases correctly", function()
|
||||
assert.same(check_read(noskip), {{}})
|
||||
assert.same(check_read(skip), {})
|
||||
end)
|
||||
it("Read back table", function()
|
||||
local tb = {}
|
||||
for k=1,262 do
|
||||
tb[k] = { "Foo", "bar", k}
|
||||
end
|
||||
assert.same(check_read(check_write(tb)), tb)
|
||||
end)
|
||||
end)
|
Loading…
x
Reference in New Issue
Block a user