Jump to content

Module:WikitextParser/testcases

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Sophivorus (talk | contribs) at 15:01, 27 February 2024 (Add testReferences). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.
local W = require( 'Module:WikitextParser' )
local testpage = mw.title.new( 'Module:WikitextParser/testpage' ):getContent()
local ScribuntoUnit = require( 'Module:ScribuntoUnit' )
local Suite = ScribuntoUnit:new()

function Suite:testTags()
	self:assertDeepEquals( {}, W.getTags( 'a' ) ) -- no tags
	self:assertDeepEquals( {'<div>a'}, W.getTags( '<div>a' ) ) -- unclosed tag
	self:assertDeepEquals( {'<div></div>'}, W.getTags( '<div></div>' ) ) -- empty tag
	self:assertDeepEquals( {'<div></div>'}, W.getTags( 'a<div></div>b' ) )
	self:assertDeepEquals( {'<div>a</div>'}, W.getTags( '<div>a</div>' ) ) -- simple case
	self:assertDeepEquals( {'<div>b</div>'}, W.getTags( 'a<div>b</div>c' ) )
	self:assertDeepEquals( {'< div >a</ div >'}, W.getTags( '< div >a</ div >' ) ) -- weird spacing
	self:assertDeepEquals( {'<div class="a">b</div>'}, W.getTags( '<div class="a">b</div>' ) ) -- attributes
	self:assertDeepEquals( {'<div><div></div></div>','<div></div>'}, W.getTags( '<div><div></div></div>' ) ) -- nested tags
	self:assertDeepEquals( {'<div>b<div>c</div>d</div>','<div>c</div>'}, W.getTags( 'a<div>b<div>c</div>d</div>e' ) )
	self:assertDeepEquals( {'<div><div><span>a</span></div></div>','<div><span>a</span></div>','<span>a</span>'}, W.getTags( '<div><div><span>a</span></div></div>' ) )
	self:assertDeepEquals( {
		'<gallery>\nFile:A.png|g<ref>g</ref>\nFile:B.png\n</gallery>',
		'<ref>g</ref>',
		'<br>',
		'<br />',
		'<hr>',
		'<div>a<div>b</div></div>',
		'<div>b</div>',
		'<span class="a">b<span id="c">d</span></span>',
		'<span id="c">d</span>',
		'<section begin="a" />',
		'<section end="a" />',
		'<section begin="b" />',
		'<section end="b" />',
		'<section begin="c" />',
		'<section end="c" />',
		'<ref>b</ref>',
		'<ref name="d">e</ref>',
		'<ref name="d" />',
		'<ref name="h" group="i">j</ref>',
		'<ref name="l" />',
		'<ref name="l">m</ref>',
		'<noinclude>b</noinclude>',
	}, W.getTags( testpage ) )
end

function Suite:testGalleries()
	self:assertDeepEquals( {}, W.getGalleries( 'a' ) )
	self:assertDeepEquals( {'<gallery>a</gallery>'}, W.getGalleries( '<gallery>a</gallery>' ) )
	self:assertDeepEquals( {'<gallery>b</gallery>'}, W.getGalleries( 'a<gallery>b</gallery>c' ) )
	self:assertDeepEquals( {'<gallery>\nFile:A.png\nFile:B.png\n</gallery>'}, W.getGalleries( '<gallery>\nFile:A.png\nFile:B.png\n</gallery>' ) )
	self:assertDeepEquals( {'<gallery>\nFile:A.png\nFile:B.png\n</gallery>'}, W.getGalleries( 'a<gallery>\nFile:A.png\nFile:B.png\n</gallery>b' ) )
	self:assertDeepEquals( {
		'<gallery>\nFile:A.png|g<ref>g</ref>\nFile:B.png\n</gallery>',
	}, W.getGalleries( testpage ) )
end

function Suite:testReferences()
	self:assertDeepEquals( {}, W.getReferences( 'a' ) )
	self:assertDeepEquals( {'<ref>a</ref>'}, W.getReferences( '<ref>a</ref>' ) )
	self:assertDeepEquals( {'<ref>b</ref>'}, W.getReferences( 'a<ref>b</ref>c' ) )
	self:assertDeepEquals( {'<ref>b</ref>','<ref>d</ref>'}, W.getReferences( 'a<ref>b</ref>c<ref>d</ref>' ) )
	self:assertDeepEquals( {'<ref name="b">c</ref>','<ref name="b" />'}, W.getReferences( 'a<ref name="b">c</ref>d<ref name="b" />' ) )
	self:assertDeepEquals( {
		'<ref>g</ref>',
		'<ref>b</ref>',
		'<ref name="d">e</ref>',
		'<ref name="d" />',
		'<ref name="h" group="i">j</ref>',
		'<ref name="l" />',
		'<ref name="l">m</ref>',
	}, W.getReferences( testpage ) )
end

function Suite:testTables()
	self:assertDeepEquals( {}, W.getTables( 'a' ) ) -- no tables
	self:assertDeepEquals( {'{|\n!b\n|}'}, W.getTables( 'a\n{|\n!b\n|}\nc' ) ) -- one table
	self:assertDeepEquals( {'{|\n!b\n|}','{|\n|d\n|}','{|id="e"\n|e\n|}'}, W.getTables( 'a\n{|\n!b\n|}\nc\n{|\n|d\n|}\n{|id="e"\n|e\n|}f' ) ) -- many tables
	self:assertDeepEquals( {
		'{|\n!b\n|}',
		'{|\n|d\n|}',
		'{|id="e"\n|e\n|}',
		'{|\n!c\n|}',
		'{|\n|X2\n|}',
		'{|\n|e\n|}',
		'{|\n|k\n|}',
		'{|\n|e\n|}',
		'{|\n|k\n|}',
	}, W.getTables( testpage ) )
end

function Suite:testLinks()
	self:assertDeepEquals( {}, W.getLinks( 'a' ) ) -- no links
	self:assertDeepEquals( {'[[a]]'}, W.getLinks( '[[a]]' ) )
	self:assertDeepEquals( {'[[a|b]]'}, W.getLinks( '[[a|b]]' ) )
	self:assertDeepEquals( {'[[b]]'}, W.getLinks( 'a[[b]]c' ) )
	self:assertDeepEquals( {'[[b]]','[[d]]'}, W.getLinks( 'a[[b]]c[[d]]e' ) )
	self:assertDeepEquals( {
		'[[Module:WikitextParser/testcases]]',
		'[[link]]',
		'[[File:Name.jpg|thumb|X1]]',
		'[[File:A.png]]',
		'[[File:C.png]]',
		'[[b]]',
		'[[d]]',
		'[[Module talk:Transcluder/testcases]]',
		'[[module talk:Transcluder/testcases]]',
		'[[Module talk:Transcluder/testcases|a]]',
		'[[module talk:Transcluder/testcases|a]]',
		'[[File:A.png]]',
		'[[File:f.png]]',
		'[[File:A.png]]',
		'[[File:f.png]]',
		'[[Category:X1]]',
		'[[Category:X2]]',
		'[[Category:X3]]',
	}, W.getLinks( testpage ) )
end

function Suite:testCategories()
	self:assertDeepEquals( {}, W.getCategories( 'a' ) )
	self:assertDeepEquals( {}, W.getCategories( '[[a]]' ) )
	self:assertDeepEquals( {'[[Category:a]]'}, W.getCategories( '[[Category:a]]' ) )
	self:assertDeepEquals( {'[[ category : a ]]'}, W.getCategories( '[[ category : a ]]' ) )
	self:assertDeepEquals( {'[[Category:b]]'}, W.getCategories( 'a[[Category:b]]c' ) )
	self:assertDeepEquals( {'[[Category:b]]','[[Category:c]]'}, W.getCategories( 'a[[Category:b]][[Category:c]]d' ) )
	self:assertDeepEquals( {
		'[[Category:X1]]',
		'[[Category:X2]]',
		'[[Category:X3]]',
	}, W.getCategories( testpage ) )
end

function Suite:testFiles()
	self:assertDeepEquals( {}, W.getFiles( 'a' ) )
	self:assertDeepEquals( {}, W.getFiles( '[[a]]' ) )
	self:assertDeepEquals( {'[[File:a]]'}, W.getFiles( '[[File:a]]' ) )
	self:assertDeepEquals( {'[[ file : a ]]'}, W.getFiles( '[[ file : a ]]' ) )
	self:assertDeepEquals( {'[[File:b]]'}, W.getFiles( 'a[[File:b]]c' ) )
	self:assertDeepEquals( {'[[File:b]]','[[File:c]]'}, W.getFiles( 'a[[File:b]][[File:c]]d' ) )
	self:assertDeepEquals( {
		'[[File:Name.jpg|thumb|X1]]',
		'[[File:A.png]]',
		'[[File:C.png]]',
		'[[File:A.png]]',
		'[[File:f.png]]',
		'[[File:A.png]]',
		'[[File:f.png]]',
	}, W.getFiles( testpage ) )
end

return Suite