Jump to content

Module:File link/testcases: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
add tests for the name method
make test cases for the new sandbox version
Line 1: Line 1:
-- Unit tests for [[Module:File link]]. Click on the talk page to run the tests.
-- Unit tests for [[Module:File link]]. Click on the talk page to run the tests.


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

--------------------------------------------------------------------------------
-- Default values
--------------------------------------------------------------------------------

local d = {}
d.name = 'Example.png'

-- Default types
d.string = 'foo'
d.number = 5
d.bool = true
d.tbl = {}
d.func = function () return end


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Helper functions
-- Helper functions
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

function suite.dummyObject(args)
local obj = {theName = d.name}
for k, v in pairs(args or {}) do
obj[k] = v
end
return obj
end


function suite:assertError(func, ...)
function suite:assertError(func, ...)
Line 39: Line 19:
local success, result = pcall(func, ...)
local success, result = pcall(func, ...)
self:assertTrue(success)
self:assertTrue(success)
end

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

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


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Basic tests
-- Test fileLink.new
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------


function suite:testNewInputTypes()
function suite:testBadInput()
self:assertError(_main)
self:assertNotError(mFileLink.new, nil)
self:assertNotError(mFileLink.new, d.string)
self:assertError(_main, 'foo')
self:assertError(mFileLink.new, d.number)
self:assertError(_main, false)
self:assertError(mFileLink.new, d.bool)
self:assertError(mFileLink.new, d.tbl)
self:assertError(mFileLink.new, d.func)
end
end


function suite:testNewFilename()
function suite:testBadFile()
self:assertError(_main, {})
self:assertStringContains(d.name, mFileLink.new(d.name):render())
self:assertError(_main, {file = true})
self:assertError(_main, {file = 123})
end

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


--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
-- Positional parameters
-- Test name
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------


function suite:testNameInputTypes()
function suite:testFormat()
self:assertPositionalParamExists('format')
local obj = mFileLink.new()
self:assertNotError(obj.name, obj, d.string)
self:assertError(obj.name, obj, nil)
self:assertError(obj.name, obj, d.number)
self:assertError(obj.name, obj, d.bool)
self:assertError(obj.name, obj, d.tbl)
self:assertError(obj.name, obj, d.func)
end
end


function suite:testNameSelf()
function suite:testBorder()
self:assertPositionalParamExists('border')
local obj = mFileLink.new()
self:assertError(obj.name, {}, d.string)
end
end


function suite:testName()
function suite:testLocation()
self:assertPositionalParamExists('location')
local obj = mFileLink.new()
obj:name(d.name)
self:assertStringContains(d.name, obj:render())
end
end


function suite:testNameChaining()
function suite:testAlignment()
self:assertPositionalParamExists('alignment')
local obj = mFileLink.new()
end
self:assertEquals(obj, obj:name(d.name))

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:testFormatfileWithFormat()
self:assertEquals(
_main{file = 'Example.png', format = 'a format', formatfile = 'foo'},
'[[File:Example.png|a format=foo]]'
)
end

function suite:testFormatfileWithoutFormat()
self:assertEquals(
_main{file = 'Example.png', formatfile = 'foo'},
'[[File:Example.png]]'
)
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
local result = _main(args)
local i = 0
for s in string.gmatch(result, 'param %d+') do
i = i + 1
suite:assertEquals(s, 'param ' .. i)
end
end
end



Revision as of 12:24, 18 December 2014

-- 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'},
		'[[File:Example.png|some value]]'
	)
end

function suite:assertNamedParamExists(key)
	self:assertEquals(
		_main{file = 'Example.png', [key] = 'some value'},
		'[[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'}, '[[File:Example.png]]')
end

--------------------------------------------------------------------------------
-- Positional parameters
--------------------------------------------------------------------------------

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

function suite:testBorder()
	self:assertPositionalParamExists('border')
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:testFormatfileWithFormat()
	self:assertEquals(
		_main{file = 'Example.png', format = 'a format', formatfile = 'foo'},
		'[[File:Example.png|a format=foo]]'
	)
end

function suite:testFormatfileWithoutFormat()
	self:assertEquals(
		_main{file = 'Example.png', formatfile = 'foo'},
		'[[File:Example.png]]'
	)
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
	local result = _main(args)
	local i = 0
	for s in string.gmatch(result, 'param %d+') do
		i = i + 1
		suite:assertEquals(s, 'param ' .. i)
	end
end

return suite