Module:Userbox/testcases

-- -- -- Unit tests for Module:Userbox/sandbox. 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 local categories = ubx.categories

-- 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', 'td', 'style'), renderId{}) end

function suite:testRenderIdWidth self:assertStringContains(inTagAttr('width:50px', 'td', 'style'), renderId{idWidth = '50px'}) end

function suite:testRenderIdHeight self:assertStringContains(inTagAttr('height:50px', 'td', 'style'), renderId{idHeight = '50px'}) end

function suite:testRenderIdBackgroundColor self:assertStringContains(inTagAttr('background:red', 'td', 'style'), renderId{idBackgroundColor = 'red'}) end

function suite:testRenderIdTextAlign self:assertStringContains(inTagAttr('text%-align:center', 'td', 'style'), renderId{idTextAlign = 'center'}) end

function suite:testRenderIdFontSize self:assertStringContains(inTagAttr('font%-size:16pt', 'td', 'style'), renderId{idFontSize = '16pt'}) end

function suite:testRenderIdColor self:assertStringContains(inTagAttr('color:blue', 'td', 'style'), renderId{idColor = 'blue'}) end

function suite:testRenderIdPadding self:assertStringContains(inTagAttr('padding:3px', 'td', 'style'), renderId{idPadding = '3px'}) end

function suite:testRenderIdLineHeight self:assertStringContains(inTagAttr('line%-height:1.5em', 'td', 'style'), renderId{idLineHeight = '1.5em'}) end

function suite:testRenderIdVerticalAlign self:assertStringContains(inTagAttr('vertical%-align:middle', 'td', 'style'), renderId{}) end

function suite:testRenderIdOtherParams self:assertStringContains(inTagAttr('font%-family:serif', 'td', 'style'), renderId{idOtherParams = 'font-family:serif'}) end

function suite:testRenderIdClass self:assertStringContains(inTagAttr('foobar', 'td', 'class'), renderId{idClass = 'foobar'}) end

function suite:testRenderId self:assertStringContains(']->Id text. ', 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(']->Info text. ', render{info = 'Info text.'}) end

-- Render id2 tests

function suite:testRenderId2Border self:assertStringContains(inTagAttr('border:0', 'td', 'style'), renderId2{}) end

function suite:testRenderId2Width self:assertStringContains(inTagAttr('width:50px', 'td', 'style'), renderId2{id2Width = '50px'}) end

function suite:testRenderId2Height self:assertStringContains(inTagAttr('height:50px', 'td', 'style'), renderId2{id2Height = '50px'}) end

function suite:testRenderId2BackgroundColor self:assertStringContains(inTagAttr('background:red', 'td', 'style'), renderId2{id2BackgroundColor = 'red'}) end

function suite:testRenderId2TextAlign self:assertStringContains(inTagAttr('text%-align:center', 'td', 'style'), renderId2{id2TextAlign = 'center'}) end

function suite:testRenderId2FontSize self:assertStringContains(inTagAttr('font%-size:16pt', 'td', 'style'), renderId2{id2FontSize = '16pt'}) end

function suite:testRenderId2Color self:assertStringContains(inTagAttr('color:blue', 'td', 'style'), renderId2{id2Color = 'blue'}) end

function suite:testRenderId2Padding self:assertStringContains(inTagAttr('padding:3px', 'td', 'style'), renderId2{id2Padding = '3px'}) end

function suite:testRenderId2LineHeight self:assertStringContains(inTagAttr('line%-height:1.5em', 'td', 'style'), renderId2{id2LineHeight = '1.5em'}) end

function suite:testRenderId2VerticalAlign self:assertStringContains(inTagAttr('vertical%-align:middle', 'td', 'style'), renderId2{}) end

function suite:testRenderId2OtherParams self:assertStringContains(inTagAttr('font%-family:serif', 'td', 'style'), renderId2{id2OtherParams = 'font-family:serif'}) end

function suite:testRenderId2 self:assertStringContains(']->Id2 text. ', 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: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: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

-- Userbox id tests

function suite:testUserboxId self:assertEquals(nil, userbox{}.id) self:assertEquals('Id text.', userbox{logo = 'Id text.'}.id) self:assertEquals('More id text.', userbox{[3] = 'More id text.'}.id) self:assertEquals('Even more id text.', userbox{id = 'Even more id text.'}.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: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: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: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: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: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: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: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:testUserboxIdClass self:assertEquals(nil, userbox{}.idClass) self:assertEquals('foobar', userbox{['id-class'] = 'foobar'}.idClass) end

-- Userbox info tests

function suite:testUserboxInfo self:assertEquals(" ", userbox{}.info) self:assertEquals('Info text.', userbox{info = 'Info text.'}.info) self:assertEquals('More info text.', userbox{[4] = 'More info text.'}.info) end

function suite:testUserboxInfoTextAlign self:assertEquals('left', userbox{}.infoTextAlign) self:assertEquals('right', userbox{['info-a'] = 'right'}.infoTextAlign) end

function suite:testUserboxInfoFontSize self:assertEquals('8pt', userbox{}.infoFontSize) self:assertEquals('10pt', userbox{['info-size'] = '10'}.infoFontSize) self:assertEquals('12pt', userbox{['info-s'] = '12'}.infoFontSize) end

function suite:testUserboxInfoHeight self:assertEquals('45px', userbox{}.infoHeight) self:assertEquals('50px', userbox{['logo-height'] = '50'}.infoHeight) self:assertEquals('55px', userbox{['id-h'] = '55'}.infoHeight) end

function suite:testUserboxInfoPadding self:assertEquals('0 4px 0 4px', userbox{}.infoPadding) self:assertEquals('1px 1px 1px 1px', userbox{['info-padding'] = '1px 1px 1px 1px'}.infoPadding) self:assertEquals('2px 2px 2px 2px', userbox{['info-p'] = '2px 2px 2px 2px'}.infoPadding) end

function suite:testUserboxInfoLineHeight self:assertEquals('1.25em', userbox{}.infoLineHeight) self:assertEquals('1.5em', userbox{['info-line-height'] = '1.5em'}.infoLineHeight) self:assertEquals('1.75em', userbox{['info-lh'] = '1.75em'}.infoLineHeight) end

function suite:testUserboxInfoColor self:assertEquals('black', userbox{}.infoColor) self:assertEquals('red', userbox{['info-color'] = 'red'}.infoColor) self:assertEquals('blue', userbox{['info-fc'] = 'blue'}.infoColor) end

function suite:testUserboxInfoOtherParams self:assertEquals(nil, userbox{}.infoOtherParams) self:assertEquals('font-family:serif', userbox{['info-other-param'] = 'font-family:serif'}.infoOtherParams) self:assertEquals('font-family:times', userbox{['info-op'] = 'font-family:times'}.infoOtherParams) end

function suite:testUserboxInfoClass self:assertEquals(nil, userbox{}.infoClass) self:assertEquals('foobar', userbox{['info-class'] = 'foobar'}.infoClass) end

-- Userbox2 div and table tag tests

function suite:testUserbox2Float self:assertEquals('left', userbox2{}.float) self:assertEquals('right', userbox2{float = 'right'}.float) end

function suite:testUserbox2BorderWidth self:assertEquals('1px', userbox2{}.borderWidth) self:assertEquals('2px', userbox2{[9] = '2'}.borderWidth) self:assertEquals('3px', userbox2{['border-s'] = '3'}.borderWidth) end

function suite:testUserbox2BorderColor self:assertEquals('#999999', userbox2{}.borderColor) self:assertEquals('red', userbox2{[1] = 'red'}.borderColor) self:assertEquals('blue', userbox2{['border-c'] = 'blue'}.borderColor) self:assertEquals('green', userbox2{['id1-c'] = 'green'}.borderColor) end

function suite:testUserbox2Width self:assertEquals('238px', userbox2{}.width) end

function suite:testUserbox2BodyClass self:assertEquals(nil, userbox2{}.bodyClass) self:assertEquals('foobar', userbox2{bodyclass = 'foobar'}.bodyClass) end

function suite:testUserbox2BackgroundColor self:assertEquals('#eeeeee', userbox2{}.backgroundColor) self:assertEquals('yellow', userbox2{[2] = 'yellow'}.backgroundColor) self:assertEquals('blue', userbox2{['info-c'] = 'blue'}.backgroundColor) end

-- Userbox2 id tests

function suite:testUserbox2Id self:assertEquals('id1', userbox2{}.id) self:assertEquals('Id text.', userbox2{logo = 'Id text.'}.id) self:assertEquals('More id text.', userbox2{[3] = 'More id text.'}.id) self:assertEquals('Even more id text.', userbox2{id1 = 'Even more id text.'}.id) end function suite:testUserbox2ShowId self:assertEquals(true, userbox2{}.showId) end

function suite:testUserbox2IdWidth self:assertEquals('45px', userbox2{}.idWidth) self:assertEquals('50px', userbox2{['id1-w'] = '50'}.idWidth) end

function suite:testUserbox2IdHeight self:assertEquals('45px', userbox2{}.idHeight) self:assertEquals('50px', userbox2{['id-h'] = '50'}.idHeight) end

function suite:testUserbox2IdBackgroundColor self:assertEquals('#dddddd', userbox2{}.idBackgroundColor) self:assertEquals('yellow', userbox2{[1] = 'yellow'}.idBackgroundColor) self:assertEquals('blue', userbox2{['id1-c'] = 'blue'}.idBackgroundColor) end

function suite:testUserbox2IdTextAlign self:assertEquals('center', userbox2{}.idTextAlign) end

function suite:testUserbox2IdFontSize self:assertEquals('14pt', userbox2{}.idFontSize) self:assertEquals('16pt', userbox2{['id1-s'] = '16'}.idFontSize) end

function suite:testUserbox2IdLineHeight self:assertEquals('1.25em', userbox2{}.idLineHeight) self:assertEquals('1.5em', userbox2{['id1-lh'] = '1.5em'}.idLineHeight) end

function suite:testUserbox2IdColor self:assertEquals('black', userbox2{}.idColor) self:assertEquals('blue', userbox2{['id1-fc'] = 'blue'}.idColor) end

function suite:testUserbox2IdPadding self:assertEquals('0 1px 0 0', userbox2{}.idPadding) self:assertEquals('1px 1px 1px 1px', userbox2{['id1-p'] = '1px 1px 1px 1px'}.idPadding) end

function suite:testUserbox2IdOtherParams self:assertEquals(nil, userbox2{}.idOtherParams) self:assertEquals('font-family:times', userbox2{['id1-op'] = 'font-family:times'}.idOtherParams) end

-- Userbox2 info tests

function suite:testUserbox2Info self:assertEquals(" ", userbox2{}.info) self:assertEquals('Info text.', userbox2{[4] = 'Info text.'}.info) self:assertEquals('More info text.', userbox2{info = 'More info text.'}.info) end

function suite:testUserbox2InfoTextAlign self:assertEquals('left', userbox2{}.infoTextAlign) self:assertEquals('right', userbox2{['info-a'] = 'right'}.infoTextAlign) end

function suite:testUserbox2InfoFontSize self:assertEquals('8pt', userbox2{}.infoFontSize) self:assertEquals('10pt', userbox2{['info-s'] = '10'}.infoFontSize) end

function suite:testUserbox2InfoColor self:assertEquals('black', userbox2{}.infoColor) self:assertEquals('red', userbox2{[8] = 'red'}.infoColor) self:assertEquals('blue', userbox2{['info-fc'] = 'blue'}.infoColor) end

function suite:testUserbox2InfoPadding self:assertEquals('0 4px 0 4px', userbox2{}.infoPadding) self:assertEquals('1px 1px 1px 1px', userbox2{['info-p'] = '1px 1px 1px 1px'}.infoPadding) end

function suite:testUserbox2InfoLineHeight self:assertEquals('1.25em', userbox2{}.infoLineHeight) self:assertEquals('1.5em', userbox2{['info-lh'] = '1.5em'}.infoLineHeight) end

function suite:testUserbox2InfoOtherParams self:assertEquals(nil, userbox2{}.infoOtherParams) self:assertEquals('font-family:times', userbox2{['info-op'] = 'font-family:times'}.infoOtherParams) end

-- Userbox2 id2 tests

function suite:testUserbox2Id2 self:assertEquals('id2', userbox2{}.id2) self:assertEquals('Id2 text.', userbox2{logo = 'Id2 text.'}.id2) self:assertEquals('More id2 text.', userbox2{[5] = 'More id2 text.'}.id2) self:assertEquals('Even more id2 text.', userbox2{id2 = 'Even more id2 text.'}.id2) end

function suite:testUserbox2ShowId2 self:assertEquals(true, userbox2{}.showId2) end

function suite:testUserbox2Id2Width self:assertEquals('45px', userbox2{}.id2Width) self:assertEquals('50px', userbox2{['id2-w'] = '50'}.id2Width) end

function suite:testUserbox2Id2Height self:assertEquals('45px', userbox2{}.id2Height) self:assertEquals('50px', userbox2{['id-h'] = '50'}.id2Height) end

function suite:testUserbox2Id2BackgroundColor self:assertEquals('#dddddd', userbox2{}.id2BackgroundColor) self:assertEquals('yellow', userbox2{[7] = 'yellow'}.id2BackgroundColor) self:assertEquals('blue', userbox2{['id2-c'] = 'blue'}.id2BackgroundColor) self:assertEquals('red', userbox2{[1] = 'red'}.id2BackgroundColor) end

function suite:testUserbox2Id2TextAlign self:assertEquals('center', userbox2{}.id2TextAlign) end

function suite:testUserbox2Id2FontSize self:assertEquals('14pt', userbox2{}.id2FontSize) self:assertEquals('16pt', userbox2{['id2-s'] = '16'}.id2FontSize) end

function suite:testUserbox2Id2LineHeight self:assertEquals('1.25em', userbox2{}.id2LineHeight) self:assertEquals('1.5em', userbox2{['id2-lh'] = '1.5em'}.id2LineHeight) end

function suite:testUserbox2Id2Color self:assertEquals('black', userbox2{}.id2Color) self:assertEquals('blue', userbox2{['id2-fc'] = 'blue'}.id2Color) end

function suite:testUserbox2Id2Padding self:assertEquals('0 0 0 1px', userbox2{}.id2Padding) self:assertEquals('1px 1px 1px 1px', userbox2{['id2-p'] = '1px 1px 1px 1px'}.id2Padding) end

function suite:testUserbox2Id2OtherParams self:assertEquals(nil, userbox2{}.id2OtherParams) self:assertEquals('font-family:times', userbox2{['id2-op'] = 'font-family:times'}.id2OtherParams) end

-- Userboxr div and table tag tests

function suite:testUserboxrFloat self:assertEquals('left', userboxr{}.float) self:assertEquals('right', userboxr{float = 'right'}.float) end

function suite:testUserboxrBorderWidth self:assertEquals('1px', userboxr{}.borderWidth) self:assertEquals('2px', userboxr{['border-width'] = '2'}.borderWidth) self:assertEquals('3px', userboxr{['border-s'] = '3'}.borderWidth) end

function suite:testUserboxrBorderColor self:assertEquals('#999', userboxr{}.borderColor) self:assertEquals('red', userboxr{['border-color'] = 'red'}.borderColor) self:assertEquals('yellow', userboxr{[1] = 'yellow'}.borderColor) self:assertEquals('blue', userboxr{['border-c'] = 'blue'}.borderColor) self:assertEquals('green', userboxr{['id-c'] = 'green'}.borderColor) end

function suite:testUserboxrWidth self:assertEquals('238px', userboxr{}.width) end

function suite:testUserboxrBodyClass self:assertEquals(nil, userboxr{}.bodyClass) self:assertEquals('foobar', userboxr{bodyclass = 'foobar'}.bodyClass) end

function suite:testUserboxrBackgroundColor self:assertEquals('#eee', userboxr{}.backgroundColor) self:assertEquals('red', userboxr{['info-background'] = 'red'}.backgroundColor) self:assertEquals('yellow', userboxr{[2] = 'yellow'}.backgroundColor) self:assertEquals('blue', userboxr{['info-c'] = 'blue'}.backgroundColor) end

-- Userboxr info tests

function suite:testUserboxrInfo self:assertEquals(" ", userboxr{}.info) self:assertEquals('Info text.', userboxr{info = 'Info text.'}.info) self:assertEquals('More info text.', userboxr{[4] = 'More info text.'}.info) end function suite:testUserboxrInfoTextAlign self:assertEquals('left', userboxr{}.infoTextAlign) self:assertEquals('right', userboxr{['info-align'] = 'right'}.infoTextAlign) self:assertEquals('center', userboxr{['info-a'] = 'center'}.infoTextAlign) end

function suite:testUserboxrInfoFontSize self:assertEquals('8pt', userboxr{}.infoFontSize) self:assertEquals('10pt', userboxr{['info-size'] = '10'}.infoFontSize) self:assertEquals('12pt', userboxr{['info-s'] = '12'}.infoFontSize) end

function suite:testUserboxrInfoPadding self:assertEquals('0 4px 0 4px', userboxr{}.infoPadding) self:assertEquals('1px 1px 1px 1px', userboxr{['info-padding'] = '1px 1px 1px 1px'}.infoPadding) self:assertEquals('2px 2px 2px 2px', userboxr{['info-p'] = '2px 2px 2px 2px'}.infoPadding) end

function suite:testUserboxrInfoLineHeight self:assertEquals('1.25em', userboxr{}.infoLineHeight) self:assertEquals('1.5em', userboxr{['info-line-height'] = '1.5em'}.infoLineHeight) self:assertEquals('1.75em', userboxr{['info-lh'] = '1.75em'}.infoLineHeight) end

function suite:testUserboxrInfoColor self:assertEquals('black', userboxr{}.infoColor) self:assertEquals('red', userboxr{['info-color'] = 'red'}.infoColor) self:assertEquals('blue', userboxr{['info-fc'] = 'blue'}.infoColor) end

function suite:testUserboxrInfoOtherParams self:assertEquals(nil, userboxr{}.infoOtherParams) self:assertEquals('font-family:serif', userboxr{['info-other-param'] = 'font-family:serif'}.infoOtherParams) self:assertEquals('font-family:times', userboxr{['info-op'] = 'font-family:times'}.infoOtherParams) end

-- Userboxr id2 tests

function suite:testUserboxrId2 self:assertEquals('id', userboxr{}.id2) self:assertEquals('Id text.', userboxr{logo = 'Id text.'}.id2) self:assertEquals('More id text.', userboxr{[3] = 'More id text.'}.id2) self:assertEquals('Even more id text.', userboxr{id = 'Even more id text.'}.id2) end

function suite:testUserboxrShowId self:assertEquals(true, userboxr{}.showId2) end

function suite:testUserboxrId2Width self:assertEquals('45px', userboxr{}.id2Width) self:assertEquals('50px', userboxr{['logo-width'] = '50'}.id2Width) self:assertEquals('55px', userboxr{['id-w'] = '55'}.id2Width) end

function suite:testUserboxrId2Height self:assertEquals('45px', userboxr{}.id2Height) self:assertEquals('50px', userboxr{['logo-height'] = '50'}.id2Height) self:assertEquals('55px', userboxr{['id-h'] = '55'}.id2Height) end

function suite:testUserboxrId2BackgroundColor self:assertEquals('#ddd', userboxr{}.id2BackgroundColor) self:assertEquals('red', userboxr{['logo-background'] = 'red'}.id2BackgroundColor) self:assertEquals('yellow', userboxr{[1] = 'yellow'}.id2BackgroundColor) self:assertEquals('blue', userboxr{['id-c'] = 'blue'}.id2BackgroundColor) end

function suite:testUserboxrId2TextAlign self:assertEquals('center', userboxr{}.id2TextAlign) self:assertEquals('right', userboxr{['id-a'] = 'right'}.id2TextAlign) end

function suite:testUserboxrId2FontSize self:assertEquals('14pt', userboxr{}.id2FontSize) self:assertEquals('16pt', userboxr{['logo-size'] = '16'}.id2FontSize) self:assertEquals('18pt', userboxr{[5] = '18'}.id2FontSize) self:assertEquals('20pt', userboxr{['id-s'] = '20'}.id2FontSize) end

function suite:testUserboxrId2Color self:assertEquals('black', userboxr{}.id2Color) self:assertEquals('red', userboxr{['logo-color'] = 'red'}.id2Color) self:assertEquals('blue', userboxr{['id-fc'] = 'blue'}.id2Color) end

function suite:testUserboxrId2Padding self:assertEquals('0 0 0 1px', userboxr{}.id2Padding) self:assertEquals('1px 1px 1px 1px', userboxr{['logo-padding'] = '1px 1px 1px 1px'}.id2Padding) self:assertEquals('2px 2px 2px 2px', userboxr{['id-p'] = '2px 2px 2px 2px'}.id2Padding) end

function suite:testUserboxrId2LineHeight self:assertEquals('1.25em', userboxr{}.id2LineHeight) self:assertEquals('1.5em', userboxr{['logo-line-height'] = '1.5em'}.id2LineHeight) self:assertEquals('1.75em', userboxr{['id-lh'] = '1.75em'}.id2LineHeight) end

function suite:testUserboxrId2OtherParams self:assertEquals(nil, userboxr{}.id2OtherParams) self:assertEquals('font-family:serif', userboxr{['logo-other-param'] = 'font-family:serif'}.id2OtherParams) self:assertEquals('font-family:times', userboxr{['id-op'] = 'font-family:times'}.id2OtherParams) end

-- Categories tests

local function mainspaceCats(args) return categories(args, 'Foo') end

local function templateCats(args) return categories(args, 'Template:Edit protected') end

local function userCats(args) return categories(args, 'User:Example') end

local function templateSubpageCats(args) return categories(args, 'Template:Edit protected/sandbox') end

local function userSubpageCats(args) return categories(args, 'User:Example/Lipsum') end

local userBasepage = 'Example' local templateBasepage = 'Edit protected'

function suite:testUserCategories self:assertEquals('', userCats{usercategory = 'Foobar'}) self:assertEquals('', userCats{usercategory2 = 'Foobar2'}) self:assertEquals('', userCats{usercategory3 = 'Foobar3'}) end

function suite:testTemplateCategories self:assertEquals('', templateCats{usercategory = 'Foobar'}) self:assertEquals('', templateCats{usercategory2 = 'Foobar2'}) self:assertEquals('', templateCats{usercategory3 = 'Foobar3'}) end

function suite:testMultipleUserCategories self:assertEquals(		'',		userCats{usercategory = 'Foobar', usercategory2 = 'Foobar2', usercategory3 = 'Foobar3'}	) end

function suite:testMultipleTemplateCategories self:assertEquals(					.. 			.. '',		templateCats{usercategory = 'Foobar', usercategory2 = 'Foobar2', usercategory3 = 'Foobar3'}	) end

function suite:testNocat self:assertEquals(nil, userCats{nocat = 'true', usercategory = 'Foobar'}) self:assertEquals(nil, templateCats{nocat = 'true', usercategory = 'Foobar'}) end

function suite:testNoCategories self:assertEquals('', userCats{}) self:assertEquals('', templateCats{}) end

function suite:testUserCategorySubpages self:assertEquals('', userSubpageCats{usercategory = 'Foobar'}) self:assertEquals('', userCats{usercategory = 'Foobar'}) end

function suite:testTemplateCategorySubpages self:assertEquals('', templateSubpageCats{usercategory = 'Foobar'}) self:assertEquals('', templateCats{usercategory = 'Foobar'}) end

function suite:testUserCategoryNoSubpages self:assertEquals(nil, userSubpageCats{usercategory = 'Foobar', notcatsubpages = 'yes'}) self:assertEquals('', userCats{usercategory = 'Foobar', notcatsubpages = 'yes'}) end

function suite:testTemplateCategoryNoSubpages self:assertEquals(nil, templateSubpageCats{usercategory = 'Foobar', notcatsubpages = 'yes'}) self:assertEquals('', templateCats{usercategory = 'Foobar', notcatsubpages = 'yes'}) end

function suite:assertHasContrastCat(args, title, yes) local oldTitle = mw.title.getCurrentTitle mw.title.getCurrentTitle = function return mw.title.new(title) end local data = userbox(args) local output = render(data) mw.title.getCurrentTitle = oldTitle if yes then self:assertStringContains("", output, true) else self:assertNotStringContains("", output, true) end end function suite:testInfoContrastTemplate self:assertHasContrastCat({info = 'info', ['info-color'] = '#000000', ['info-background'] = '#000001'}, "Template:Foo", true) self:assertHasContrastCat({info = 'info', ['info-color'] = '#000000', ['info-background'] = '#FFFFFF'}, "Template:Foo", false) end

function suite:testInfoContrastUser self:assertHasContrastCat({info = 'info', ['info-color'] = '#000000', ['info-background'] = '#000001'}, "User:Foo", false) self:assertHasContrastCat({info = 'info', ['info-color'] = '#000000', ['info-background'] = '#FFFFFF'}, "User:Foo", false) end

function suite:testInfoContrastUserSubpage self:assertHasContrastCat({info = 'info', ['info-color'] = '#000000', ['info-background'] = '#000001'}, "User:Foo/bar", true) self:assertHasContrastCat({info = 'info', ['info-color'] = '#000000', ['info-background'] = '#FFFFFF'}, "User:Foo/bar", false) end

function suite:testIdContrastTemplate self:assertHasContrastCat({info = 'info', logo = 'id', ['logo-color'] = '#000000', ['logo-background'] = '#000001'}, "Template:Foo", true) self:assertHasContrastCat({info = 'info', logo = 'id', ['logo-color'] = '#000000', ['logo-background'] = '#FFFFFF'}, "Template:Foo", false) end

function suite:testIdContrastUser self:assertHasContrastCat({info = 'info', logo = 'id', ['logo-color'] = '#000000', ['logo-background'] = '#000001'}, "User:Foo", false) self:assertHasContrastCat({info = 'info', logo = 'id', ['logo-color'] = '#000000', ['logo-background'] = '#FFFFFF'}, "User:Foo", false) end

function suite:testIdContrastUserSubpage self:assertHasContrastCat({info = 'info', logo = 'id', ['logo-color'] = '#000000', ['logo-background'] = '#000001'}, "User:Foo/bar", true) self:assertHasContrastCat({info = 'info', logo = 'id', ['logo-color'] = '#000000', ['logo-background'] = '#FFFFFF'}, "User:Foo/bar", false) end

function suite:testMainspaceCategory self:assertEquals('', mainspaceCats{info = 'info'}) end

return suite