Add tests for pandoc.List module
This commit is contained in:
parent
467ea4e02c
commit
57637f8aae
2 changed files with 113 additions and 0 deletions
|
@ -21,6 +21,8 @@ tests :: [TestTree]
|
||||||
tests =
|
tests =
|
||||||
[ testPandocLua "pandoc"
|
[ testPandocLua "pandoc"
|
||||||
("lua" </> "module" </> "pandoc.lua")
|
("lua" </> "module" </> "pandoc.lua")
|
||||||
|
, testPandocLua "pandoc.List"
|
||||||
|
("lua" </> "module" </> "pandoc-list.lua")
|
||||||
, testPandocLua "pandoc.mediabag"
|
, testPandocLua "pandoc.mediabag"
|
||||||
("lua" </> "module" </> "pandoc-mediabag.lua")
|
("lua" </> "module" </> "pandoc-mediabag.lua")
|
||||||
, testPandocLua "pandoc.types"
|
, testPandocLua "pandoc.types"
|
||||||
|
|
111
test/lua/module/pandoc-list.lua
Normal file
111
test/lua/module/pandoc-list.lua
Normal file
|
@ -0,0 +1,111 @@
|
||||||
|
local tasty = require 'tasty'
|
||||||
|
local List = require 'pandoc.List'
|
||||||
|
|
||||||
|
local assert = tasty.assert
|
||||||
|
local test = tasty.test_case
|
||||||
|
local group = tasty.test_group
|
||||||
|
|
||||||
|
return {
|
||||||
|
group 'new' {
|
||||||
|
test('make table usable as list', function ()
|
||||||
|
local test = List:new{1, 1, 2, 3, 5}
|
||||||
|
assert.are_same(
|
||||||
|
{1, 1, 4, 9, 25},
|
||||||
|
test:map(function (x) return x^2 end)
|
||||||
|
)
|
||||||
|
end),
|
||||||
|
test('return empty list if no argument is given', function ()
|
||||||
|
assert.are_same({}, List:new())
|
||||||
|
end),
|
||||||
|
test('metatable of result is pandoc.List', function ()
|
||||||
|
local test = List:new{5}
|
||||||
|
assert.are_equal(List, getmetatable(test))
|
||||||
|
end)
|
||||||
|
},
|
||||||
|
|
||||||
|
group 'includes' {
|
||||||
|
test('finds elements in list', function ()
|
||||||
|
local lst = List:new {'one', 'two', 'three'}
|
||||||
|
assert.is_truthy(lst:includes('one'))
|
||||||
|
assert.is_truthy(lst:includes('two'))
|
||||||
|
assert.is_truthy(lst:includes('three'))
|
||||||
|
assert.is_falsy(lst:includes('four'))
|
||||||
|
end)
|
||||||
|
},
|
||||||
|
|
||||||
|
group 'clone' {
|
||||||
|
test('changing the clone does not affect original', function ()
|
||||||
|
local orig = List:new {23, 42}
|
||||||
|
local copy = orig:clone()
|
||||||
|
copy[1] = 5
|
||||||
|
assert.are_same({23, 42}, orig)
|
||||||
|
assert.are_same({5, 42}, copy)
|
||||||
|
end),
|
||||||
|
test('result is a list', function ()
|
||||||
|
local orig = List:new {23, 42}
|
||||||
|
assert.are_equal(List, getmetatable(orig:clone()))
|
||||||
|
end),
|
||||||
|
},
|
||||||
|
|
||||||
|
group 'find' {
|
||||||
|
test('returns element and index if found', function ()
|
||||||
|
local list = List:new {5, 23, 71}
|
||||||
|
local elem, idx = list:find(71)
|
||||||
|
assert.are_same(71, elem)
|
||||||
|
assert.are_same(3, idx)
|
||||||
|
end),
|
||||||
|
test('respects start index', function ()
|
||||||
|
local list = List:new {19, 23, 29, 71}
|
||||||
|
assert.are_equal(23, list:find(23, 1))
|
||||||
|
assert.are_equal(23, list:find(23, 2))
|
||||||
|
assert.is_nil(list:find(23, 3))
|
||||||
|
end),
|
||||||
|
test('returns nil if element not found', function ()
|
||||||
|
assert.is_nil((List:new {18, 20, 22, 0, 24}):find('0'))
|
||||||
|
end),
|
||||||
|
},
|
||||||
|
|
||||||
|
group 'find_if' {
|
||||||
|
test('returns element and index if found', function ()
|
||||||
|
local perm_prime = List:new {2, 3, 5, 7, 11, 13, 17, 31, 37, 71}
|
||||||
|
local elem, idx = perm_prime:find_if(function (x) return x >= 10 end)
|
||||||
|
assert.are_same(11, elem)
|
||||||
|
assert.are_same(5, idx)
|
||||||
|
end),
|
||||||
|
test('returns nil if element not found', function ()
|
||||||
|
local is_null = function (n) return List.includes({23,35,46,59}, n) end
|
||||||
|
assert.is_nil((List:new {18, 20, 22, 24, 27}):find_if(is_null))
|
||||||
|
end),
|
||||||
|
},
|
||||||
|
|
||||||
|
group 'extend' {
|
||||||
|
test('extends list with other list', function ()
|
||||||
|
local primes = List:new {2, 3, 5, 7}
|
||||||
|
primes:extend {11, 13, 17}
|
||||||
|
assert.are_same({2, 3, 5, 7, 11, 13, 17}, primes)
|
||||||
|
end)
|
||||||
|
},
|
||||||
|
|
||||||
|
group 'map' {
|
||||||
|
test('applies function to elements', function ()
|
||||||
|
local primes = List:new {2, 3, 5, 7}
|
||||||
|
local squares = primes:map(function (x) return x^2 end)
|
||||||
|
assert.are_same({4, 9, 25, 49}, squares)
|
||||||
|
end),
|
||||||
|
test('leaves original list unchanged', function ()
|
||||||
|
local primes = List:new {2, 3, 5, 7}
|
||||||
|
local squares = primes:map(function (x) return x^2 end)
|
||||||
|
assert.are_same({2, 3, 5, 7}, primes)
|
||||||
|
end)
|
||||||
|
},
|
||||||
|
|
||||||
|
group 'filter' {
|
||||||
|
test('keep elements for which property is truthy', function ()
|
||||||
|
local is_small_prime = function (x)
|
||||||
|
return List.includes({2, 3, 5, 7}, x)
|
||||||
|
end
|
||||||
|
local numbers = List:new {4, 7, 2, 9, 5, 11}
|
||||||
|
assert.are_same({7, 2, 5}, numbers:filter(is_small_prime))
|
||||||
|
end),
|
||||||
|
},
|
||||||
|
}
|
Loading…
Reference in a new issue