Difference between revisions of "Module:Documentation/testcases"

From blackwiki
Jump to navigation Jump to search
test>Mr. Stradivarius
(improve protection template tests)
test>Mr. Stradivarius
(add some start box tests)
Line 214: Line 214:
 
-- Test start box
 
-- Test start box
 
--------------------------------------------------------------------------------------------
 
--------------------------------------------------------------------------------------------
 +
 +
function suite:testMakeStartBoxLinksData()
 +
local env = getEnv('Template:Example')
 +
local data = doc.makeStartBoxLinksData({}, env)
 +
self:assertEquals('Template:Example', data.title.prefixedText)
 +
self:assertEquals('Template:Example/doc', data.docTitle.prefixedText)
 +
self:assertEquals('view', data.viewLinkDisplay)
 +
self:assertEquals('edit', data.editLinkDisplay)
 +
self:assertEquals('history', data.historyLinkDisplay)
 +
self:assertEquals('purge', data.purgeLinkDisplay)
 +
self:assertEquals('create', data.createLinkDisplay)
 +
end
 +
 +
function suite:testMakeStartBoxLinksDataFilePreload()
 +
local env = getEnv('File:Example.png')
 +
local data = doc.makeStartBoxLinksData({}, env)
 +
self:assertEquals('Template:Documentation/preload-filespace', data.preload)
 +
end
 +
 +
function suite:testMakeStartBoxLinksDataTemplatePreload()
 +
local env = getEnv('Template:Example')
 +
local data = doc.makeStartBoxLinksData({}, env)
 +
self:assertEquals('Template:Documentation/preload', data.preload)
 +
end
 +
 +
function suite:testMakeStartBoxLinksDataArgsPreload()
 +
local env = getEnv('Template:Example')
 +
local data = doc.makeStartBoxLinksData({preload = 'My custom preload'}, env)
 +
self:assertEquals('My custom preload', data.preload)
 +
end
  
 
function suite:testStartBoxTemplateHtml()
 
function suite:testStartBoxTemplateHtml()

Revision as of 03:29, 24 January 2014

Documentation for this module may be created at Module:Documentation/testcases/doc

-- Test cases page for [[Module:Documentation]]. See talk page to run tests.

local doc = require('Module:Documentation')
local ScribuntoUnit = require('Module:ScribuntoUnit/sandbox')
local suite = ScribuntoUnit:new()

--------------------------------------------------------------------------------------------
-- Test case helper functions
--------------------------------------------------------------------------------------------

local function getEnv(page)
	-- Gets an env table using the specified page.
	return doc.getEnvironment{page = page}
end

--------------------------------------------------------------------------------------------
-- Test helper functions
--------------------------------------------------------------------------------------------

function suite:testMessage()
	self:assertEquals('sandbox', doc.message('sandbox-subpage'))
	self:assertEquals('Subpages of this foobar', doc.message('subpages-link-display', {'foobar'}))
	self:assertEquals(true, doc.message('display-print-category', nil, 'boolean'))
end

function suite:testMakeToolbar()
	self:assertEquals(nil, doc.makeToolbar())
	self:assertEquals('<small style="font-style: normal;">(Foo)</small>', doc.makeToolbar('Foo'))
	self:assertEquals('<small style="font-style: normal;">(Foo &#124; Bar)</small>', doc.makeToolbar('Foo', 'Bar'))
end

function suite:testMakeWikilink()
	self:assertEquals('[[Foo]]', doc.makeWikilink('Foo'))
	self:assertEquals('[[Foo|Bar]]', doc.makeWikilink('Foo', 'Bar'))
end

function suite:testMakeCategoryLink()
	self:assertEquals('[[Category:Foo]]', doc.makeCategoryLink('Foo'))
	self:assertEquals('[[Category:Foo|Bar]]', doc.makeCategoryLink('Foo', 'Bar'))
end

function suite:testMakeUrlLink()
	self:assertEquals('[Foo Bar]', doc.makeUrlLink('Foo', 'Bar'))
end

--------------------------------------------------------------------------------------------
-- Test env table
--------------------------------------------------------------------------------------------

function suite:assertEnvFieldEquals(expected, page, field)
	local env = getEnv(page)
	self:assertEquals(expected, env[field])
end	

function suite:assertEnvTitleEquals(expected, page, titleField)
	local env = getEnv(page)
	local title = env[titleField]
	self:assertEquals(expected, title.prefixedText)
end	

function suite:testEnvTitle()
	self:assertEnvTitleEquals('Wikipedia:Sandbox', 'Wikipedia:Sandbox', 'title')
	self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example/sandbox', 'title')
end

function suite:testEnvBadTitle()
	local env = doc.getEnvironment{page = 'Bad[]Title'}
	local title = env.title
	self:assertEquals(nil, title)
end

function suite:testEnvTemplateTitle()
	self:assertEnvTitleEquals('Template:Example', 'Template:Example', 'templateTitle')
	self:assertEnvTitleEquals('Template:Example', 'Template talk:Example', 'templateTitle')
	self:assertEnvTitleEquals('Template:Example', 'Template:Example/sandbox', 'templateTitle')
	self:assertEnvTitleEquals('Template:Example', 'Template talk:Example/sandbox', 'templateTitle')
	self:assertEnvTitleEquals('Template:Example', 'Template:Example/testcases', 'templateTitle')
	self:assertEnvTitleEquals('Template:Example/foo', 'Template:Example/foo', 'templateTitle')
	self:assertEnvTitleEquals('File:Example', 'File talk:Example', 'templateTitle')
	self:assertEnvTitleEquals('File:Example', 'File talk:Example/sandbox', 'templateTitle')
end

function suite:testEnvDocTitle()
	self:assertEnvTitleEquals('Template:Example/doc', 'Template:Example', 'docTitle')
	self:assertEnvTitleEquals('Template:Example/doc', 'Template talk:Example', 'docTitle')
	self:assertEnvTitleEquals('Template:Example/doc', 'Template:Example/sandbox', 'docTitle')
	self:assertEnvTitleEquals('Talk:Example/doc', 'Example', 'docTitle')
	self:assertEnvTitleEquals('File talk:Example.png/doc', 'File:Example.png', 'docTitle')
	self:assertEnvTitleEquals('File talk:Example.png/doc', 'File talk:Example.png/sandbox', 'docTitle')
end

function suite:testEnvSandboxTitle()
	self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example', 'sandboxTitle')
	self:assertEnvTitleEquals('Template:Example/sandbox', 'Template talk:Example', 'sandboxTitle')
	self:assertEnvTitleEquals('Template:Example/sandbox', 'Template:Example/sandbox', 'sandboxTitle')
	self:assertEnvTitleEquals('Talk:Example/sandbox', 'Example', 'sandboxTitle')
	self:assertEnvTitleEquals('File talk:Example.png/sandbox', 'File:Example.png', 'sandboxTitle')
end

function suite:testEnvTestcasesTitle()
	self:assertEnvTitleEquals('Template:Example/testcases', 'Template:Example', 'testcasesTitle')
	self:assertEnvTitleEquals('Template:Example/testcases', 'Template talk:Example', 'testcasesTitle')
	self:assertEnvTitleEquals('Template:Example/testcases', 'Template:Example/testcases', 'testcasesTitle')
	self:assertEnvTitleEquals('Talk:Example/testcases', 'Example', 'testcasesTitle')
	self:assertEnvTitleEquals('File talk:Example.png/testcases', 'File:Example.png', 'testcasesTitle')
end

function suite:testEnvPrintTitle()
	self:assertEnvTitleEquals('Template:Example/Print', 'Template:Example', 'printTitle')
	self:assertEnvTitleEquals('Template:Example/Print', 'Template talk:Example', 'printTitle')
	self:assertEnvTitleEquals('Template:Example/Print', 'Template:Example/sandbox', 'printTitle')
end

function suite:testEnvSubjectSpace()
	self:assertEnvFieldEquals(10, 'Template:Sandbox', 'subjectSpace')
	self:assertEnvFieldEquals(10, 'Template talk:Sandbox', 'subjectSpace')
	self:assertEnvFieldEquals(0, 'Foo', 'subjectSpace')
	self:assertEnvFieldEquals(0, 'Talk:Foo', 'subjectSpace')
end

function suite:testEnvDocSpace()
	self:assertEnvFieldEquals(10, 'Template:Sandbox', 'docSpace')
	self:assertEnvFieldEquals(828, 'Module:Sandbox', 'docSpace')
	self:assertEnvFieldEquals(1, 'Foo', 'docSpace')
	self:assertEnvFieldEquals(7, 'File:Example.png', 'docSpace')
	self:assertEnvFieldEquals(9, 'MediaWiki:Watchlist-details', 'docSpace')
	self:assertEnvFieldEquals(15, 'Category:Wikipedians', 'docSpace')
end

function suite:testEnvDocpageBase()
	self:assertEnvFieldEquals('Template:Example', 'Template:Example', 'docpageBase')
	self:assertEnvFieldEquals('Template:Example', 'Template:Example/sandbox', 'docpageBase')
	self:assertEnvFieldEquals('Template:Example', 'Template talk:Example', 'docpageBase')
	self:assertEnvFieldEquals('File talk:Example.png', 'File:Example.png', 'docpageBase')
	self:assertEnvFieldEquals('File talk:Example.png', 'File talk:Example.png', 'docpageBase')
	self:assertEnvFieldEquals('File talk:Example.png', 'File talk:Example.png/sandbox', 'docpageBase')
end

function suite:testEnvCompareUrl()
	-- We use "Template:Edit protected" rather than "Template:Example" here as it has a space in the title.
	local expected = '//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=Template%3AEdit+protected&page2=Template%3AEdit+protected%2Fsandbox'
	self:assertEnvFieldEquals(expected, 'Template:Edit protected', 'compareUrl') 
	self:assertEnvFieldEquals(expected, 'Template:Edit protected/sandbox', 'compareUrl')
end

--------------------------------------------------------------------------------------------
-- Test sandbox notice
--------------------------------------------------------------------------------------------

function suite.getSandboxNoticeStrings(page)
	local templatePage = page:match('^(.*)/sandbox$')
	local image = '[[Image:Sandbox.png|50px|alt=|link=]]'
	local blurb = 'This is the [[Wikipedia:Template test cases|template sandbox]] page for [[' .. templatePage .. ']]'
	local diff = '[//en.wikipedia.org/w/index.php?title=Special%3AComparePages&page1=' .. mw.uri.encode(templatePage) .. '&page2=' .. mw.uri.encode(page) .. ' diff]'
	local testcasesBlurb = 'See also the companion subpage for [[' .. page .. '/testcases|test cases]].'
	local category = '[[Category:Template sandboxes]]'
	return image, blurb, diff, testcasesBlurb, category
end	

function suite:testSandboxNoticeNotSandbox()
	local env = getEnv('Template:Example')
	local notice = doc.sandboxNotice({}, env)
	self:assertEquals(nil, notice)
end

function suite:testSandboxNoticeTestcases()
	local image, blurb, diff, testcasesBlurb, category = suite.getSandboxNoticeStrings('Template:Example/sandbox')
	local env = getEnv('Template:Example/sandbox')
	local notice = doc.sandboxNotice({}, env)
	self:assertStringContains(image, notice, true)
	self:assertStringContains(blurb, notice, true)
	if mw.title.getCurrentTitle().isTalk then
		-- This test doesn't work in the debug console due to the use of frame:preprocess({{REVISIONID}}).
		-- The frame test doesn't seem to be working for now, so adding a namespace hack.
		self:assertStringContains(diff, notice, true)
	end
	self:assertNotStringContains(testcasesBlurb, notice, true)
	self:assertStringContains(category, notice, true)
end

--------------------------------------------------------------------------------------------
-- Test protection template
-- 
-- There's not much we can do with this until {{pp-meta}} gets rewritten in Lua. At the
-- moment the protection detection only works for the current page, and the testcases pages
-- will be unprotected.
--------------------------------------------------------------------------------------------

function suite:testProtectionTemplateUnprotectedTemplate()
	local env = getEnv('Template:Example')
	self:assertEquals(nil, doc.protectionTemplate(env))
end

function suite:testProtectionTemplateProtectedTemplate()
	local env = getEnv('Template:!')
	-- Test whether there is some content. We don't care what the content is, as the protection level
	-- detected will be for the current page, not the template.
	self:assertTrue(doc.protectionTemplate(env))
end

function suite:testProtectionTemplateUnprotectedModule()
	local env = getEnv('Module:Bananas')
	self:assertEquals(nil, doc.protectionTemplate(env))
end

function suite:testProtectionTemplateProtectedModule()
	local env = getEnv('Module:Yesno')
	-- Test whether there is some content. We don't care what the content is, as the protection level
	-- detected will be for the current page, not the template.
	self:assertTrue(doc.protectionTemplate(env))
end

--------------------------------------------------------------------------------------------
-- Test start box
--------------------------------------------------------------------------------------------

function suite:testMakeStartBoxLinksData()
	local env = getEnv('Template:Example')
	local data = doc.makeStartBoxLinksData({}, env)
	self:assertEquals('Template:Example', data.title.prefixedText)
	self:assertEquals('Template:Example/doc', data.docTitle.prefixedText)
	self:assertEquals('view', data.viewLinkDisplay)
	self:assertEquals('edit', data.editLinkDisplay)
	self:assertEquals('history', data.historyLinkDisplay)
	self:assertEquals('purge', data.purgeLinkDisplay)
	self:assertEquals('create', data.createLinkDisplay)
end

function suite:testMakeStartBoxLinksDataFilePreload()
	local env = getEnv('File:Example.png')
	local data = doc.makeStartBoxLinksData({}, env)
	self:assertEquals('Template:Documentation/preload-filespace', data.preload)
end

function suite:testMakeStartBoxLinksDataTemplatePreload()
	local env = getEnv('Template:Example')
	local data = doc.makeStartBoxLinksData({}, env)
	self:assertEquals('Template:Documentation/preload', data.preload)
end

function suite:testMakeStartBoxLinksDataArgsPreload()
	local env = getEnv('Template:Example')
	local data = doc.makeStartBoxLinksData({preload = 'My custom preload'}, env)
	self:assertEquals('My custom preload', data.preload)
end

function suite:testStartBoxTemplateHtml()
	self:assertStringContains(
		'<div style="padding%-bottom:3px;border%-bottom:1px solid #aaa;margin%-bottom:1ex;">\n<span style="font%-weight:bold;font%-size:125%%;">.-</span><span class="mw%-editsection plainlinks" id="doc_editlinks">.-</span></div>',
		doc._startBox({}, getEnv('Template:Example'))
	)
end

function suite:testStartBoxMainHtml()
	self:assertStringContains(
		'<div style="padding%-bottom:3px;border%-bottom:1px solid #aaa;margin%-bottom:1ex;">\n<span style="font%-size:150%%;">.-</span><span class="mw%-editsection plainlinks" id="doc_editlinks">.-</span></div>',
		doc._startBox({}, getEnv('Foo'))
	)
end

return suite