lunatest/test.lua

222 lines
5.9 KiB
Lua

pcall(require, "luacov") --measure code coverage, if luacov is present
local lunatest = require "lunatest"
local assert_true, assert_false = lunatest.assert_true, lunatest.assert_false
local assert_diffvars = lunatest.assert_diffvars
local assert_boolean, assert_not_boolean = lunatest.assert_boolean, lunatest.assert_not_boolean
local assert_len, assert_not_len = lunatest.assert_len, lunatest.assert_not_len
local assert_match, assert_not_match = lunatest.assert_match, lunatest.assert_not_match
local assert_error = lunatest.assert_error
local assert_lt, assert_lte = lunatest.assert_lt, lunatest.assert_lte
local assert_gt, assert_gte = lunatest.assert_gt, lunatest.assert_gte
local assert_nil, assert_not_nil = lunatest.assert_nil, lunatest.assert_not_nil
local assert_equal, assert_not_equal = lunatest.assert_equal, lunatest.assert_not_equal
local assert_string, assert_not_string = lunatest.assert_string, lunatest.assert_not_string
local assert_metatable, assert_not_metatable = lunatest.assert_metatable, lunatest.assert_not_metatable
local assert_userdata, assert_not_userdata = lunatest.assert_userdata, lunatest.assert_not_userdata
local assert_thread, assert_not_thread = lunatest.assert_thread, lunatest.assert_not_thread
local assert_function, assert_not_function = lunatest.assert_function, lunatest.assert_not_function
local assert_table, assert_not_table = lunatest.assert_table, lunatest.assert_not_table
local assert_number, assert_not_number = lunatest.assert_number, lunatest.assert_not_number
local skip, fail = lunatest.skip, lunatest.fail
print '=============================='
print('To test just the random suite, add "-s random" to the command line')
print('To run just some tests, add "-t [pattern]"')
print '=============================='
lunatest.suite("suite-with-random-tests")
lunatest.suite("suite-hooks")
lunatest.suite("suite-hooks-fail")
function test_fail()
-- the true here is so the test run as a whole still succeeds.
fail("This one *should* fail.", true)
end
function test_assert()
assert_true(true)
end
function test_skip()
skip("(reason why this test was skipped)")
end
function test_assert_false()
assert_false(false)
end
function test_assert_nil()
assert_nil(nil)
end
function test_assert_not_nil()
assert_not_nil("foo")
end
function test_assert_equal()
assert_equal(4, 4)
end
function test_assert_equal_tolerance()
assert_equal(4, 4.0001, 0.0001, "Should approximately match")
end
function test_assert_not_equal()
assert_not_equal("perl", "quality")
end
function test_assert_gt()
assert_gt(8, 400)
end
function test_assert_gte()
assert_gte(8, 400)
assert_gte(8, 8)
end
function test_assert_lt()
assert_lt(8, -2)
end
function test_assert_lte()
assert_lte(8, -2)
assert_lte(8, 8)
end
function test_assert_len()
assert_len(3, { "foo", "bar", "baz" })
end
function test_assert_not_len()
assert_not_len(23, { "foo", "bar", "baz" })
end
function test_assert_match()
assert_match("oo", "string with foo in it")
end
function test_assert_not_match()
assert_not_match("abba zabba", "foo")
end
function test_assert_boolean()
assert_boolean(true)
assert_boolean(false)
end
function test_assert_not_boolean()
assert_not_boolean("cheesecake")
end
function test_assert_number()
assert_number(47)
assert_number(0)
assert_number(math.huge)
assert_number(-math.huge)
end
function test_assert_not_number()
assert_not_number(_G)
assert_not_number("abc")
assert_not_number({1, 2, 3})
assert_not_number(false)
assert_not_number(function () return 3 end)
end
function test_assert_string()
assert_string("yarn")
assert_string("")
end
function test_assert_not_string()
assert_not_string(23)
assert_not_string(true)
assert_not_string(false)
assert_not_string({"1", "2", "3"})
end
function test_assert_table()
assert_table({})
assert_table({"1", "2", "3"})
assert_table({ foo=true, bar=true, baz=true })
end
function test_assert_not_table()
assert_not_table(nil)
assert_not_table(23)
assert_not_table("lapdesk")
assert_not_table(false)
assert_not_table(function () return 3 end)
end
function test_assert_function()
assert_function(function() return "*splat*" end)
assert_function(string.format)
end
function test_assert_not_function()
assert_not_function(nil)
assert_not_function(23)
assert_not_function("lapdesk")
assert_not_function(false)
assert_not_function(coroutine.create(function () return 3 end))
assert_not_function({"1", "2", "3"})
assert_not_function({ foo=true, bar=true, baz=true })
end
function test_assert_thread()
assert_thread(coroutine.create(function () return 3 end))
end
function test_assert_not_thread()
assert_not_thread(nil)
assert_not_thread(23)
assert_not_thread("lapdesk")
assert_not_thread(false)
assert_not_thread(function () return 3 end)
assert_not_thread({"1", "2", "3"})
assert_not_thread({ foo=true, bar=true, baz=true })
end
function test_assert_userdata()
assert_userdata(io.open("test.lua", "r"))
end
function test_assert_not_userdata()
assert_not_userdata(nil)
assert_not_userdata(23)
assert_not_userdata("lapdesk")
assert_not_userdata(false)
assert_not_userdata(function () return 3 end)
assert_not_userdata({"1", "2", "3"})
assert_not_userdata({ foo=true, bar=true, baz=true })
end
function test_assert_metatable()
assert_metatable(getmetatable("any string"), "foo")
local t = { __index=string }
local val = setmetatable( { 1 }, t)
assert_metatable(t, val)
end
function test_assert_not_metatable()
assert_not_metatable(getmetatable("any string"), 23)
end
function test_assert_error()
assert_error(function ()
error("*crash!*")
end)
end
-- This caused a crash when matching a string with invalid % escapes.
-- Thanks to Diab Jerius for the bugfix.
function test_failure_formatting()
local inv_esc = "str with invalid escape %( in it"
assert_match(inv_esc, inv_esc, "Should fail but not crash")
end
lunatest.run()