tasty-lua-1.0.1: test/test-tasty.lua
local tasty = require 'tasty'
local arbitrary = tasty.arbitrary
local assert = tasty.assert
local forall = tasty.forall
local test = tasty.test_case
local group = tasty.test_group
return {
group 'assertors' {
group 'error_matches' {
test('succeeds if error matches', function ()
assert.error_matches(
function () error 'Futurama' end,
'Futura'
)
end),
test('fails if function succeeds', function ()
local success = pcall(assert.error_matches, function () end, '')
assert.is_falsy(success)
end)
},
group 'error_satisfies' {
test('succeeds if error satisfies the assertion', function ()
assert.error_satisfies(
function () error(true) end,
assert.is_true
)
end),
test('fails if function succeeds', function ()
local success = pcall(assert.error_satifies, function () end, assert)
assert.is_falsy(success)
end)
},
group 'error_equals' {
test('succeeds if error is equal', function ()
assert.error_equals(
function () error(42) end,
42
)
end),
test('fails if function succeeds', function ()
local success = pcall(assert.error_equals, function () end, '')
assert.is_falsy(success)
end)
},
group 'is_truthy' {
test('zero is truthy', function() assert.is_truthy(0) end),
test('true is truthy', function() assert.is_truthy(true) end),
test('empty string is truthy', function() assert.is_truthy '' end),
},
group 'is_falsy' {
test('false is falsy', function() assert.is_falsy(false) end),
test('nil is falsy', function() assert.is_falsy(nil) end),
},
group 'is_true' {
test('succeeds on `true`', function() assert.is_true(true) end),
test('fails on 1', function()
local success = pcall(assert.is_true, 1)
assert.is_true(not success)
end),
},
group 'is_false' {
test('succeeds on `false`', function() assert.is_false(false) end),
test('fails on nil', function()
local success = pcall(assert.is_false, nil)
assert.is_false(success)
end),
},
group 'is_nil' {
test('nil is nil', function () assert.is_nil(nil) end)
},
group 'are_equal' {
test('equal strings', function () assert.are_equal('test', 'test') end)
},
group 'are_same' {
test('numbers', function ()
assert.are_same(1, 1)
end),
test('nil', function ()
assert.are_same(nil, nil)
end),
test('table', function ()
assert.are_same({2, 3, 5, 7}, {2, 3, 5, 7})
end),
test('unequal numbers', function ()
assert.error_matches(
function () assert.are_same(0, 1) end,
"expected same values, got 0 and 1"
)
end),
test('tables', function ()
assert.error_matches(
function () assert.are_same({}, {1}) end,
"expected same values, got"
)
end),
},
},
group 'access via subtable' {
test('assert.is.truthy', function ()
assert(assert.is.truthy == assert.is_truthy)
end),
test('assert.are.equal', function ()
assert(assert.are.equal == assert.are_equal)
end),
test('assert.error.matches', function ()
assert(assert.error.matches == assert.error_matches)
end),
},
group 'test currying' {
test 'test name' (
function ()
return
end
)
},
group 'property testing'
{
test(
'booleans',
forall(
arbitrary.boolean,
function (b) return type(b) == 'boolean' end
)
),
test(
'numbers',
forall(
arbitrary.number,
function (n) return type(n) == 'number' end
)
),
test(
'integers',
forall(
arbitrary.integer,
function (i) return type(i) == 'number' and math.floor(i) == i end
)
),
test(
'strings',
forall(
arbitrary.string,
function (s) return type(s) == 'string' end
)
),
test(
'custom',
forall(
arbitrary.custom,
function (t)
return type(t) == 'table' and type(t.int) == 'number'
end
)
),
test(
'list of integers',
forall(
arbitrary.integer_list,
function (nums)
if type(nums) ~= 'table' then return false end
for _, i in ipairs(nums) do
if type(i) ~= 'number' then
return false
end
end
return true
end
)
)
}
}