Module:Wikitext Parsing/testcases

--Go to the talk page to see the results of the tests --Consider making sure that other modules that rely heavily on this module (E.g. Module:Template parameter value) also pass their testcases local p = require('Module:UnitTests')

local frame = mw.getCurrentFrame local function preprocess(text, IsPrepared) local content = mw.text.unstrip(frame:preprocess(text)) if IsPrepared then content = mw.text.decode(content) end return content end

function p:_internal_test(module, name) --All PrepareText runs have keepComments set to true for testing convenience --Test conditions: --1) The escaped text should match our expectation for escaped text	--2) The escaped text should always preprocess to the same as the original text (we only nowiki nowiki'd content) local PrepareTextTestN = 1 local function TestPrepareText(...) local OriginalString = "" local ExpectedEscapedString = "" local args = {...} for i = 1, #args do OriginalString = OriginalString .. args[i] ExpectedEscapedString = ExpectedEscapedString .. (i%2 == 1 and args[i] or mw.text.nowiki(args[i])) end local ModuleEscapedString = module.PrepareText(OriginalString, true) self:equals(name.."PrepareText Escape Test "..PrepareTextTestN, ExpectedEscapedString, ModuleEscapedString, {nowiki=1}) self:equals(name.."PrepareText Preprocess Test "..PrepareTextTestN, preprocess(OriginalString), preprocess(ModuleEscapedString, true), {nowiki=1}) PrepareTextTestN = PrepareTextTestN + 1 end --== PrepareText ==-- --Standard comment escape TestPrepareText(	--	R--, NW--, R-		"BA"	)

--Even when there's no end, the content inside is escaped TestPrepareText(	--	R--, NW--, R--		"A<", "nowiki", ">|B}}"	)

--A decently complex case TestPrepareText(	--	R-, NW---, R--, NW, R---, NW--,		"Hey!<", "nowiki\nA", "|Should see|Shouldn't see}}"	)

--Another decently complex case TestPrepareText(	--	R---,		"{{User:Aidan9382/templates/dummy\n|A|B|C { } } {\n|<",	--	NW--, R--, NW-, R---, NW--, R--, NW---, R--, NW-, R---,		"nowiki", ">", "D", "\n|<", "pre", ">", "E\n|F", "\n|G|=|a=|A  =  |A=B=<", "nowiki",	--	R--, NW--, R---, NW--, R--		">", "", "}}|A B=Success}}"	) end

function p:test_live p:_internal_test(require("Module:Wikitext Parsing"), "Live ") end

function p:test_sandbox p:_internal_test(require("Module:Wikitext Parsing/sandbox"), "Sandbox ") end

-- Code for testing ParseTemplates that doesn't exactly work (not a primary feature so not a huge concern) --[====[	--Test conditions: --1) The parsed information matches the expected information	local ParseTemplatesTestN = 1	local function TestParseTemplates(OriginalString, ExpectedInformation)		local ModuleInformation = module.ParseTemplates(OriginalString)[1]		ModuleInformation.Children = nil --This isn't gonna be tested properly rn due to reasons		mw.logObject(ModuleInformation)		self:equals_deep(name.."ParseTemplates Test "..ParseTemplatesTestN, ExpectedInformation, ModuleInformation, {nowiki=1})		ParseTemplatesTestN = ParseTemplatesTestN + 1	end

--== ParseTemplates ==-- -- Just the one test since this feature isn't entirely developed local TestString = "{{User:Aidan9382/templates/dummy\n|A|B|C { } " .. "} {\n| D \n| E\n|F \n|G|=|a=|A =  |A=B= }}|A B=Success}}" TestParseTemplates(		"\nA"..TestString.."B\n",		{			Text = TestString, Name = "User:Aidan9382.templates/dummy",			ArgOrder = {"1", "2", "3", "4", "5", "6", "", "a", "A", "A B"},			Args = {				["1"]="A", ["2"]="B", ["3"]="C {{{A|B}}} { } } {",				["4"]=" D ", ["5"]=" E\n|F ",				["6"]="G", [""]="", a="",				A="|A=B= }}",				["A B"]="Success"			}		}	) ]====]

return p