Module:Util/testcases

local util = require('Module:Util') -- the module to be tested local ScribuntoUnit = require('Module:ScribuntoUnit') local suite = ScribuntoUnit:new

-- -- Tests: util.cast --

function suite:test_cast_boolean self:assertEquals(true, util.cast.boolean('true')) self:assertEquals(true, util.cast.boolean(5)) self:assertEquals(true, util.cast.boolean(true)) self:assertEquals(false, util.cast.boolean('false')) self:assertEquals(false, util.cast.boolean(0)) self:assertEquals(false, util.cast.boolean(false)) self:assertEquals(false, util.cast.boolean(nil)) end

function suite:test_cast_number -- boolean self:assertEquals(1, util.cast.number(true)) self:assertEquals(0, util.cast.number(false)) -- number self:assertEquals(5, 5) self:assertEquals(5, 5.0) -- string self:assertEquals(5, util.cast.number('5')) self:assertEquals(5, util.cast.number('5.0')) self:assertEquals(5, util.cast.number('5e0')) end

function suite:test_cast_number__error_invalid_number self:assertFalse(pcall(util.cast.number, 'wrong')) end

function suite:test_cast_number__error_min self:assertFalse(pcall(util.cast.number, 5, {min=6})) end

function suite:test_cast_number__error_max self:assertFalse(pcall(util.cast.number, 5, {max=4})) end

function suite:test_cast_number__invalid_with_default self:assertEquals(5, util.cast.number('wrong', {default=5})) end

-- -- Tests: util.args --

function suite:test_args_stats__value local args = {stat1_id='stat1', stat1_value='1'} util.args.stats(args, {}) self:assertEquals(args.stat1_value, 1) end

function suite:test_args_stats__min_max local args = {stat1_id='stat1', stat1_min='1', stat1_max='2'} util.args.stats(args, {}) self:assertEquals(args.stat1_min, 1) self:assertEquals(args.stat1_max, 2) self:assertEquals(args.stat1_avg, 1.5) end

function suite:test_args_stats__errors local args = {stat1_id='stat1', stat1_value='1', stat1_min='1'} self:assertFalse(pcall(util.args.stats, args, {})) args = {stat1_id='stat1', stat1_min='1'} self:assertFalse(pcall(util.args.stats, args, {})) end

-- -- Tests: util.args.from_cargo_map -- function suite:test_args_from_cargo_maps__cast_valid_fields local tpl_args = { string = 'string', integer = '12345', float = '12.345', boolean_true = 'true', boolean_false = 'false', }   local tpl_args_expected = { string = 'string', integer = 12345, float = 12.345, boolean_true = true, boolean_false = false, }   util.args.from_cargo_map{ tpl_args=tpl_args, frame=mw.getCurrentFrame, table_map={ table = 'test', order = {'string', 'integer', 'float', 'boolean_true', 'boolean_false'}, fields = { string = { type = 'String', field = 'string', },               integer = { type = 'Integer', field = 'integer', },               float = { type = 'Float', field = 'float', },               boolean_true = { type = 'Boolean', field = 'boolean_true', },               boolean_false = { type = 'Boolean', field = 'boolean_false', },           },        }    }    self:assertDeepEquals(tpl_args_expected, tpl_args, 'Casting / parsing of valid fields failed') end

function suite:test_args_from_cargo_maps__default_value local tpl_args = { }   local tpl_args_expected = { default = 5, }   util.args.from_cargo_map{ tpl_args=tpl_args, frame=mw.getCurrentFrame, table_map={ table = 'test', order = {'default'}, fields = { default = { type = 'Integer', field = 'default', default = 5 },           },        }    }    self:assertDeepEquals(tpl_args_expected, tpl_args, 'Setting default values for nil fields failed') end

function suite:test_args_from_cargo_maps__default_function local tpl_args = { }   local tpl_args_expected = { default = 5, }   util.args.from_cargo_map{ tpl_args=tpl_args, frame=mw.getCurrentFrame, table_map={ table = 'test', order = {'default'}, fields = { default = { type = 'Integer', field = 'default', default = function (tpl_args, frame) return 5 end },           },        }    }    self:assertDeepEquals(tpl_args_expected, tpl_args, 'Setting default values via function for nil fields failed') end

function suite:test_args_from_cargo_maps__func local tpl_args = { custom = 10 }   local tpl_args_expected = { custom = 5, }   util.args.from_cargo_map{ tpl_args=tpl_args, frame=mw.getCurrentFrame, table_map={ table = 'test', order = {'custom'}, fields = { custom = { type = 'Integer', field = 'custom', func = function (tpl_args, frame) return tpl_args.custom / 2 end },           },        }    }    self:assertDeepEquals(tpl_args_expected, tpl_args, 'Parsing via func failed') end

function suite:test_args_from_cargo_maps__name local tpl_args = { different_name = '5' }   local tpl_args_expected = { different_name = '5', custom = 5, }   util.args.from_cargo_map{ tpl_args=tpl_args, frame=mw.getCurrentFrame, table_map={ table = 'test', order = {'custom'}, fields = { custom = { type = 'Integer', field = 'custom', name = 'different_name', },           },        }    }    self:assertDeepEquals(tpl_args_expected, tpl_args, 'Parsing from a different name in tpl_args failed') end

function suite:test_args_from_cargo_maps__error_missing_in_order local tpl_args = { custom = '5', }   self:assertFalse(pcall(util.args.from_cargo_map, {}, { tpl_args=tpl_args, frame=mw.getCurrentFrame, table_map={ table = 'test', order = {}, fields = { custom = { type = 'Integer', field = 'custom', },           },        }    }), 'Field that is present in fields but missing in order should raise an error') end

function suite:test_args_from_cargo_maps__error_missing_in_fields local tpl_args = { custom = '5', }   self:assertFalse(pcall(util.args.from_cargo_map, {}, { tpl_args=tpl_args, frame=mw.getCurrentFrame, table_map={ table = 'test', order = {'custom'}, fields = { },       }    }), 'Field that is present in order but missing in fields should raise an error') end

-- -- Tests: util.html --

function suite:test_html_abbr self:assertEquals('test ', util.html.abbr('test', 'content', 'cls')) end

function suite:test_html_error self:assertEquals(' Module Error: Test ', util.html.error{msg='Test'}) self:assertEquals(' Module Error: ', util.html.error) end

-- -- Tests: util.misc --

function suite:test_misc_is_frame self:assertFalse(util.misc.is_frame, 'Test failed for nil') self:assertFalse(util.misc.is_frame(0), 'Test failed for number') self:assertFalse(util.misc.is_frame({}), 'Test failed for unrelated table') self:assertTrue(util.misc.is_frame(mw.getCurrentFrame), 'Test failed for correct frame object') end

function suite:test_misc_get_frame util.misc.get_frame end

function suite:test_misc_add_category self:assertEquals('', util.misc.add_category({'test'}, {ingore_blacklist=true})) end

-- -- Tests: util.smw --

function suite:test_smw_safeguard self:assertTrue(util.smw.safeguard, 'Should return true for module namespace') end

-- -- Tests: util.string --

function suite:test_string_split_args self:assertDeepEquals({'a','b',x='c','d', y='e'}, util.string.split_args('a,b,x=c,d,y=e'), 'Basic functionality test failed.') self:assertDeepEquals({'a','b',x='c','d', y='e'}, util.string.split_args('a;b;x=c;d;y=e', {sep=';'}), 'Separator failed.') self:assertFalse(pcall(util.string.split_args, 'a,b=1=1'), 'Testing errornous string failed (duplicate =).') end

-- -- Tests: util.table --

local data_array = { { 5, 10 },   { 6, 12 }, }

local data_assoc = { {       a = 5, b = 10, },   {        a = 6, b = 12, }, }

function suite:test_table_find_in_nested_array__assoc self:assertEquals(6, util.table.find_in_nested_array{tbl=data_assoc, key='a', value=6}) self:assertEquals(nil, util.table.find_in_nested_array{tbl=data_assoc, key='a', value=0}) self:assertEquals(data_assoc[2], util.table.find_in_nested_array{tbl=data_assoc, key='a', value=6, rtrvalue=false}) self:assertEquals(12, util.table.find_in_nested_array{tbl=data_assoc, key='a', value=6, rtrkey='b'}) self:assertEquals(6, util.table.find_in_nested_array{tbl=data_assoc, key={'a', 'b'}, value=12, rtrkey='a'}) end

--

return suite