Difference between revisions of "Module:Userbox/testcases"

From blackwiki
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:testRenderUserboxClass()
+
function suite:testRenderBodyClass()
     self:assertStringContains('wikipediauserbox', render{})
+
     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