Module:Disambiguation/testcases

local mDab = require('Module:Disambiguation/sandbox')

local ScribuntoUnit = require('Module:ScribuntoUnit')

local mMockTitle = require('Module:Mock title')

local suite = ScribuntoUnit:new()

local dabPageTestData = {

{

description = 'content containing "{{disambiguation}}"',

page = 'New',

content = "New may refer to:\n...\n{{disambiguation}}\n",

expectedBool = true,

expectedText = 'yes',

},

{

description = 'content not containing a dab template',

page = 'Paris',

content = "Paris is the capital and most populous city of France.\n",

expectedBool = false,

expectedText = '',

},

{

description = 'content containing disambiguation templates with parameters',

page = 'Black Swan (disambiguation)',

content = "Black swan is the common name for an Australasian waterfowl.\n...\n{{Disambiguation|ship}}\n",

expectedBool = true,

expectedText = 'yes',

},

{

description = 'content containing hndis templates with named parameters',

page = 'Frederick II',

content = "Frederick II' may refer to:\n...\n{{hndis|name=Frederick 02}}\n",

expectedBool = true,

expectedText = 'yes',

},

{

description = 'content containing mountainindex set index templates with parameters',

page = 'List of peaks named Signal',

content = "A signal mountain is a mountain suited to sending and receiving visual signals\n...\n{{Mountainindex|Signal}}\n",

expectedBool = false,

expectedText = '',

},

{

description = 'content containing "{{italic disambiguation}}"',

page = 'Abby (The Last of Us)',

content = "{{italic disambiguation}}\nAbigail \"Abby\" Anderson is a character in the video game The Last of Us Part II.\n",

expectedBool = false,

expectedText = '',

},

}

for _, data in ipairs(dabPageTestData) do

mMockTitle.registerMockTitle{title = data.page, content = data.content}

suite[string.format(

"test isDisambiguation: %s returns %s",

data.description,

tostring(data.expectedBool)

)] = function (suite)

suite:assertEquals(data.expectedBool, mDab.isDisambiguation(data.content))

end

suite[string.format(

"test _isDisambiguationPage: %s returns %s",

data.description,

tostring(data.expectedBool)

)] = function (suite)

local actual = mMockTitle.patchTitleConstructors(

mDab._isDisambiguationPage,

data.page

)

suite:assertEquals(data.expectedBool, actual)

end

suite[string.format(

'test isDisambiguationPage: %s returns "%s"',

data.description,

data.expectedText

)] = function (suite)

local frame = mw.getCurrentFrame():newChild{

title = 'Module talk:Disambiguation',

args = {data.page},

}

local actual = mMockTitle.patchTitleConstructors(

mDab.isDisambiguationPage,

frame

)

suite:assertEquals(data.expectedText, actual)

end

end

local dabContent = {

'{{disambiguation}}',

'{{ disambiguation }}',

'{{Disambiguation}}',

'{{ Disambiguation }}',

'{{ disambiguation | foo }}',

'{{ disambiguation | foo=bar }}',

'{{ disambiguation | foo = bar }}',

'{{DAB}}',

'{{dab}}',

'{{dabpage}}',

'{{dbig}}',

'{{dis}}',

'{{disam}}',

'{{disamb}}',

'{{disambig}}',

'{{disambig misspelling}}',

'{{disambig-plants}}',

'{{disambiguation page}}',

'{{begriffsklärung}}',

'{{meta disambig}}',

'{{project disambiguation}}',

'{{shortcut disambig}}',

'{{WP disambig}}',

'{{WP-disambig}}',

'{{Wikipedia disambiguation}}',

'{{Airport disambiguation}}',

'{{Biology disambiguation}}',

'{{Call sign disambiguation}}',

'{{Caselaw disambiguation}}',

'{{Chinese title disambiguation}}',

'{{Disambiguation cleanup}}',

'{{Genus disambiguation}}',

'{{Hospital disambiguation}}',

'{{Human name disambiguation}}',

'{{Human name disambiguation cleanup}}',

'{{Letter–number combination disambiguation}}',

'{{Mathematical disambiguation}}',

'{{Military unit disambiguation}}',

'{{Music disambiguation}}',

'{{Number disambiguation}}',

'{{Opus number disambiguation}}',

'{{Phonetics disambiguation}}',

'{{Place name disambiguation}}',

'{{Portal disambiguation}}',

'{{Road disambiguation}}',

'{{School disambiguation}}',

'{{Species Latin name abbreviation disambiguation}}',

'{{Species Latin name disambiguation}}',

'{{Station disambiguation}}',

'{{Synagogue disambiguation}}',

'{{Taxonomy disambiguation}}',

'{{Template disambiguation}}',

'{{WoO number disambiguation}}',

'{{Airport disambig}}',

'{{Callsigndis}}',

'{{Case law disambiguation}}',

'{{CJKVdab}}',

'{{Disambig-Chinese-char-title}}',

'{{Chinese title disambig}}',

'{{Disamb-cleanup}}',

'{{Cleanup disambig}}',

'{{CleanupDisambig}}',

'{{Dabclean}}',

'{{Dab-cleanup}}',

'{{Disambig-CU}}',

'{{Disambig-cu}}',

'{{Disambig cleanup}}',

'{{Geodis-cleanup}}',

'{{Disambig-cleanup}}',

'{{Disambiguation-cleanup}}',

'{{Disambcleanup}}',

'{{Disambigcleanup}}',

'{{Disambiguate-cleanup}}',

'{{Dab cleanup}}',

'{{Cleanup disambiguation}}',

'{{Genus disambig}}',

'{{Hospitaldis}}',

'{{Bio-dab}}',

'{{Hndisambig}}',

'{{Hndab}}',

'{{HnDis}}',

'{{Personal name disambiguation}}',

'{{HNDIS}}',

'{{Hndis}}',

'{{Personal name}}',

'{{Human name dab}}',

'{{Personal name disambiguation cleanup}}',

'{{Hndis-cleanup}}',

'{{Letter-NumberCombdisambig}}',

'{{Letter-NumberCombinationDisambiguation}}',

'{{LNCD}}',

'{{Letter-Number combination disambiguation}}',

'{{Letter-NumberCombDisambig}}',

'{{Letter-Number Combination Disambiguation}}',

'{{Letter-number combination disambiguation}}',

'{{Mathematics disambiguation}}',

'{{Mathdab}}',

'{{Math dab}}',

'{{Math disambiguation}}',

'{{Maths disambiguation}}',

'{{Mil-unit-disambig}}',

'{{Mil-unit-dis}}',

'{{Music disambig}}',

'{{Numdisambig}}',

'{{Numdab}}',

'{{Numberdis}}',

'{{Geodab}}',

'{{Geo-dis}}',

'{{Geodisambig}}',

'{{Geodis}}',

'{{DisambigG}}',

'{{DisambigGeo}}',

'{{Disambiggeo}}',

'{{Geographic disambiguation}}',

'{{Portal disambig}}',

'{{Roaddis}}',

'{{Schooldis}}',

'{{Schooldab}}',

'{{School disambig}}',

'{{LatinNameDisambig}}',

'{{SpeciesLatinNameDisambig}}',

'{{Station dab}}',

'{{Species disambiguation}}',

'{{Template disambig}}',

'{{Template dab}}',

'{{Template ambiguous}}',

'__DISAMBIG__'

}

for _, content in ipairs(dabContent) do

suite[string.format(

'test isDisambiguation: content containing "%s" returns true',

content

)] = function (suite)

suite:assertTrue(mDab.isDisambiguation(content))

end

end

local nonDabContent = {

'just some text',

'__FOO__',

'{{}}',

'{{ }}',

'{{italic disambiguation}}',

'{{Italic disambiguation}}',

'{{ italic disambiguation }}',

'{{ Italic disambiguation }}',

'{{italic disambiguation|foo}}',

'{{ italic disambiguation | foo }}',

}

for _, content in ipairs(nonDabContent) do

suite[string.format(

'test isDisambiguation: content containing "%s" returns false',

content

)] = function (suite)

suite:assertFalse(mDab.isDisambiguation(content))

end

end

return suite