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}}\n'''Abigail''' \"'''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}}',
'{{Taxonomic authority 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}}',
'{{Taxonomic authorities disambiguation}}',
'{{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