Module:Userbox/testcases
Appearance
![]() | This is the test cases page for the module Module:Userbox. Results of the test cases. |
-- Unit tests for [[Module:Userbox]]. Click talk page to run tests.
local ubx = require('Module:Userbox')
local ScribuntoUnit = require('Module:ScribuntoUnit')
local suite = ScribuntoUnit:new()
local userbox = ubx._userbox
local userbox2 = ubx['_userbox-2']
local userboxr = ubx['_userbox-r']
local render = ubx.render
--------------------------------------------------------------------------------
-- Helper functions
--------------------------------------------------------------------------------
local function inTag(s, tag)
-- Makes a pattern that tests whether s is inside a given html tag.
return '<' .. tag .. ' [^>]-' .. s
end
local function inAttr(s, attr)
-- Makes a pattern that tests whether s is inside a given html attribute.
return attr .. '="[^"]-' .. s
end
local function inTagAttr(s, tag, attr)
-- Makes a pattern that tests whether s is inside a given html tag
-- and a given html attribute.
return inTag(inAttr(s, attr), tag)
end
local function renderId(data)
data.showId = true
return render(data)
end
local function renderId2(data)
data.showId2 = true
return render(data)
end
--------------------------------------------------------------------------------
-- Render tests
--------------------------------------------------------------------------------
function suite:testRenderFloat()
self:assertStringContains(inTagAttr('float:right;', 'div', 'style'), render{float = 'right'})
end
function suite:testRenderBorder()
self:assertStringContains(inTagAttr('border:5px', 'div', 'style'), render{borderWidth = '5px'})
self:assertStringContains('solid red', render{borderColor='red'})
end
function suite:testRenderMargin()
self:assertStringContains(inTagAttr('margin:1px;', 'div', 'style'), render{})
end
function suite:testRenderWidth()
self:assertStringContains(inTagAttr('width:120px;', 'div', 'style'), render{width = '120px'})
end
function suite:testRenderUserboxClass()
self:assertStringContains(inTagAttr('wikipediauserbox', 'div', 'class'), render{})
end
function suite:testRenderBodyClass()
self:assertStringContains(inTagAttr('foobar', 'div', 'class'), render{bodyClass = 'foobar'})
end
function suite:testRenderBorderCollapse()
self:assertStringContains(inTagAttr('border-collapse:collapse;', 'table', 'style'), render{})
end
function suite:testRenderBorderCollapse()
self:assertStringContains(inTagAttr('width:120px;', 'table', 'style'), render{width = '120px'})
end
function suite:testRenderTableWidth()
self:assertStringContains(inTagAttr('width:120px;', 'table', 'style'), render{width = '120px'})
end
function suite:testRenderMarginBottom()
self:assertStringContains(inTagAttr('margin%-bottom:0;', 'table', 'style'), render{})
end
function suite:testRenderBackgroundColor()
self:assertStringContains(inTagAttr('background:red;', 'table', 'style'), render{backgroundColor = 'red'})
end
--------------------------------------------------------------------------------
-- Render id tests
--------------------------------------------------------------------------------
function suite:testRenderIdBorder()
self:assertStringContains(inTagAttr('border:0;', 'th', 'style'), renderId{})
end
function suite:testRenderIdWidth()
self:assertStringContains(inTagAttr('width:50px;', 'th', 'style'), renderId{idWidth = '50px'})
end
function suite:testRenderIdHeight()
self:assertStringContains(inTagAttr('height:50px;', 'th', 'style'), renderId{idHeight = '50px'})
end
function suite:testRenderIdBackgroundColor()
self:assertStringContains(inTagAttr('background:red;', 'th', 'style'), renderId{idBackgroundColor = 'red'})
end
function suite:testRenderIdTextAlign()
self:assertStringContains(inTagAttr('text%-align:center;', 'th', 'style'), renderId{idTextAlign = 'center'})
end
function suite:testRenderIdFontSize()
self:assertStringContains(inTagAttr('font%-size:16pt;', 'th', 'style'), renderId{idFontSize = '16pt'})
end
function suite:testRenderIdColor()
self:assertStringContains(inTagAttr('color:blue;', 'th', 'style'), renderId{idColor = 'blue'})
end
function suite:testRenderIdPadding()
self:assertStringContains(inTagAttr('padding:3px;', 'th', 'style'), renderId{idPadding = '3px'})
end
function suite:testRenderIdLineHeight()
self:assertStringContains(inTagAttr('line%-height:1.5em;', 'th', 'style'), renderId{idLineHeight = '1.5em'})
end
function suite:testRenderIdVerticalAlign()
self:assertStringContains(inTagAttr('vertical%-align:middle;', 'th', 'style'), renderId{})
end
function suite:testRenderIdOtherParams()
self:assertStringContains(inTagAttr('font%-family:serif;', 'th', 'style'), renderId{idOtherParams = 'font-family:serif'})
end
function suite:testRenderIdClass()
self:assertStringContains(inTagAttr('foobar', 'th', 'class'), renderId{idClass = 'foobar'})
end
function suite:testRenderId()
self:assertStringContains('<th[^>]->Id text.</th>', renderId{id = 'Id text.'})
end
--------------------------------------------------------------------------------
-- Render info tests
--------------------------------------------------------------------------------
function suite:testRenderInfoBorder()
self:assertStringContains(inTagAttr('border:0;', 'td', 'style'), render{})
end
function suite:testRenderInfoTextAlign()
self:assertStringContains(inTagAttr('text%-align:center;', 'td', 'style'), render{infoTextAlign = 'center'})
end
function suite:testRenderInfoFontSize()
self:assertStringContains(inTagAttr('font%-size:16pt;', 'td', 'style'), render{infoFontSize = '16pt'})
end
function suite:testRenderInfoPadding()
self:assertStringContains(inTagAttr('padding:3px;', 'td', 'style'), render{infoPadding = '3px'})
end
function suite:testRenderInfoHeight()
self:assertStringContains(inTagAttr('height:50px;', 'td', 'style'), render{infoHeight = '50px'})
end
function suite:testRenderInfoLineHeight()
self:assertStringContains(inTagAttr('line%-height:1.5em;', 'td', 'style'), render{infoLineHeight = '1.5em'})
end
function suite:testRenderInfoColor()
self:assertStringContains(inTagAttr('color:blue;', 'td', 'style'), render{infoColor = 'blue'})
end
function suite:testRenderInfoVerticalAlign()
self:assertStringContains(inTagAttr('vertical%-align:middle;', 'td', 'style'), render{})
end
function suite:testRenderInfoOtherParams()
self:assertStringContains(inTagAttr('font%-family:serif;', 'td', 'style'), render{infoOtherParams = 'font-family:serif'})
end
function suite:testRenderInfoClass()
self:assertStringContains(inTagAttr('foobar', 'td', 'class'), render{infoClass = 'foobar'})
end
function suite:testRenderInfo()
self:assertStringContains('<td[^>]->Info text.</td>', render{info = 'Info text.'})
end
--------------------------------------------------------------------------------
-- Render id2 tests
--------------------------------------------------------------------------------
function suite:testRenderId2Border()
self:assertStringContains(inTagAttr('border:0;', 'th', 'style'), renderId2{})
end
function suite:testRenderId2Width()
self:assertStringContains(inTagAttr('width:50px;', 'th', 'style'), renderId2{id2Width = '50px'})
end
function suite:testRenderId2Height()
self:assertStringContains(inTagAttr('height:50px;', 'th', 'style'), renderId2{id2Height = '50px'})
end
function suite:testRenderId2BackgroundColor()
self:assertStringContains(inTagAttr('background:red;', 'th', 'style'), renderId2{id2BackgroundColor = 'red'})
end
function suite:testRenderId2TextAlign()
self:assertStringContains(inTagAttr('text%-align:center;', 'th', 'style'), renderId2{id2TextAlign = 'center'})
end
function suite:testRenderId2FontSize()
self:assertStringContains(inTagAttr('font%-size:16pt;', 'th', 'style'), renderId2{id2FontSize = '16pt'})
end
function suite:testRenderId2Color()
self:assertStringContains(inTagAttr('color:blue;', 'th', 'style'), renderId2{id2Color = 'blue'})
end
function suite:testRenderId2Padding()
self:assertStringContains(inTagAttr('padding:3px;', 'th', 'style'), renderId2{id2Padding = '3px'})
end
function suite:testRenderId2LineHeight()
self:assertStringContains(inTagAttr('line%-height:1.5em;', 'th', 'style'), renderId2{id2LineHeight = '1.5em'})
end
function suite:testRenderId2VerticalAlign()
self:assertStringContains(inTagAttr('vertical%-align:middle;', 'th', 'style'), renderId2{})
end
function suite:testRenderId2OtherParams()
self:assertStringContains(inTagAttr('font%-family:serif;', 'th', 'style'), renderId2{id2OtherParams = 'font-family:serif'})
end
function suite:testRenderId2()
self:assertStringContains('<th[^>]->Id2 text.</th>', renderId2{id2 = 'Id2 text.'})
end
--------------------------------------------------------------------------------
-- Userbox div and table tag tests
--------------------------------------------------------------------------------
function suite:testUserboxFloat()
self:assertEquals('left', userbox{}.float)
self:assertEquals('right', userbox{float = 'right'}.float)
end
function suite:testUserboxBorderWidth()
self:assertEquals('1px', userbox{}.borderWidth)
self:assertEquals('2px', userbox{['border-width'] = '2'}.borderWidth)
self:assertEquals('3px', userbox{['border-s'] = '3'}.borderWidth)
end
function suite:testUserboxBorderWidthOrder()
self:assertEquals('2px', userbox{['border-width'] = '2', ['border-s'] = '3'}.borderWidth)
end
function suite:testUserboxBorderColor()
self:assertEquals('#999', userbox{}.borderColor)
self:assertEquals('red', userbox{['border-color'] = 'red'}.borderColor)
self:assertEquals('yellow', userbox{[1] = 'yellow'}.borderColor)
self:assertEquals('blue', userbox{['border-c'] = 'blue'}.borderColor)
self:assertEquals('green', userbox{['id-c'] = 'green'}.borderColor)
end
function suite:testUserboxBorderColorOrder()
self:assertEquals('red', userbox{['border-color'] = 'red', [1] = 'yellow', ['border-c'] = 'blue', ['id-c'] = 'green'}.borderColor)
self:assertEquals('yellow', userbox{[1] = 'yellow', ['border-c'] = 'blue', ['id-c'] = 'green'}.borderColor)
self:assertEquals('blue', userbox{['border-c'] = 'blue', ['id-c'] = 'green'}.borderColor)
end
function suite:testUserboxWidth()
self:assertEquals('238px', userbox{}.width)
self:assertEquals('236px', userbox{['border-s'] = '2'}.width)
end
function suite:testUserboxBodyClass()
self:assertEquals(nil, userbox{}.bodyClass)
self:assertEquals('foobar', userbox{bodyclass = 'foobar'}.bodyClass)
end
function suite:testUserboxBackgroundColor()
self:assertEquals('#eee', userbox{}.backgroundColor)
self:assertEquals('red', userbox{['info-background'] = 'red'}.backgroundColor)
self:assertEquals('yellow', userbox{[2] = 'yellow'}.backgroundColor)
self:assertEquals('blue', userbox{['info-c'] = 'blue'}.backgroundColor)
end
function suite:testUserboxBackgroundColorOrder()
self:assertEquals('red', userbox{['info-background'] = 'red', [2] = 'yellow', ['info-c'] = 'blue'}.backgroundColor)
self:assertEquals('yellow', userbox{[2] = 'yellow', ['info-c'] = 'blue'}.backgroundColor)
end
--------------------------------------------------------------------------------
-- Userbox id tests
--------------------------------------------------------------------------------
function suite:testUserboxId()
self:assertEquals('Id text.', userbox{id = 'Id text.'}.id)
self:assertEquals(nil, userbox{}.id)
end
function suite:testUserboxShowId()
self:assertEquals(true, userbox{id = 'Id text.'}.showId)
self:assertEquals(false, userbox{}.showId)
end
function suite:testUserboxIdWidth()
self:assertEquals('45px', userbox{}.idWidth)
self:assertEquals('50px', userbox{['logo-width'] = '50'}.idWidth)
self:assertEquals('55px', userbox{['id-w'] = '55'}.idWidth)
end
function suite:testUserboxIdWidthOrder()
self:assertEquals('50px', userbox{['logo-width'] = '50', ['id-w'] = '55'}.idWidth)
end
function suite:testUserboxIdHeight()
self:assertEquals('45px', userbox{}.idHeight)
self:assertEquals('50px', userbox{['logo-height'] = '50'}.idHeight)
self:assertEquals('55px', userbox{['id-h'] = '55'}.idHeight)
end
function suite:testUserboxIdHeightOrder()
self:assertEquals('50px', userbox{['logo-height'] = '50', ['id-h'] = '55'}.idHeight)
end
function suite:testUserboxIdBackgroundColor()
self:assertEquals('#ddd', userbox{}.idBackgroundColor)
self:assertEquals('red', userbox{['logo-background'] = 'red'}.idBackgroundColor)
self:assertEquals('yellow', userbox{[1] = 'yellow'}.idBackgroundColor)
self:assertEquals('blue', userbox{['id-c'] = 'blue'}.idBackgroundColor)
end
function suite:testUserboxIdBackgroundColorOrder()
self:assertEquals('red', userbox{['logo-background'] = 'red', [1] = 'yellow', ['id-c'] = 'blue'}.idBackgroundColor)
self:assertEquals('yellow', userbox{[1] = 'yellow', ['id-c'] = 'blue'}.idBackgroundColor)
end
function suite:testUserboxIdTextAlign()
self:assertEquals('center', userbox{}.idTextAlign)
self:assertEquals('right', userbox{['id-a'] = 'right'}.idTextAlign)
end
function suite:testUserboxIdFontSize()
self:assertEquals('14pt', userbox{}.idFontSize)
self:assertEquals('16pt', userbox{['logo-size'] = '16'}.idFontSize)
self:assertEquals('18pt', userbox{[5] = '18'}.idFontSize)
self:assertEquals('20pt', userbox{['id-s'] = '20'}.idFontSize)
end
function suite:testUserboxIdFontSizeOrder()
self:assertEquals('16pt', userbox{['logo-size'] = '16', [5] = '18', ['id-s'] = '20'}.idFontSize)
self:assertEquals('18pt', userbox{[5] = '18', ['id-s'] = '20'}.idFontSize)
end
function suite:testUserboxIdColor()
self:assertEquals('black', userbox{}.idColor)
self:assertEquals('red', userbox{['logo-color'] = 'red'}.idColor)
self:assertEquals('blue', userbox{['id-fc'] = 'blue'}.idColor)
end
function suite:testUserboxIdColorOrder()
self:assertEquals('red', userbox{['logo-color'] = 'red', ['id-fc'] = 'blue'}.idColor)
end
function suite:testUserboxIdPadding()
self:assertEquals('0 1px 0 0', userbox{}.idPadding)
self:assertEquals('1px 1px 1px 1px', userbox{['logo-padding'] = '1px 1px 1px 1px'}.idPadding)
self:assertEquals('2px 2px 2px 2px', userbox{['id-p'] = '2px 2px 2px 2px'}.idPadding)
end
function suite:testUserboxIdPaddingOrder()
self:assertEquals('1px 1px 1px 1px', userbox{['logo-padding'] = '1px 1px 1px 1px', ['id-p'] = '2px 2px 2px 2px'}.idPadding)
end
function suite:testUserboxIdLineHeight()
self:assertEquals('1.25em', userbox{}.idLineHeight)
self:assertEquals('1.5em', userbox{['logo-line-height'] = '1.5em'}.idLineHeight)
self:assertEquals('1.75em', userbox{['id-lh'] = '1.75em'}.idLineHeight)
end
function suite:testUserboxIdLineHeightOrder()
self:assertEquals('1.5em', userbox{['logo-line-height'] = '1.5em', ['id-lh'] = '1.75em'}.idLineHeight)
end
function suite:testUserboxIdOtherParams()
self:assertEquals(nil, userbox{}.idOtherParams)
self:assertEquals('font-family:serif', userbox{['logo-other-param'] = 'font-family:serif'}.idOtherParams)
self:assertEquals('font-family:times', userbox{['id-op'] = 'font-family:times'}.idOtherParams)
end
function suite:testUserboxIdOtherParamsOrder()
self:assertEquals('font-family:serif', userbox{['logo-other-param'] = 'font-family:serif', ['id-op'] = 'font-family:times'}.idOtherParams)
end
function suite:testUserboxIdClass()
self:assertEquals(nil, userbox{}.idClass)
self:assertEquals('foobar', userbox{['id-class'] = 'foobar'}.idClass)
end
return suite