Module:CSV/testcases

From Wikipedia

Documentation for this module may be created at Module:CSV/testcases/doc

-- Example Unit tests for [[Module:Bananas]]. Click talk page to run tests.
local p = require('Module:UnitTests')
local CSV = require('Module:CSV')
 
local function test(name, csvString, opts, expected)
    p:equals_deep(name, CSV.parse(csvString, opts), expected, {nowiki = true})
end
 
function p:test_all()
    test('Basic numbers', '1,2,3\n4,5,6\n7,8,9', nil, {{'1','2','3'}, {'4','5','6'}, {'7','8','9'}})
    test('Basic strings', 'Lorem,ipsum,dolor,sit\namet,consectetur\nadipisicing,elit,sed,do,eiusmod', nil, {{'Lorem','ipsum','dolor','sit'}, {'amet','consectetur'}, {'adipisicing','elit','sed','do','eiusmod'}})
    test('Quoted strings', 'Lorem,"ipsum, dolor, sit",amet\nConsectetur,adipisicing,"elit, sed,",eiusmod', nil, {{'Lorem','ipsum, dolor, sit','amet'},{'Consectetur','adipisicing','elit, sed,','eiusmod'}})
    test('Empty field', '1,2,,3', nil, {{'1', '2', '', '3'}})
    test('Trailing empty field', '1,2,3,', nil, {{'1', '2', '3', ''}})
    -- times out: test('Leading empty field', ',1,2,3', nil, {{'', '1', '2', '3'}})
    test('Empty record (ignored)', '1,2,3\n\n4,5,6', nil, {{'1','2','3'},{'4','5','6'}})
    test('Empty record (not ignored)', '1,2,3\n\n4,5,6', {ignoreEmptyLines = false}, {{'1','2','3'},{''},{'4','5','6'}})
    test('Escaped quote', '1,\"2\"\"3\",4', nil, {{'1', '2"3', '4'}})
    test('Specified delimiter', '1;2;3\n4;5;6', {delimiter = ';'}, {{'1','2','3'},{'4','5','6'}})
    test('Specified linebreak', '1,2,3/4,5,6', {linebreak = '/'}, {{'1','2','3'},{'4','5','6'}})
    test('Specified quote char', '1,`2,3`,4', {quotechar = '`'}, {{'1', '2,3', '4'}})
    test('Linebreak in field', '1,"2\n3",4', nil, {{'1', '2\n3', '4'}})
end
 
return p