diff options
author | Albert Krewinkel <albert@zeitkraut.de> | 2020-01-11 14:32:29 +0100 |
---|---|---|
committer | Albert Krewinkel <albert@zeitkraut.de> | 2020-01-11 17:42:32 +0100 |
commit | 57637f8aae6172e7713e885f41f4574cfa2770b3 (patch) | |
tree | 4f0d846bd56c0517571d91ce4f91fe1497508f9f | |
parent | 467ea4e02cbf09e47c619e59496a3b71142b9710 (diff) | |
download | pandoc-57637f8aae6172e7713e885f41f4574cfa2770b3.tar.gz |
Add tests for pandoc.List module
-rw-r--r-- | test/Tests/Lua/Module.hs | 2 | ||||
-rw-r--r-- | test/lua/module/pandoc-list.lua | 111 |
2 files changed, 113 insertions, 0 deletions
diff --git a/test/Tests/Lua/Module.hs b/test/Tests/Lua/Module.hs index baa81f4f0..8fc5965e0 100644 --- a/test/Tests/Lua/Module.hs +++ b/test/Tests/Lua/Module.hs @@ -21,6 +21,8 @@ tests :: [TestTree] tests = [ testPandocLua "pandoc" ("lua" </> "module" </> "pandoc.lua") + , testPandocLua "pandoc.List" + ("lua" </> "module" </> "pandoc-list.lua") , testPandocLua "pandoc.mediabag" ("lua" </> "module" </> "pandoc-mediabag.lua") , testPandocLua "pandoc.types" diff --git a/test/lua/module/pandoc-list.lua b/test/lua/module/pandoc-list.lua new file mode 100644 index 000000000..faa5e966e --- /dev/null +++ b/test/lua/module/pandoc-list.lua @@ -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), + }, +} |