mirror of
https://github.com/libretro/RetroArch.git
synced 2024-11-26 01:30:51 +00:00
85 lines
2.3 KiB
Lua
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
|