Module:Pagetype/testcases

From Wikipedia, the free encyclopedia
-- 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 <code><nowiki>{{soft redirect}}</nowiki></code>'
	},
	{
		title = 'Redirect under discussion',
		exists = true,
		isRedirect = false,
		content = '{{NOINDEX}}{{<includeonly>safesubst:</includeonly>#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'
	}
}

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