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 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
|
-- Test some UCL stuff
context("UCL manipulation", function()
local ucl = require "ucl"
local parser = ucl.parser()
local res, err = parser:parse_string('{"key":"val"}')
assert(res)
local reply = parser:get_object_wrapped()
local expected = {
key = 'ohlol',
ololo = 'ohlol'
}
test("UCL transparent test: object", function()
assert_equal(tostring(reply), '{"key":"val"}')
assert_equal(reply:type(), 'object')
assert_equal(reply:at('key'):unwrap(), 'val')
reply.ololo = 'ohlol'
reply.ololo = 'ohlol'
reply.key = 'ohlol'
assert_equal(reply:at('key'):unwrap(), 'ohlol')
for k, v in reply:pairs() do
assert_equal(expected[k], v:unwrap())
end
end)
test("UCL transparent test: array", function()
parser = ucl.parser()
res, err = parser:parse_string('["e1","e2"]')
assert(res)
local ireply = parser:get_object_wrapped()
assert_equal(tostring(ireply), '["e1","e2"]')
assert_equal(ireply:type(), 'array')
ireply[1] = 1
ireply[1] = 1
ireply[1] = 1
ireply[1] = 1
ireply[1] = 1
ireply[ireply:len() + 1] = 100500
local iexpected = { 1, "e2", 100500 }
for k, v in ireply:ipairs() do
assert_equal(v:unwrap(), iexpected[k])
end
end)
test("UCL transparent test: concat", function()
reply.tbl = ireply
expected.tbl = iexpected
for k, v in reply:pairs() do
if type(expected[k]) == 'table' then
for kk, vv in v:ipairs() do
assert_equal(expected[k][kk], vv:unwrap())
end
else
assert_equal(expected[k], v:unwrap())
end
end
end)
test("UCL transparent test: implicit conversion array->object", function()
-- Assign empty table, so it'll be an array
reply.t = {}
assert_equal(reply.t:type(), 'array')
-- We can convert empty table to object
reply.t.test = 'test'
assert_equal(reply.t:type(), 'object')
assert_equal(reply.t.test:unwrap(), 'test')
end)
collectgarbage() -- To ensure we don't crash with asan
end)
|