Difference between revisions of "Module:Userbox/testcases"
Jump to navigation
Jump to search
blackwiki>Mr. Stradivarius (add the first few render tests) |
blackwiki>Mr. Stradivarius (make more accurate tests and create some pattern-generating helper functions) |
||
| Line 8: | Line 8: | ||
local userboxr = ubx['userbox-r'] | local userboxr = ubx['userbox-r'] | ||
local render = ubx.render | 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 | ||
| + | |||
| + | -------------------------------------------------------------------------------- | ||
| + | -- Render tests | ||
| + | -------------------------------------------------------------------------------- | ||
function suite:testRenderFloat() | function suite:testRenderFloat() | ||
| − | self:assertStringContains('float:right;', render{float="right"}) | + | self:assertStringContains(inTagAttr('float:right;', 'div', 'style'), render{float="right"}) |
end | end | ||
function suite:testRenderBorder() | function suite:testRenderBorder() | ||
| − | self:assertStringContains('border:5px', render{borderWidth="5px"}) | + | self:assertStringContains(inTagAttr('border:5px', 'div', 'style'), render{borderWidth="5px"}) |
self:assertStringContains('solid red', render{borderColor="red"}) | self:assertStringContains('solid red', render{borderColor="red"}) | ||
end | end | ||
function suite:testRenderMargin() | function suite:testRenderMargin() | ||
| − | self:assertStringContains('margin:1px;', render{}) | + | self:assertStringContains(inTagAttr('margin:1px;', 'div', 'style'), render{}) |
end | end | ||
function suite:testRenderWidth() | function suite:testRenderWidth() | ||
| − | self:assertStringContains('width:120px;', render{width="120px"}) | + | self:assertStringContains(inTagAttr('width:120px;', 'div', 'style'), render{width="120px"}) |
end | end | ||
function suite:testRenderUserboxClass() | function suite:testRenderUserboxClass() | ||
| − | self:assertStringContains('wikipediauserbox', render{}) | + | self:assertStringContains(inTagAttr('wikipediauserbox', 'div', 'class'), render{}) |
end | end | ||
| − | function suite: | + | function suite:testRenderBodyClass() |
| − | self:assertStringContains(' | + | self:assertStringContains(inTagAttr('foobar', 'div', 'class'), render{bodyClass="foobar"}) |
end | end | ||
return suite | return suite | ||
Revision as of 19:03, 8 January 2014
Documentation for this module may be created at Module:Userbox/testcases/doc
-- 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
--------------------------------------------------------------------------------
-- 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
return suite