RetroArch/libretro-db/tests.lua
2015-02-19 00:47:19 +01:00

85 lines
2.3 KiB
Lua

local testlib = require 'testlib'
local DB_FILE = "/tmp/tmp.rdb"
local function create_db(data)
local i = 1;
testlib.create_db(DB_FILE, function()
if i > #data then
return
end
res = data[i]
i = i + 1
return res
end)
local db, err = testlib.RarchDB(DB_FILE)
if err then
error(err)
end
return db
end
local function assert_equals(a, b)
if type(a) ~= type(b) then
return false
end
if type(a) == "table" then
for k, v in pairs(a) do
if not assert_equals(v, b[k]) then
return
end
end
return
else
return assert(a == b, tostring(a) .. " != " .. tostring(b))
end
end
function query_test(data, result, query)
return function()
local db = create_db(data)
local c, err = db:query(query)
if err then
error(err)
end
local i = 0
for item in c:iter() do
i = i + 1
assert_equals(item, data[i])
end
assert(i == #result, "expected " .. tostring(#result) .. " results got " .. tostring(i))
end
end
tests = {
test_list_all = function()
data = {
{field=true},
{field=false},
}
local db = create_db(data)
local c = db:list_all()
local i = 1
for item in c:iter() do
assert_equals(item, data[i])
i = i + 1
end
end,
test_boolean_field = query_test({{a=true},{a=false}}, {{a=true}}, "{a:true}"),
test_number_field = query_test({{a=3}, {a=4}}, {{a=3}}, "{'a':3}"),
test_empty_query = query_test({{a=3}, {a=4}}, {{a=3}, {a=4}}, " {} "),
test_string_field = query_test({{a="test"}, {a=4}}, {{a="test"}}, "{'a':'test'}"),
test_or_operator = query_test({{a="test"}, {a=4}, {a=5}}, {{a="test"}, {a=4}}, "{'a':or('test', 4)}"),
test_or_between = query_test({{a="test"}, {a=4}, {a=5}, {}}, {{a="test"}, {a=4}, {a=5}}, "{'a':or('test', between(2, 7))}"),
test_glob = query_test({{a="abc"}, {a="acd"}}, {{a="abc"}}, "{'a':glob('*b*')}"),
test_root_function = query_test({{a=1}, {b=4}, {a=5}, {}}, {{a=1}, {b=4}}, "or({a:1},{b:4})"),
}
for name, cb in pairs(tests) do
local ok, err = pcall(cb)
if ok then
print("V", name)
else
print("X", name, ":", err)
end
end