Module:Pagetype/testcases

-- Unit tests for Module:Pagetype. Click talk page to run tests.

local mPageType = require('Module:Pagetype/sandbox')

local ScribuntoUnit = require('Module:ScribuntoUnit')

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

local mTemplateInvocation = require('Module:Template invocation')

local suite = ScribuntoUnit:new()

mMockTitle.registerMockTitles(

{

title = 'Foo',

exists = true,

isRedirect = true,

redirectTarget = 'Foobar'

},

{

title = 'Talk:Foo',

exists = true,

isRedirect = false

},

{

title = 'UK',

exists = true,

isRedirect = true,

redirectTarget = 'United Kingdom'

},

{

title = 'Talk:UK',

exists = true,

isRedirect = true,

redirectTarget = 'Talk:United Kingdom'

},

{

title = 'United Kingdom',

exists = true,

isRedirect = false,

content = "The United Kingdom is a country ..."

},

{

title = 'Talk:United Kingdom',

exists = true,

isRedirect = false

},

{

title = 'Alien',

exists = true,

isRedirect = false,

content = "Alien primarily refers to:\n...\n{{disambiguation}}"

},

{

title = 'Talk:Alien',

exists = true,

isRedirect = false

},

{

title = 'User:Example',

exists = true,

isRedirect = false

},

{

title = 'User talk:Example',

exists = true,

isRedirect = false

},

{

title = 'Wikipedia:Namespace',

exists = true,

isRedirect = false

},

{

title = 'Wikipedia talk:Namespace',

exists = true,

isRedirect = false

},

{

title = 'File:Example.jpg',

exists = true,

isRedirect = false

},

{

title = 'File talk:Example.jpg',

exists = true,

isRedirect = false

},

{

title = 'Image:Example.jpg',

exists = true,

isRedirect = false

},

{

title = 'Image talk:Example.jpg',

exists = true,

isRedirect = false

},

{

title = 'MediaWiki:Watchlist-details',

exists = true,

isRedirect = false

},

{

title = 'MediaWiki talk:Spam-blacklist/log',

exists = true,

isRedirect = false

},

{

title = 'MediaWiki talk:Watchlist-messages',

exists = true,

isRedirect = false

},

{

title = 'Template:Pagetype',

exists = true,

isRedirect = false,

content = 'Template code'

},

{

title = 'Template talk:Pagetype',

exists = true,

isRedirect = false,

content = 'Template discussion. ~~~~'

},

{

title = 'Help:Contents',

exists = true,

isRedirect = false

},

{

title = 'Help talk:Contents',

exists = true,

isRedirect = false

},

{

title = 'Category:Wikipedians',

exists = true,

isRedirect = false

},

{

title = 'Category talk:Wikipedians',

exists = true,

isRedirect = false

},

{

title = 'Portal:The arts',

exists = true,

isRedirect = false

},

{

title = 'Portal talk:The arts',

exists = true,

isRedirect = false

},

{

title = 'Draft:Example',

exists = true,

isRedirect = false

},

{

title = 'Draft talk:Example',

exists = true,

isRedirect = false

},

{

title = 'TimedText:Foo',

exists = true,

isRedirect = false

},

{

title = 'TimedText talk:Foo',

exists = true,

isRedirect = false

},

{

title = 'Module:Example',

exists = true,

isRedirect = false

},

{

title = 'Media:Example.jpg',

fileExists = true

},

{

title = 'Wikipedia:Access to usage logs',

exists = true,

isRedirect = false,

content = '{{Soft redirect|meta:Wikipedia usage statistics}}'

},

{

title = 'Felt lichen',

exists = true,

isRedirect = false,

content = 'Felt lichen may refer to ... {{Fungus common name}}'

},

{

title = 'Module:Contains soft redirect template comment',

exists = true,

isRedirect = false,

content = '-- Comment about template {{soft redirect}}'

},

{

title = 'Template talk:Contains nowiki soft redirect invocation',

exists = true,

isRedirect = false,

content = 'Comment about {{soft redirect}}'

},

{

title = 'Redirect under discussion',

exists = true,

isRedirect = false,

content = '{{NOINDEX}}{{safesubst:#invoke:RfD||}}'

}

)

mMockTitle.registerMockCurrentTitle(

{

title = 'Module talk:Example',

exists = true,

isRedirect = false,

}

)

local pageTypeTests = {

{

group = 'current page',

args = {},

expected = 'module',

},

{

group = 'current page',

args = {module = 'no'},

expected = 'page',

},

{

group = 'current page',

args = {module = 'foo'},

expected = 'foo',

},

{

group = 'spaces',

args = {module = ' no '},

expected = 'page',

},

{

group = 'spaces',

args = {module = ' foo '},

expected = 'foo',

},

{

group = 'spaces',

args = {page = ' UK ', redirect = ' No '},

expected = 'article',

},

{

group = 'defaults',

args = {page = 'UK'},

expected = 'redirect',

},

{

group = 'defaults',

args = {page = 'Talk:UK'},

expected = 'redirect',

},

{

group = 'defaults',

args = {page = 'United Kingdom'},

expected = 'article',

},

{

group = 'defaults',

args = {page = 'Talk:United Kingdom'},

expected = 'article',

},

{

group = 'defaults',

args = {page = 'Alien'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Talk:Alien'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'User:Example'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'User talk:Example'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Wikipedia:Namespace'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Wikipedia talk:Namespace'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Project:Namespace'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Project talk:Namespace'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'WP:Namespace'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'WT:Namespace'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'File:Example.jpg'},

expected = 'file',

},

{

group = 'defaults',

args = {page = 'File talk:Example.jpg'},

expected = 'file',

},

{

group = 'defaults',

args = {page = 'Image:Example.jpg'},

expected = 'file',

},

{

group = 'defaults',

args = {page = 'Image talk:Example.jpg'},

expected = 'file',

},

{

group = 'defaults',

args = {page = 'MediaWiki:Watchlist-details'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'MediaWiki talk:Watchlist-messages'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Template:Pagetype'},

expected = 'template',

},

{

group = 'defaults',

args = {page = 'Template talk:Pagetype'},

expected = 'template',

},

{

group = 'defaults',

args = {page = 'Help:Contents'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Help talk:Contents'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Category:Wikipedians'},

expected = 'category',

},

{

group = 'defaults',

args = {page = 'Category talk:Wikipedians'},

expected = 'category',

},

{

group = 'defaults',

args = {page = 'Portal:The arts'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Portal talk:The arts'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Draft:Example'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Draft talk:Example'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'TimedText:Foo'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'TimedText talk:Foo'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Special:PrefixIndex'},

expected = 'page',

},

{

group = 'defaults',

args = {page = 'Media:Example.jpg'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'UK', defaultns = 'none'},

expected = 'redirect',

},

{

group = 'defaultns=none',

args = {page = 'Talk:UK', defaultns = 'none'},

expected = 'redirect',

},

{

group = 'defaultns=none',

args = {page = 'United Kingdom', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Talk:United Kingdom', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Alien', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Talk:Alien', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'User:Example', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'User talk:Example', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Wikipedia:Namespace', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Wikipedia talk:Namespace', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Project:Namespace', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Project talk:Namespace', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'WP:Namespace', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'WT:Namespace', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'File:Example.jpg', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'File talk:Example.jpg', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Image:Example.jpg', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Image talk:Example.jpg', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'MediaWiki:Watchlist-details', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'MediaWiki talk:Watchlist-messages', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Template:Pagetype', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Template talk:Pagetype', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Help:Contents', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Help talk:Contents', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Category:Wikipedians', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Category talk:Wikipedians', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Portal:The arts', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Portal talk:The arts', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Draft:Example', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Draft talk:Example', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'TimedText:Foo', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'TimedText talk:Foo', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Special:PrefixIndex', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=none',

args = {page = 'Media:Example.jpg', defaultns = 'none'},

expected = 'page',

},

{

group = 'defaultns=extended',

args = {page = 'UK', defaultns = 'extended'},

expected = 'redirect',

},

{

group = 'defaultns=extended',

args = {page = 'Talk:UK', defaultns = 'extended'},

expected = 'redirect',

},

{

group = 'defaultns=extended',

args = {page = 'United Kingdom', defaultns = 'extended'},

expected = 'article',

},

{

group = 'defaultns=extended',

args = {page = 'Talk:United Kingdom', defaultns = 'extended'},

expected = 'article',

},

{

group = 'defaultns=extended',

args = {page = 'Alien', defaultns = 'extended'},

expected = 'page',

},

{

group = 'defaultns=extended',

args = {page = 'Talk:Alien', defaultns = 'extended'},

expected = 'page',

},

{

group = 'defaultns=extended',

args = {page = 'User:Example', defaultns = 'extended'},

expected = 'user page',

},

{

group = 'defaultns=extended',

args = {page = 'User talk:Example', defaultns = 'extended'},

expected = 'user page',

},

{

group = 'defaultns=extended',

args = {page = 'Wikipedia:Namespace', defaultns = 'extended'},

expected = 'project page',

},

{

group = 'defaultns=extended',

args = {page = 'Wikipedia talk:Namespace', defaultns = 'extended'},

expected = 'project page',

},

{

group = 'defaultns=extended',

args = {page = 'Project:Namespace', defaultns = 'extended'},

expected = 'project page',

},

{

group = 'defaultns=extended',

args = {page = 'Project talk:Namespace', defaultns = 'extended'},

expected = 'project page',

},

{

group = 'defaultns=extended',

args = {page = 'WP:Namespace', defaultns = 'extended'},

expected = 'project page',

},

{

group = 'defaultns=extended',

args = {page = 'WT:Namespace', defaultns = 'extended'},

expected = 'project page',

},

{

group = 'defaultns=extended',

args = {page = 'File:Example.jpg', defaultns = 'extended'},

expected = 'file',

},

{

group = 'defaultns=extended',

args = {page = 'File talk:Example.jpg', defaultns = 'extended'},

expected = 'file',

},

{

group = 'defaultns=extended',

args = {page = 'Image:Example.jpg', defaultns = 'extended'},

expected = 'file',

},

{

group = 'defaultns=extended',

args = {page = 'Image talk:Example.jpg', defaultns = 'extended'},

expected = 'file',

},

{

group = 'defaultns=extended',

args = {page = 'MediaWiki:Watchlist-details', defaultns = 'extended'},

expected = 'interface page',

},

{

group = 'defaultns=extended',

args = {page = 'MediaWiki talk:Watchlist-messages', defaultns = 'extended'},

expected = 'interface page',

},

{

group = 'defaultns=extended',

args = {page = 'Template:Pagetype', defaultns = 'extended'},

expected = 'template',

},

{

group = 'defaultns=extended',

args = {page = 'Template talk:Pagetype', defaultns = 'extended'},

expected = 'template',

},

{

group = 'defaultns=extended',

args = {page = 'Help:Contents', defaultns = 'extended'},

expected = 'help page',

},

{

group = 'defaultns=extended',

args = {page = 'Help talk:Contents', defaultns = 'extended'},

expected = 'help page',

},

{

group = 'defaultns=extended',

args = {page = 'Category:Wikipedians', defaultns = 'extended'},

expected = 'category',

},

{

group = 'defaultns=extended',

args = {page = 'Category talk:Wikipedians', defaultns = 'extended'},

expected = 'category',

},

{

group = 'defaultns=extended',

args = {page = 'Portal:The arts', defaultns = 'extended'},

expected = 'portal',

},

{

group = 'defaultns=extended',

args = {page = 'Portal talk:The arts', defaultns = 'extended'},

expected = 'portal',

},

{

group = 'defaultns=extended',

args = {page = 'Draft:example', defaultns = 'extended'},

expected = 'draft',

},

{

group = 'defaultns=extended',

args = {page = 'Draft talk:example', defaultns = 'extended'},

expected = 'draft',

},

{

group = 'defaultns=extended',

args = {page = 'TimedText:Foo', defaultns = 'extended'},

expected = 'page',

},

{

group = 'defaultns=extended',

args = {page = 'TimedText talk:Foo', defaultns = 'extended'},

expected = 'page',

},

{

group = 'defaultns=extended',

args = {page = 'Special:PrefixIndex', defaultns = 'extended'},

expected = 'page',

},

{

group = 'defaultns=extended',

args = {page = 'Media:Example.jpg', defaultns = 'extended'},

expected = 'page',

},

{

group = 'defaultns=all',

args = {page = 'UK', defaultns = 'all'},

expected = 'redirect',

},

{

group = 'defaultns=all',

args = {page = 'Talk:UK', defaultns = 'all'},

expected = 'redirect',

},

{

group = 'defaultns=all',

args = {page = 'United Kingdom', defaultns = 'all'},

expected = 'article',

},

{

group = 'defaultns=all',

args = {page = 'Talk:United Kingdom', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Alien', defaultns = 'all'},

expected = 'page',

},

{

group = 'defaultns=all',

args = {page = 'Talk:Alien', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'User:Example', defaultns = 'all'},

expected = 'user page',

},

{

group = 'defaultns=all',

args = {page = 'User talk:Example', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Wikipedia:Namespace', defaultns = 'all'},

expected = 'project page',

},

{

group = 'defaultns=all',

args = {page = 'Wikipedia talk:Namespace', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Project:Namespace', defaultns = 'all'},

expected = 'project page',

},

{

group = 'defaultns=all',

args = {page = 'Project talk:Namespace', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'WP:Namespace', defaultns = 'all'},

expected = 'project page',

},

{

group = 'defaultns=all',

args = {page = 'WT:Namespace', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'File:Example.jpg', defaultns = 'all'},

expected = 'file',

},

{

group = 'defaultns=all',

args = {page = 'File talk:Example.jpg', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Image:Example.jpg', defaultns = 'all'},

expected = 'file',

},

{

group = 'defaultns=all',

args = {page = 'Image talk:Example.jpg', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'MediaWiki:Watchlist-details', defaultns = 'all'},

expected = 'interface page',

},

{

group = 'defaultns=all',

args = {page = 'MediaWiki talk:Watchlist-messages', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Template:Pagetype', defaultns = 'all'},

expected = 'template',

},

{

group = 'defaultns=all',

args = {page = 'Template talk:Pagetype', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Help:Contents', defaultns = 'all'},

expected = 'help page',

},

{

group = 'defaultns=all',

args = {page = 'Help talk:Contents', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Category:Wikipedians', defaultns = 'all'},

expected = 'category',

},

{

group = 'defaultns=all',

args = {page = 'Category talk:Wikipedians', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Portal:The arts', defaultns = 'all'},

expected = 'portal',

},

{

group = 'defaultns=all',

args = {page = 'Portal talk:The arts', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Draft:Example', defaultns = 'all'},

expected = 'draft',

},

{

group = 'defaultns=all',

args = {page = 'Draft talk:Example', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'TimedText:Foo', defaultns = 'all'},

expected = 'Timed Text page',

},

{

group = 'defaultns=all',

args = {page = 'TimedText talk:Foo', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'defaultns=all',

args = {page = 'Special:PrefixIndex', defaultns = 'all'},

expected = 'special page',

},

{

group = 'defaultns=all',

args = {page = 'Media:Example.jpg', defaultns = 'all'},

expected = 'file',

},

{

group = 'custom namespace text',

args = {page = 'UK', redirect = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Talk:UK', redirect = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Talk:UK', talk = 'custom text'},

expected = 'redirect',

},

{

group = 'custom namespace text',

args = {page = 'United Kingdom', main = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Talk:United Kingdom', main = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Talk:United Kingdom', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Alien', dab = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Talk:Alien', dab = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Talk:Alien', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'User:Example', user = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'User talk:Example', user = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'User talk:Example', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Wikipedia:Namespace', wikipedia = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Wikipedia talk:Namespace', wikipedia = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Wikipedia talk:Namespace', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Project:Namespace', project = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Project talk:Namespace', project = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Project talk:Namespace', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'WP:Namespace', wp = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'WT:Namespace', wp = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'WT:Namespace', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'WT:Namespace', wt = 'custom text'},

expected = 'page',

},

{

group = 'custom namespace text',

args = {page = 'Wikipedia:Namespace', project = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Wikipedia talk:Namespace', project = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'WP:Namespace', project = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'WT:Namespace', project = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Wikipedia:Namespace', wp = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Wikipedia talk:Namespace', wp = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Project:Namespace', wp = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Project talk:Namespace', wp = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'File:Example.jpg', file = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'File talk:Example.jpg', file = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'File talk:Example.jpg', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Image:Example.jpg', file = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Image talk:Example.jpg', file = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Image talk:Example.jpg', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'File:Example.jpg', image = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'File talk:Example.jpg', image = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'File talk:Example.jpg', image = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Image:Example.jpg', image = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Image talk:Example.jpg', image = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Image talk:Example.jpg', image = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'MediaWiki:Watchlist-details', mediawiki = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'MediaWiki talk:Watchlist-messages', mediawiki = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'MediaWiki talk:Watchlist-messages', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Template:Pagetype', template = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Template talk:Pagetype', template = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Template talk:Pagetype', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Help:Contents', help = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Help talk:Contents', help = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Help talk:Contents', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Category:Wikipedians', category = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Category talk:Wikipedians', category = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Category talk:Wikipedians', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Portal:The arts', portal = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Portal talk:The arts', portal = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Portal talk:The arts', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Draft:Example', draft = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Draft talk:Example', draft = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Draft talk:Example', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'TimedText:Foo', timedtext = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'TimedText talk:Foo', timedtext = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'TimedText talk:Foo', talk = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Special:PrefixIndex', special = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Media:Example.jpg', media = 'custom text'},

expected = 'custom text',

},

{

group = 'custom namespace text',

args = {page = 'Media:Example.jpg', file = 'custom text'},

expected = 'page',

},

{

group = 'order of precedence',

args = {module = 'foo'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {talk = 'bar'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {module = 'foo', talk = 'bar'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {page = 'Module:Example', module = 'foo', talk = 'bar'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'UK', defaultns = 'none', redirect = 'foo'},

expected = 'foo'

},

{

group = 'order of precedence',

args = {page = 'UK', defaultns = 'none', redirect = 'foo', main = 'bar'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'UK', defaultns = 'extended', redirect = 'foo'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'UK', defaultns = 'extended', main = 'foo', redirect = 'bar'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {page = 'UK', main = 'foo', redirect = 'bar'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {'dab', page = 'UK', main = 'foo', redirect = 'bar', dab = 'baz'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {'na', page = 'UK', main = 'foo', redirect = 'bar', na = 'baz'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {page = 'Talk:UK', main = 'foo', redirect = 'bar'},

expected = 'bar',

}, -- Talk:UK is a redirect.

{

group = 'order of precedence',

args = {page = 'Talk:UK', main = 'foo', redirect = 'bar', talk = 'baz'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {page = 'Foo', main = 'foo', redirect = 'bar'},

expected = 'bar',

}, -- Foo is a redirect.

{

group = 'order of precedence',

args = {page = 'Talk:Foo', main = 'foo', redirect = 'bar'},

expected = 'bar',

}, -- Talk:Foo is not a redirect.

{

group = 'order of precedence',

args = {page = 'Talk:Foo', main = 'foo', redirect = 'bar', talk = 'baz'},

expected = 'baz',

},

{

group = 'order of precedence',

args = {page = 'United Kingdom', main = 'foo', redirect = 'bar', talk = 'baz'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {'na', page = 'United Kingdom', main = 'foo', redirect = 'bar', talk = 'baz'},

expected = 'page',

},

{

group = 'order of precedence',

args = {'na', page = 'United Kingdom', main = 'foo', redirect = 'bar', talk = 'baz', na = 'yes'},

expected = 'page',

},

{

group = 'order of precedence',

args = {'na', page = 'United Kingdom', main = 'foo', redirect = 'bar', talk = 'baz', na = 'bin'},

expected = 'bin',

},

{

group = 'order of precedence',

args = {page = 'Alien', main = 'foo', dab = 'bar', talk = 'baz'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {'dab', page = 'Alien', main = 'foo', dab = 'bar', talk = 'baz'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {'dab', page = 'Alien', main = 'foo', talk = 'baz', dab = 'yes'},

expected = 'page',

},

{

group = 'order of precedence',

args = {'na', page = 'Alien', main = 'foo', dab = 'bar', talk = 'baz'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {'na', page = 'Alien', main = 'foo', dab = 'bar', talk = 'baz', na = 'yes'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {'na', page = 'Alien', main = 'foo', dab = 'bar', talk = 'baz', na = 'bin'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {page = 'Wikipedia:Namespace', wp = 'foo', project = 'bar', wikipedia = 'baz'},

expected = 'baz',

},

{

group = 'order of precedence',

args = {page = 'Wikipedia:Namespace', wp = 'foo', project = 'bar'},

expected = 'bar',

},

{

group = 'order of precedence',

args = {page = 'Wikipedia:Namespace', wp = 'foo'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'Wikipedia:Namespace', wikipedia = 'foo', wp = 'bar'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'Wikipedia talk:Namespace', wp = 'foo', project = 'bar', wikipedia = 'baz'},

expected = 'baz',

},

{

group = 'order of precedence',

args = {page = 'Wikipedia talk:Namespace', wp = 'foo', project = 'bar', wikipedia = 'baz', talk = 'bin'},

expected = 'bin',

},

{

group = 'order of precedence',

args = {page = 'Project talk:Namespace', wp = 'foo', project = 'bar', wikipedia = 'baz'},

expected = 'baz',

},

{

group = 'order of precedence',

args = {page = 'Project talk:Namespace', wp = 'foo', project = 'bar', wikipedia = 'baz', talk = 'bin'},

expected = 'bin',

},

{

group = 'order of precedence',

args = {page = 'File:Example.jpg', file = 'foo', image = 'bar'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'File talk:Example.jpg', file = 'foo', image = 'bar'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'File talk:Example.jpg', file = 'foo', image = 'bar', talk = 'baz'},

expected = 'baz',

},

{

group = 'order of precedence',

args = {page = 'Image:Example.jpg', file = 'foo', image = 'bar'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'Image talk:Example.jpg', file = 'foo', image = 'bar'},

expected = 'foo',

},

{

group = 'order of precedence',

args = {page = 'Image talk:Example.jpg', file = 'foo', image = 'bar', talk = 'baz'},

expected = 'baz',

},

{

group = 'other parameters',

args = {page = 'Wikipedia:Namespace'},

expected = 'page',

},

{

group = 'other parameters',

args = {page = 'Wikipedia:Namespace', other = 'custom text'},

expected = 'custom text',

},

{

group = 'other parameters',

args = {page = 'Wikipedia:Namespace', other = 'no'},

expected = 'page',

},

{

group = 'other parameters',

args = {page = 'Wikipedia:Namespace', other = 'yes'},

expected = 'page',

},

{

group = 'other parameters',

args = {page = 'Wikipedia:Namespace', other = 'custom text', wikipedia = 'wikipedia-space text'},

expected = 'wikipedia-space text',

},

{

group = 'other parameters',

args = {page = 'Template:Pagetype'},

expected = 'template',

},

{

group = 'other parameters',

args = {page = 'Template:Pagetype', other = 'custom text'},

expected = 'template',

},

{

group = 'other parameters',

args = {page = 'Template:Pagetype', other = 'no'},

expected = 'template',

},

{

group = 'other parameters',

args = {page = 'Template:Pagetype', other = 'yes'},

expected = 'template',

},

{

group = 'other parameters',

args = {page = 'Template:Pagetype', other = 'custom text', template = 'template-space text'},

expected = 'template-space text',

},

{

group = 'other parameters',

args = {page = 'Template:Pagetype', other = 'custom text', template = 'no'},

expected = 'custom text',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = 'yes'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = 'Yes'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = 'YeS'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = 'y'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = 'Y'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = 'true'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = 'True'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = 'TrUe'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = '1'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Wikipedia:Namespace', wikipedia = '1.0'},

expected = 'project page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = 'no'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = 'No'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = 'nO'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = 'n'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = 'N'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = 'false'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = 'False'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = 'fAlSe'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = '0'},

expected = 'page',

},

{

group = 'yesno',

args = {page = 'Template:Pagetype', template = '0.0'},

expected = 'page',

},

{

group = 'subject redirect defaultns=all',

args = {page = 'MediaWiki talk:Spam-blacklist/log', defaultns = 'all'},

expected = 'talk page',

},

{

group = 'caps',

args = {page = 'Wikipedia:Namespace', caps = 'y'},

expected = 'Page',

},

{

group = 'caps',

args = {page = 'Wikipedia:Namespace', caps = 'n'},

expected = 'page',

},

{

group = 'caps',

args = {page = 'Wikipedia:Namespace', caps = 'y', plural = 'y'},

expected = 'Pages'

},

{

group = 'soft redirect',

args = {page = 'Wikipedia:Access to usage logs'},

expected = 'redirect'

},

{

group = 'soft redirect',

args = {page = 'Wikipedia:Access to usage logs', soft_redirect = 'soft redirect'},

expected = 'soft redirect'

},

{

group = 'soft redirect',

args = {page = 'Wikipedia:Namespace', soft_redirect = 'soft redirect'},

expected = 'page'

},

{

group = 'soft redirect',

args = {page = 'Module:Contains soft redirect template comment'},

expected = 'module'

},

{

group = 'soft redirect',

args = {page = 'Template talk:Contains nowiki soft redirect invocation', defaultns = 'all'},

expected = 'talk page'

},

{

group = 'soft redirect',

args = {page = 'Wikipedia:Access to usage logs', soft_redirect = 'no'},

expected = 'page'

},

{

group = 'set index article',

args = {page = 'Felt lichen'},

expected = 'article'

},

{

group = 'set index article',

args = {page = 'Felt lichen', sia = 'set index article'},

expected = 'set index article'

},

{

group = 'set index article',

args = {page = 'United Kingdom', sia = 'set index article'},

expected = 'article'

},

{

group = 'disambiguation page',

args = {page = 'Alien'},

expected = 'page'

},

{

group = 'disambiguation page',

args = {page = 'Alien', dab = 'disambiguation page'},

expected = 'disambiguation page'

},

{

group = 'disambiguation page',

args = {page = 'United Kingdom', dab = 'disambiguation page'},

expected = 'article'

},

{

group = 'rfd',

args = {page = 'United Kingdom', redirect = 'redirect'},

expected = 'article'

},

{

group = 'rfd',

args = {page = 'Redirect under discussion', redirect = 'redirect'},

expected = 'redirect'

},

{

group = 'rfd',

args = {page = 'Redirect under discussion', redirect = 'no'},

expected = 'article'

},

{

group = 'rfd',

args = {page = 'Template:Redirect for discussion/testcases/test redirect (live)', redirect = 'redirect'},

expected = 'redirect'

},

{

group = 'rfd',

args = {page = 'Template:Redirect for discussion'},

expected = 'template'

},

{

group = 'subpage',

args = {page = 'Talk:Multiverse (Marvel Cinematic Universe)/FAQ'},

expected = 'page'

},

{

group = 'subpage',

args = {page = 'AC/DC'},

expected = 'article'

},

{

group = 'subpage',

args = {page = 'Template:Redirect for discussion/core'},

expected = 'template'

},

{

group = 'subpage',

args = {page = 'Wikipedia talk:WikiProject Women in Red/Events', defaultns = 'extended'},

expected = 'project page'

},

{

group = 'non-existent',

args = {page = 'Talk:WandaVision/FAQ', nonexistent = 'non-existent page'},

expected = 'non-existent page'

},

{

group = 'non-existent',

args = {page = 'Talk:WandaVision/FAQ'},

expected = 'page'

},

{

group = 'interface message',

args = {page = 'MediaWiki:Filetype-missing'},--using default message

expected = 'page'

},

{

group = 'interface message',

args = {page = 'MediaWiki:Filetype-missing', defaultns = 'extended'},--using default message

expected = 'interface page'

},

{

group = 'interface message',

args = {page = 'MediaWiki:Duplicate-args-warning'},--overriding default message

expected = 'page'

},

{

group = 'interface message',

args = {page = 'MediaWiki:Duplicate-args-warning', defaultns = 'extended'},--overriding default message

expected = 'interface page'

},

{

group = 'interface message',

args = {page = 'MediaWiki:Fghghghg', defaultns = 'extended'},--non-existent message

expected = 'page'

},

{

group = 'interface message',

args = {page = 'MediaWiki:Fghghghg'},--non-existent message

expected = 'page'

},

{

group = 'files',

args = {page = 'File:Garzweiler surface mine, October 2018, -01.jpg'},--image on Commons

expected = 'file'

},

{

group = 'files',

args = {page = 'File:1975 45 Single Label Jackson Browne Fountain of Sorrow Asylum Records.jpg'},--image on Wikipedia

expected = 'file'

},

{

group = 'files',

args = {page = 'File:ffiisjsjdjd.jpg'},--non-existent image

expected = 'page'

},

}

for i, test in ipairs(pageTypeTests) do

local invocation = mTemplateInvocation.invocation("pagetype", test.args)

local testName = string.format(

'test %03d (%s): %s produces "%s"',

i,

test.group,

invocation,

test.expected

)

suite[testName] = function (suite)

local actual = mMockTitle.patchTitleConstructors(mPageType.main, test.args)

suite:assertEquals(test.expected, actual)

end

end

return suite