Module:File link/testcases

-- Unit tests for Module:File link. Click on the talk page to run the tests.

local mFileLink = require('Module:File link/sandbox') local main = mFileLink.main local _main = mFileLink._main local ScribuntoUnit = require('Module:ScribuntoUnit') local suite = ScribuntoUnit:new

-- Helper functions

function suite:assertError(func, ...) local success, result = pcall(func, ...) self:assertFalse(success) end

function suite:assertNotError(func, ...) local success, result = pcall(func, ...) self:assertTrue(success) end

function suite:assertPositionalParamExists(key) self:assertEquals(		_main{file = 'Example.png', [key] = 'some value'},		''	) end

function suite:assertNamedParamExists(key) self:assertEquals(		_main{file = 'Example.png', [key] = 'some value'},		''	) end

-- Basic tests

function suite:testBadInput self:assertError(_main) self:assertError(_main, 'foo') self:assertError(_main, false) end

function suite:testBadFile self:assertError(_main, {}) self:assertError(_main, {file = true}) self:assertError(_main, {file = 123}) end

function suite:testFile self:assertEquals(_main{file = 'Example.png'}, '') end

-- Positional parameters

function suite:testFormat self:assertPositionalParamExists('format') end

function suite:testLocation self:assertPositionalParamExists('location') end

function suite:testAlignment self:assertPositionalParamExists('alignment') end

function suite:testSize self:assertPositionalParamExists('size') end

function suite:testCaption self:assertPositionalParamExists('caption') end

-- Named parameters

function suite:testUpright self:assertNamedParamExists('upright') end

function suite:testLink self:assertNamedParamExists('link') end

function suite:testAlt self:assertNamedParamExists('alt') end

function suite:testPage self:assertNamedParamExists('page') end

function suite:testClass self:assertNamedParamExists('class') end

function suite:testLang self:assertNamedParamExists('lang') end

function suite:testStart self:assertNamedParamExists('start') end

function suite:testEnd self:assertNamedParamExists('end') end

function suite:testThumbtime self:assertNamedParamExists('thumbtime') end

-- Special parameters

function suite:testBorder self:assertEquals(		_main{file = 'Example.png', border = true},		''	) self:assertEquals(		_main{file = 'Example.png', border = 'yes'},		''	) self:assertEquals(		_main{file = 'Example.png', border = 'y'},		''	) self:assertEquals(		_main{file = 'Example.png', border = 'YES'},		''	) end

function suite:testFormatfileWithFormat self:assertEquals(		_main{file = 'Example.png', format = 'a format', formatfile = 'foo'},		''	) end

function suite:testFormatfileWithoutFormat self:assertEquals(		_main{file = 'Example.png', formatfile = 'foo'},		''	) end

-- Order

function suite:testOrder local params = { 'file', 'format', 'formatfile', 'border', 'location', 'alignment', 'size', 'upright', 'link', 'alt', 'page', 'class', 'lang', 'start', 'end', 'thumbtime', 'caption' }	local args = {} for i, param in ipairs(params) do args[param] = 'param ' .. i	end args.border = true -- border is a special case local result = _main(args)

-- Ugly hack to make border work whatever position it's in. local borderNum for i, v in ipairs(params) do		if v == 'border' then borderNum = i		end end result = result:gsub('border', 'param ' .. borderNum, 1)

local i = 0 for s in string.gmatch(result, 'param %d+') do		i = i + 1 suite:assertEquals(s, 'param ' .. i)	end end

return suite