Home
Random
Recent changes
Special pages
Community portal
Preferences
About Stockhub
Disclaimers
Search
User menu
Talk
Contributions
Create account
Log in
Editing
Module:Mock title/testcases
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local mMockTitle = require("Module:Mock title") local ScribuntoUnit = require("Module:ScribuntoUnit") local suite = ScribuntoUnit:new() -------------------------------------------------------------------------------- -- MockTitle tests -------------------------------------------------------------------------------- suite["test MockTitle: when no argument table is supplied, an error is raised"] = function (self) self:assertThrows( function () mMockTitle.MockTitle() end, "bad argument #1 to 'MockTitle' (table expected, got nil)" ) end suite["test MockTitle: when no page argument is supplied, an error is raised"] = function (self) self:assertThrows( function () mMockTitle.MockTitle{} end, "bad named argument page to 'MockTitle' (string or number expected, got nil)" ) end local pageNames = { "Example", "fr:Example", "Module:Sandbox", "Module:Sandbox/subpage", "mw:Test", "fr:b:Example", } for _, pageName in ipairs(pageNames) do suite[ string.format( 'test MockTitle: when using page name "%s", the prefixedText property equals the page name', pageName ) ] = function (self) self:assertEquals("Example", mMockTitle.MockTitle({page = "Example"}).prefixedText) end end local simplePropertyTestData = { { property = "id", page = "Example", value = 123456, }, { property = "isRedirect", page = "Main Page", value = true, }, { property = "exists", page = "Main Page", value = false, }, { property = "contentModel", page = "Main Page", value = "foo", }, } for _, testData in ipairs(simplePropertyTestData) do suite[string.format("test MockTitle: property %s is mocked using the %s option", testData.property, testData.property)] = function (self) local title = mMockTitle.MockTitle({page = testData.page, [testData.property] = testData.value}) self:assertEquals(testData.value, title[testData.property]) end end suite["test MockTitle: passing a page name to the redirectTarget option causes redirectTarget to be a MockTitle object with that page name"] = function (self) local title = mMockTitle.MockTitle({page = "Example", redirectTarget = "User:Example"}) self:assertEquals("User:Example", title.redirectTarget.prefixedText) end suite["test MockTitle: passing an ID to the redirectTarget option causes redirectTarget to be a MockTitle object with that ID"] = function (self) local mainPageId = 15580374 local title = mMockTitle.MockTitle({page = "Example", redirectTarget = mainPageId}) self:assertEquals(mainPageId, title.redirectTarget.id) end suite["test MockTitle: passing an options table to the redirectTarget option causes redirectTarget to be a MockTitle object with those options"] = function (self) local title = mMockTitle.MockTitle({page = "Example", redirectTarget = {page = "User:Example/common.js", contentModel = "wikitext"}}) self:assertEquals("User:Example/common.js", title.redirectTarget.prefixedText) self:assertEquals("wikitext", title.redirectTarget.contentModel) end suite["test MockTitle: passing a MockTitle object to the redirectTarget option causes redirectTarget to be that MockTitle object"] = function (self) local mockRedirectTarget = mMockTitle.MockTitle({page = "User:Example/common.js", contentModel = "wikitext"}) local title = mMockTitle.MockTitle({page = "Example", redirectTarget = mockRedirectTarget}) self:assertEquals("User:Example/common.js", title.redirectTarget.prefixedText) self:assertEquals("wikitext", title.redirectTarget.contentModel) end local protectionLevelTestData = { { optionName = "editProtection", optionValue = "sysop", expectedProtectionAction = "edit", }, { optionName = "moveProtection", optionValue = "sysop", expectedProtectionAction = "move", }, { optionName = "createProtection", optionValue = "sysop", expectedProtectionAction = "create", }, { optionName = "uploadProtection", optionValue = "sysop", expectedProtectionAction = "upload", }, } for _, testData in ipairs(protectionLevelTestData) do suite[ string.format( 'test MockTitle: when setting option %s to "%s", the protectionLevels table is updated accordingly', testData.optionName, testData.optionValue ) ] = function (self) local title = mMockTitle.MockTitle{page = "Example", [testData.optionName] = testData.optionValue} self:assertEquals(testData.optionValue, title.protectionLevels[testData.expectedProtectionAction][1]) end end local cascadingProtectionLevelTestData = { { optionName = "cascadingEditProtection", optionValue = "sysop", expectedProtectionAction = "edit", }, { optionName = "cascadingMoveProtection", optionValue = "sysop", expectedProtectionAction = "move", }, { optionName = "cascadingCreateProtection", optionValue = "sysop", expectedProtectionAction = "create", }, { optionName = "cascadingUploadProtection", optionValue = "sysop", expectedProtectionAction = "upload", }, } for _, testData in ipairs(cascadingProtectionLevelTestData) do suite[ string.format( 'test MockTitle: when setting option %s to "%s", ' .. 'and when setting the cascadingProtectionSources option, ' .. 'the cascadingProtection table is updated accordingly', testData.optionName, testData.optionValue ) ] = function (self) local title = mMockTitle.MockTitle{ page = "Example", [testData.optionName] = testData.optionValue, cascadingProtectionSources = {"Example", "Example 2"}, } self:assertEquals( testData.optionValue, title.cascadingProtection.restrictions[testData.expectedProtectionAction][1] ) self:assertDeepEquals( {"Example", "Example 2"}, title.cascadingProtection.sources ) end end suite["test MockTitle: when a cascading protection argument is given, but no cascading protection sources are given, an error is raised"] = function (self) self:assertThrows( function () mMockTitle.MockTitle{page = "Example", cascadingEditProtection = "sysop"} end, "a cascading protection argument was given but the cascadingProtectionSources argument was missing or empty" ) end suite["test MockTitle: when a cascading protection argument is given, but the cascading protection sources table is empty, an error is raised"] = function (self) self:assertThrows( function () mMockTitle.MockTitle{page = "Example", cascadingEditProtection = "sysop", cascadingProtectionSources = {}} end, "a cascading protection argument was given but the cascadingProtectionSources argument was missing or empty" ) end suite["test MockTitle: when cascading protection sources are given, but no cascading protection argument is given, an error is raised"] = function (self) self:assertThrows( function () mMockTitle.MockTitle{page = "Example", cascadingProtectionSources = {"Example 2", "Example 3"}} end, "the cascadingProtectionSources argument was given, but no cascading protection argument was given" ) end suite['test MockTitle: if the content option is provided, getContent() returns the specified string'] = function (self) local title = mMockTitle.MockTitle{page = "Non-existent page 29dh12yxm", content = "some [[wikitext]] content"} self:assertEquals("some [[wikitext]] content", title:getContent()) end local filePropertyTestData = { { property = "exists", optionName = "fileExists", optionValue = true, }, { property = "width", optionName = "fileWidth", optionValue = 123, }, { property = "height", optionName = "fileHeight", optionValue = 456, }, { property = "pages", optionName = "filePages", optionValue = 3, }, { property = "size", optionName = "fileSize", optionValue = 1024, }, { property = "mimeType", optionName = "fileMimeType", optionValue = "image/png", }, { property = "length", optionName = "fileLength", optionValue = 60, }, } for _, testData in ipairs(filePropertyTestData) do suite[string.format( 'test MockTitle: when setting option %s to "%s", the file table is updated accordingly', testData.optionName, tostring(testData.optionValue) )] = function(self) local title = mMockTitle.MockTitle{page = "File:Non-existent hf893bc0.png", [testData.optionName] = testData.optionValue} self:assertEquals(testData.optionValue, title.file[testData.property]) end end suite["test MockTitle: when setting fileExists in a non-file namespace, no file table is set"] = function(self) local title = mMockTitle.MockTitle{page = "Non-existent page 34u8wg90bfr", fileExists = true} self:assertEquals(nil, title.file) end local fileExistsTestData = { { page = "Non-existent article tr9w78ebna0", expected = nil, }, { page = "Talk:Non-existent talk page 34hdbe0pafj", expected = nil, }, { page = "File:Non-existent file 341gh87fgg8", expected = true, }, { page = "Media:Non-existent file pbfhrw3v8d", expected = true, }, } for _, testData in ipairs(fileExistsTestData) do suite[ string.format( 'test MockTitle: when using page "%s", the fileExists property is %s', testData.page, testData.expected and "set" or "not set" ) ] = function (self) local title = mMockTitle.MockTitle({page = testData.page, fileExists = true}) self:assertEquals(testData.expected, title.fileExists) end end local fallbackPropertyTestData = { { property = "id", option = "id", page = "Example", }, { property = "isRedirect", option = "isRedirect", page = "WP:ANI", }, { property = "exists", option = "exists", page = "Non-existent title f292umz0tyi", }, { property = "contentModel", option = "contentModel", page = "User:Example/common.js", }, { property = "redirectTarget", option = "redirectTarget", page = "WP:ANI", }, { property = "protectionLevels", option = "editProtection", page = "Main Page", }, { property = "redirectTarget", option = "redirectTarget", page = "WP:ANI", }, { property = "cascadingProtection", option = "cascadingEditProtection", page = "Main Page", }, { property = "cascadingProtection", option = "cascadingProtectionSources", page = "Main Page", }, } for _, testData in ipairs(fallbackPropertyTestData) do suite[string.format("test MockTitle: if no %s option is specified, the real %s value is used", testData.option, testData.property)] = function (self) suite:assertDeepEquals( mw.title.new(testData.page)[testData.property], mMockTitle.MockTitle{page = testData.page}[testData.property] ) end end suite["test MockTitle: if no content option is specified, getContent() returns the the real content"] = function (self) suite:assertEquals( mw.title.new("Main Page"):getContent(), mMockTitle.MockTitle{page = "Main Page"}:getContent() ) end return suite
Summary:
Please note that all contributions to Stockhub may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Stockhub:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Template used on this page:
Module:Mock title/testcases/doc
(
edit
)