Module:Category main article/testcases explained

local mCatMain = require('Module:Cat main/sandbox') -- the module to be testedlocal ScribuntoUnit = require('Module:ScribuntoUnit')local suite = ScribuntoUnit:new

---------------------------------------------------------------------------------- Helper functions--------------------------------------------------------------------------------

local function patchCurrentTitle(newTitle, func) local oldGetCurrentTitle = mw.title.getCurrentTitle mw.title.getCurrentTitle = function return mw.title.new("Category:Example") end func mw.title.getCurrentTitle = oldGetCurrentTitleend

---------------------------------------------------------------------------------- Custom assert methods--------------------------------------------------------------------------------

function suite:assertHasClass(expectedClass, result) result = mw.text.killMarkers(result) -- remove TemplateStyles marker local classes = result:match('^

]*class="([^"]*)"') classes = mw.text.split(classes, ' ') local hasClass = false for _, actualClass in ipairs(classes) do if actualClass

expectedClass then hasClass = true break end end self:assertTrue(hasClass, string.format('Class "%s" %s in result "%s"', expectedClass, hasClass and "found" or "not found", result ) )end

---------------------------------------------------------------------------------- Tests--------------------------------------------------------------------------------

function suite:testWholeOutput self:assertEquals([=[<div role="note" class="hatnote navigation-not-searchable">The main article for this [[Help:Categories|category]] is .

]=], mw.text.killMarkers(mCatMain._catMain(nil, 'Foo')) )end

function suite:testOneArticle self:assertStringContains("The main article for this category is .", mCatMain._catMain(nil, 'Foo'), true )end

function suite:testTwoArticles self:assertStringContains("The main articles for this category are and .", mCatMain._catMain(nil, 'Foo', 'Bar'), true )end

function suite:testThreeArticles self:assertStringContains("The main articles for this category are , and .", mCatMain._catMain(nil, 'Foo', 'Bar', 'Baz'), true )end

function suite:testNonArticle self:assertStringContains("The main page for this category is .", mCatMain._catMain('Foo'), true )end

function suite:testSelfReference self:assertHasClass("selfref", mCatMain._catMain('Foo'))end

function suite:testNoArticles patchCurrentTitle("Category:Example", function self:assertStringContains("The main article for this category is .", mCatMain._catMain, true ) end )end

return suite