Jump to content

Module:WikitextParser/testcases: Difference between revisions

From Wikipedia, the free encyclopedia
Content deleted Content added
Remove replacing elements as not currently needed
Add test cases for getFileName
Line 1: Line 1:
local W = require( 'Module:WikitextParser' )
local parser = require( 'Module:WikitextParser' )
local testpage = mw.title.new( 'Module:WikitextParser/testpage' ):getContent()
local testpage = mw.title.new( 'Module:WikitextParser/testpage' ):getContent()
local ScribuntoUnit = require( 'Module:ScribuntoUnit' )
local ScribuntoUnit = require( 'Module:ScribuntoUnit' )
Line 5: Line 5:


function Suite:testLead()
function Suite:testLead()
self:assertEquals( '', W.getLead( '' ) )
self:assertEquals( '', parser.getLead( '' ) )
self:assertEquals( '', W.getLead( '==b==' ) )
self:assertEquals( '', parser.getLead( '==b==' ) )
self:assertEquals( 'a', W.getLead( 'a' ) )
self:assertEquals( 'a', parser.getLead( 'a' ) )
self:assertEquals( 'a', W.getLead( 'a', 'a\n==b==' ) )
self:assertEquals( 'a', parser.getLead( 'a', 'a\n==b==' ) )
self:assertEquals( 'This test page interacts with [[Module:WikitextParser/testcases]].', W.getLead( testpage ) )
self:assertEquals( 'This test page interacts with [[Module:WikitextParser/testcases]].', parser.getLead( testpage ) )
end
end


function Suite:testSection()
function Suite:testSection()
self:assertEquals( nil, W.getSection( 'a', 'a' ) )
self:assertEquals( nil, parser.getSection( 'a', 'a' ) )
self:assertEquals( '', W.getSection( '==a==', 'a' ) )
self:assertEquals( '', parser.getSection( '==a==', 'a' ) )
self:assertEquals( 'b', W.getSection( '==a==\nb', 'a' ) )
self:assertEquals( 'b', parser.getSection( '==a==\nb', 'a' ) )
self:assertEquals( 'b', W.getSection( '==a==\nb\n==c==\nd', 'a' ) )
self:assertEquals( 'b', parser.getSection( '==a==\nb\n==c==\nd', 'a' ) )
self:assertEquals( 'b', W.getSection( '==a==\nb\n==a==\nd', 'a' ) )
self:assertEquals( 'b', parser.getSection( '==a==\nb\n==a==\nd', 'a' ) )
self:assertEquals( 'b\n===c===\nd', W.getSection( '==a==\nb\n===c===\nd', 'a' ) )
self:assertEquals( 'b\n===c===\nd', parser.getSection( '==a==\nb\n===c===\nd', 'a' ) )
self:assertEquals( 'd', W.getSection( '==a==\nb\n===c===\nd', 'c' ) )
self:assertEquals( 'd', parser.getSection( '==a==\nb\n===c===\nd', 'c' ) )
self:assertEquals( 'a\n===Subsection===\nb', W.getSection( testpage, 'Section' ) )
self:assertEquals( 'a\n===Subsection===\nb', parser.getSection( testpage, 'Section' ) )
self:assertEquals( 'b', W.getSection( testpage, 'Subsection' ) )
self:assertEquals( 'b', parser.getSection( testpage, 'Subsection' ) )
end
end


function Suite:testSectionTag()
function Suite:testSectionTag()
self:assertEquals( nil, W.getSectionTag( 'a', 'a' ) )
self:assertEquals( nil, parser.getSectionTag( 'a', 'a' ) )
self:assertEquals( nil, W.getSectionTag( 'a<section begin="b" /><section end="b" />c', 'a' ) )
self:assertEquals( nil, parser.getSectionTag( 'a<section begin="b" /><section end="b" />c', 'a' ) )
self:assertEquals( '', W.getSectionTag( 'a<section begin="b" /><section end="b" />c', 'b' ) )
self:assertEquals( '', parser.getSectionTag( 'a<section begin="b" /><section end="b" />c', 'b' ) )
self:assertEquals( 'c', W.getSectionTag( 'a<section begin="b" />c<section end="b" />d', 'b' ) )
self:assertEquals( 'c', parser.getSectionTag( 'a<section begin="b" />c<section end="b" />d', 'b' ) )
self:assertEquals( '', W.getSectionTag( testpage, 'a' ) )
self:assertEquals( '', parser.getSectionTag( testpage, 'a' ) )
self:assertEquals( 'b', W.getSectionTag( testpage, 'b' ) )
self:assertEquals( 'b', parser.getSectionTag( testpage, 'b' ) )
self:assertEquals( '{|\n!c\n|}', W.getSectionTag( testpage, 'c' ) )
self:assertEquals( '{|\n!c\n|}', parser.getSectionTag( testpage, 'c' ) )
self:assertEquals( nil, W.getSectionTag( testpage, 'd' ) )
self:assertEquals( nil, parser.getSectionTag( testpage, 'd' ) )
end
end


function Suite:testSections()
function Suite:testSections()
self:assertDeepEquals( {}, W.getSections( '' ) )
self:assertDeepEquals( {}, parser.getSections( '' ) )
self:assertDeepEquals( {}, W.getSections( 'a' ) )
self:assertDeepEquals( {}, parser.getSections( 'a' ) )
self:assertDeepEquals( { ['a']='' }, W.getSections( '==a==' ) )
self:assertDeepEquals( { ['a']='' }, parser.getSections( '==a==' ) )
self:assertDeepEquals( { ['b']='' }, W.getSections( 'a\n==b==' ) )
self:assertDeepEquals( { ['b']='' }, parser.getSections( 'a\n==b==' ) )
self:assertDeepEquals( { ['a']='', ['b']='' }, W.getSections( '==a==\n==b==' ) )
self:assertDeepEquals( { ['a']='', ['b']='' }, parser.getSections( '==a==\n==b==' ) )
self:assertDeepEquals( { ['a']='b' }, W.getSections( '==a==\nb' ) )
self:assertDeepEquals( { ['a']='b' }, parser.getSections( '==a==\nb' ) )
self:assertDeepEquals( { ['b']='c' }, W.getSections( 'a\n==b==\nc' ) )
self:assertDeepEquals( { ['b']='c' }, parser.getSections( 'a\n==b==\nc' ) )
self:assertDeepEquals( { ['b']='c', ['d']='e' }, W.getSections( 'a\n==b==\nc\n===d===\ne' ) )
self:assertDeepEquals( { ['b']='c', ['d']='e' }, parser.getSections( 'a\n==b==\nc\n===d===\ne' ) )
end
end


function Suite:testLists()
function Suite:testLists()
self:assertDeepEquals( {}, W.getLists( '' ) )
self:assertDeepEquals( {}, parser.getLists( '' ) )
self:assertDeepEquals( {}, W.getLists( 'a' ) )
self:assertDeepEquals( {}, parser.getLists( 'a' ) )
self:assertDeepEquals( { '*a' }, W.getLists( '*a' ) )
self:assertDeepEquals( { '*a' }, parser.getLists( '*a' ) )
self:assertDeepEquals( { '*a\n*b' }, W.getLists( '*a\n*b' ) )
self:assertDeepEquals( { '*a\n*b' }, parser.getLists( '*a\n*b' ) )
self:assertDeepEquals( { '*b\n*c' }, W.getLists( 'a\n*b\n*c\nd' ) )
self:assertDeepEquals( { '*b\n*c' }, parser.getLists( 'a\n*b\n*c\nd' ) )
self:assertDeepEquals( { '*b\n*c', '#e\n#f' }, W.getLists( 'a\n*b\n*c\nd\n#e\n#f\ng' ) )
self:assertDeepEquals( { '*b\n*c', '#e\n#f' }, parser.getLists( 'a\n*b\n*c\nd\n#e\n#f\ng' ) )
self:assertDeepEquals( {
self:assertDeepEquals( {
'*b\n*c',
'*b\n*c',
Line 60: Line 60:
'*c\n*d',
'*c\n*d',
'#h\n#i',
'#h\n#i',
}, W.getLists( testpage ) )
}, parser.getLists( testpage ) )
end
end


function Suite:testParagraphs()
function Suite:testParagraphs()
self:assertDeepEquals( {}, W.getParagraphs( '' ) )
self:assertDeepEquals( {}, parser.getParagraphs( '' ) )
self:assertDeepEquals( {}, W.getParagraphs( '{{a}}' ) )
self:assertDeepEquals( {}, parser.getParagraphs( '{{a}}' ) )
self:assertDeepEquals( {}, W.getParagraphs( '{{a\n|b=c}}' ) )
self:assertDeepEquals( {}, parser.getParagraphs( '{{a\n|b=c}}' ) )
self:assertDeepEquals( {}, W.getParagraphs( '{{a}}\n{{b}}\n{{c}}' ) )
self:assertDeepEquals( {}, parser.getParagraphs( '{{a}}\n{{b}}\n{{c}}' ) )
self:assertDeepEquals( {}, W.getParagraphs( '{{a}}\n\n{{b}}\n\n{{c}}' ) )
self:assertDeepEquals( {}, parser.getParagraphs( '{{a}}\n\n{{b}}\n\n{{c}}' ) )
self:assertDeepEquals( { 'a' }, W.getParagraphs( 'a' ) )
self:assertDeepEquals( { 'a' }, parser.getParagraphs( 'a' ) )
self:assertDeepEquals( { 'a{{b}}' }, W.getParagraphs( 'a{{b}}' ) )
self:assertDeepEquals( { 'a{{b}}' }, parser.getParagraphs( 'a{{b}}' ) )
self:assertDeepEquals( { '{{a}}b' }, W.getParagraphs( '{{a}}b' ) )
self:assertDeepEquals( { '{{a}}b' }, parser.getParagraphs( '{{a}}b' ) )
self:assertDeepEquals( { 'a' }, W.getParagraphs( 'a\n\n{{b}}' ) )
self:assertDeepEquals( { 'a' }, parser.getParagraphs( 'a\n\n{{b}}' ) )
self:assertDeepEquals( { 'b' }, W.getParagraphs( '{{a}}\n\nb' ) )
self:assertDeepEquals( { 'b' }, parser.getParagraphs( '{{a}}\n\nb' ) )
self:assertDeepEquals( { '{{a}}b{{c}}' }, W.getParagraphs( '{{a}}b{{c}}' ) )
self:assertDeepEquals( { '{{a}}b{{c}}' }, parser.getParagraphs( '{{a}}b{{c}}' ) )
self:assertDeepEquals( { 'a', 'b', 'c' }, W.getParagraphs( 'a\n\nb\n\nc' ) )
self:assertDeepEquals( { 'a', 'b', 'c' }, parser.getParagraphs( 'a\n\nb\n\nc' ) )
self:assertDeepEquals( { 'a', 'c' }, W.getParagraphs( 'a\n\n{{b}}\n\nc' ) )
self:assertDeepEquals( { 'a', 'c' }, parser.getParagraphs( 'a\n\n{{b}}\n\nc' ) )
self:assertDeepEquals( {
self:assertDeepEquals( {
'X1',
'X1',
'{{X2}} X3 {{X4}}',
'{{X2}} X3 {{X4}}',
}, W.getParagraphs( W.getSection( testpage, 'Paragraphs' ) ) )
}, parser.getParagraphs( parser.getSection( testpage, 'Paragraphs' ) ) )
end
end


function Suite:testTemplates()
function Suite:testTemplates()
self:assertDeepEquals( {}, W.getTemplates( 'a' ) )
self:assertDeepEquals( {}, parser.getTemplates( 'a' ) )
self:assertDeepEquals( { '{{a}}' }, W.getTemplates( '{{a}}' ) )
self:assertDeepEquals( { '{{a}}' }, parser.getTemplates( '{{a}}' ) )
self:assertDeepEquals( { '{{b}}' }, W.getTemplates( 'a{{b}}c' ) )
self:assertDeepEquals( { '{{b}}' }, parser.getTemplates( 'a{{b}}c' ) )
self:assertDeepEquals( { '{{a|b=c}}' }, W.getTemplates( '{{a|b=c}}' ) )
self:assertDeepEquals( { '{{a|b=c}}' }, parser.getTemplates( '{{a|b=c}}' ) )
self:assertDeepEquals( { '{{a\n|b=c\n}}' }, W.getTemplates( '{{a\n|b=c\n}}' ) )
self:assertDeepEquals( { '{{a\n|b=c\n}}' }, parser.getTemplates( '{{a\n|b=c\n}}' ) )
self:assertDeepEquals( { '{{b}}', '{{d}}' }, W.getTemplates( 'a{{b}}c{{d}}e' ) )
self:assertDeepEquals( { '{{b}}', '{{d}}' }, parser.getTemplates( 'a{{b}}c{{d}}e' ) )
self:assertDeepEquals( { '{{b}}', '{{d}}' }, W.getTemplates( 'a{{b}}c{{d}}e' ) )
self:assertDeepEquals( { '{{b}}', '{{d}}' }, parser.getTemplates( 'a{{b}}c{{d}}e' ) )
self:assertDeepEquals( { '{{a|b={{c}}}}' }, W.getTemplates( '{{a|b={{c}}}}' ) )
self:assertDeepEquals( { '{{a|b={{c}}}}' }, parser.getTemplates( '{{a|b={{c}}}}' ) )
self:assertDeepEquals( {
self:assertDeepEquals( {
'{{X2}}',
'{{X2}}',
Line 104: Line 104:
'{{reflist|group=i}}',
'{{reflist|group=i}}',
'{{Infobox\n|a=1\n|b=2\n|d=4\n|c=3\n}}'
'{{Infobox\n|a=1\n|b=2\n|d=4\n|c=3\n}}'
}, W.getTemplates( testpage ) )
}, parser.getTemplates( testpage ) )
end
end


function Suite:testTemplate()
function Suite:testTemplate()
self:assertEquals( '{{a}}', W.getTemplate( '{{a}}', 'a' ) )
self:assertEquals( '{{a}}', parser.getTemplate( '{{a}}', 'a' ) )
self:assertEquals( '{{a|b=c}}', W.getTemplate( '{{a|b=c}}', 'a' ) )
self:assertEquals( '{{a|b=c}}', parser.getTemplate( '{{a|b=c}}', 'a' ) )
self:assertEquals( '{{a|b=c}}', W.getTemplate( '{{a|b=c}}', 'A' ) )
self:assertEquals( '{{a|b=c}}', parser.getTemplate( '{{a|b=c}}', 'A' ) )
self:assertEquals( '{{Infobox\n|a=1\n|b=2\n|d=4\n|c=3\n}}', W.getTemplate( testpage, 'Infobox' ) )
self:assertEquals( '{{Infobox\n|a=1\n|b=2\n|d=4\n|c=3\n}}', parser.getTemplate( testpage, 'Infobox' ) )
end
end


function Suite:testParameters()
function Suite:testParameters()
self:assertDeepEquals( { [1]='b' }, W.getParameters( '{{a|b}}' ) )
self:assertDeepEquals( { [1]='b' }, parser.getParameters( '{{a|b}}' ) )
--self:assertDeepEquals( { [1]='b' }, W.getParameters( '{{a|1=b}}' ) )
--self:assertDeepEquals( { [1]='b' }, parser.getParameters( '{{a|1=b}}' ) )
self:assertDeepEquals( { [1]='b',['c']='1' }, W.getParameters( '{{a|b|c=1}}' ) )
self:assertDeepEquals( { [1]='b',['c']='1' }, parser.getParameters( '{{a|b|c=1}}' ) )
self:assertDeepEquals( { [1]='b',['c']='d' }, W.getParameters( '{{a|b|c=d}}' ) )
self:assertDeepEquals( { [1]='b',['c']='d' }, parser.getParameters( '{{a|b|c=d}}' ) )
self:assertDeepEquals( { ['b']='c' }, W.getParameters( '{{a|b=c}}' ) )
self:assertDeepEquals( { ['b']='c' }, parser.getParameters( '{{a|b=c}}' ) )
self:assertDeepEquals( { ['b']='c', ['d']='e' }, W.getParameters( '{{a|b=c|d=e}}' ) )
self:assertDeepEquals( { ['b']='c', ['d']='e' }, parser.getParameters( '{{a|b=c|d=e}}' ) )
end
end


function Suite:testTags()
function Suite:testTags()
self:assertDeepEquals( {}, W.getTags( 'a' ) )
self:assertDeepEquals( {}, parser.getTags( 'a' ) )
self:assertDeepEquals( { '<div>a' }, W.getTags( '<div>a' ) )
self:assertDeepEquals( { '<div>a' }, parser.getTags( '<div>a' ) )
self:assertDeepEquals( { '<div></div>' }, W.getTags( '<div></div>' ) )
self:assertDeepEquals( { '<div></div>' }, parser.getTags( '<div></div>' ) )
self:assertDeepEquals( { '<div></div>' }, W.getTags( 'a<div></div>b' ) )
self:assertDeepEquals( { '<div></div>' }, parser.getTags( 'a<div></div>b' ) )
self:assertDeepEquals( { '<div>a</div>' }, W.getTags( '<div>a</div>' ) )
self:assertDeepEquals( { '<div>a</div>' }, parser.getTags( '<div>a</div>' ) )
self:assertDeepEquals( { '<div>b</div>' }, W.getTags( 'a<div>b</div>c' ) )
self:assertDeepEquals( { '<div>b</div>' }, parser.getTags( 'a<div>b</div>c' ) )
self:assertDeepEquals( { '< div >a</ div >' }, W.getTags( '< div >a</ div >' ) )
self:assertDeepEquals( { '< div >a</ div >' }, parser.getTags( '< div >a</ div >' ) )
self:assertDeepEquals( { '<div class="a">b</div>' }, W.getTags( '<div class="a">b</div>' ) )
self:assertDeepEquals( { '<div class="a">b</div>' }, parser.getTags( '<div class="a">b</div>' ) )
self:assertDeepEquals( { '<div><div></div></div>', '<div></div>' }, W.getTags( '<div><div></div></div>' ) )
self:assertDeepEquals( { '<div><div></div></div>', '<div></div>' }, parser.getTags( '<div><div></div></div>' ) )
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>b<div>c</div>d</div>', '<div>c</div>' }, parser.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( { '<div><div><span>a</span></div></div>', '<div><span>a</span></div>', '<span>a</span>' }, parser.getTags( '<div><div><span>a</span></div></div>' ) )
self:assertDeepEquals( {
self:assertDeepEquals( {
'<gallery>\nFile:A.png|g<ref>g</ref>\nFile:B.png\n</gallery>',
'<gallery>\nFile:A.png|g<ref>g</ref>\nFile:B.png\n</gallery>',
Line 158: Line 158:
'<ref name="l">m</ref>',
'<ref name="l">m</ref>',
'<noinclude>b</noinclude>',
'<noinclude>b</noinclude>',
}, W.getTags( testpage ) )
}, parser.getTags( testpage ) )
end
end


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


function Suite:testReferences()
function Suite:testReferences()
self:assertDeepEquals( {}, W.getReferences( 'a' ) )
self:assertDeepEquals( {}, parser.getReferences( 'a' ) )
self:assertDeepEquals( { '<ref>a</ref>' }, W.getReferences( '<ref>a</ref>' ) )
self:assertDeepEquals( { '<ref>a</ref>' }, parser.getReferences( '<ref>a</ref>' ) )
self:assertDeepEquals( { '<ref>b</ref>' }, W.getReferences( 'a<ref>b</ref>c' ) )
self:assertDeepEquals( { '<ref>b</ref>' }, parser.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>b</ref>', '<ref>d</ref>' }, parser.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 name="b">c</ref>', '<ref name="b" />' }, parser.getReferences( 'a<ref name="b">c</ref>d<ref name="b" />' ) )
self:assertDeepEquals( {
self:assertDeepEquals( {
'<ref>g</ref>',
'<ref>g</ref>',
Line 186: Line 186:
'<ref name="l" />',
'<ref name="l" />',
'<ref name="l">m</ref>',
'<ref name="l">m</ref>',
}, W.getReferences( testpage ) )
}, parser.getReferences( testpage ) )
end
end


function Suite:testTables()
function Suite:testTables()
self:assertDeepEquals( {}, W.getTables( 'a' ) )
self:assertDeepEquals( {}, parser.getTables( 'a' ) )
self:assertDeepEquals( { '{|\n!b\n|}' }, W.getTables( 'a\n{|\n!b\n|}\nc' ) )
self:assertDeepEquals( { '{|\n!b\n|}' }, parser.getTables( 'a\n{|\n!b\n|}\nc' ) )
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' ) )
self:assertDeepEquals( { '{|\n!b\n|}', '{|\n|d\n|}', '{|id="e"\n|e\n|}' }, parser.getTables( 'a\n{|\n!b\n|}\nc\n{|\n|d\n|}\n{|id="e"\n|e\n|}f' ) )
self:assertDeepEquals( {
self:assertDeepEquals( {
'{|\n!b\n|}',
'{|\n!b\n|}',
Line 203: Line 203:
'{|\n|e\n|}',
'{|\n|e\n|}',
'{|\n|k\n|}',
'{|\n|k\n|}',
}, W.getTables( testpage ) )
}, parser.getTables( testpage ) )
end
end


function Suite:testLinks()
function Suite:testLinks()
self:assertDeepEquals( {}, W.getLinks( 'a' ) )
self:assertDeepEquals( {}, parser.getLinks( 'a' ) )
self:assertDeepEquals( { '[[a]]' }, W.getLinks( '[[a]]' ) )
self:assertDeepEquals( { '[[a]]' }, parser.getLinks( '[[a]]' ) )
self:assertDeepEquals( { '[[a|b]]' }, W.getLinks( '[[a|b]]' ) )
self:assertDeepEquals( { '[[a|b]]' }, parser.getLinks( '[[a|b]]' ) )
self:assertDeepEquals( { '[[b]]' }, W.getLinks( 'a[[b]]c' ) )
self:assertDeepEquals( { '[[b]]' }, parser.getLinks( 'a[[b]]c' ) )
self:assertDeepEquals( { '[[b]]', '[[d]]' }, W.getLinks( 'a[[b]]c[[d]]e' ) )
self:assertDeepEquals( { '[[b]]', '[[d]]' }, parser.getLinks( 'a[[b]]c[[d]]e' ) )
self:assertDeepEquals( {
self:assertDeepEquals( {
'[[Module:WikitextParser/testcases]]',
'[[Module:WikitextParser/testcases]]',
Line 231: Line 231:
'[[Category:X2]]',
'[[Category:X2]]',
'[[Category:X3]]',
'[[Category:X3]]',
}, W.getLinks( testpage ) )
}, parser.getLinks( testpage ) )
end
end


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


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

function Suite:testFileName()
self:assertEquals( 'Example.jpg', parser.getFileName( '[[File:Example.jpg]]' ) )
end
end


function Suite:testExternalLinks()
function Suite:testExternalLinks()
self:assertDeepEquals( {}, W.getExternalLinks( '' ) )
self:assertDeepEquals( {}, parser.getExternalLinks( '' ) )
self:assertDeepEquals( {}, W.getExternalLinks( 'a' ) )
self:assertDeepEquals( {}, parser.getExternalLinks( 'a' ) )
self:assertDeepEquals( {}, W.getExternalLinks( '[[a]]' ) )
self:assertDeepEquals( {}, parser.getExternalLinks( '[[a]]' ) )
self:assertDeepEquals( { '[//www.example.com]' }, W.getExternalLinks( '[//www.example.com]' ) )
self:assertDeepEquals( { '[//www.example.com]' }, parser.getExternalLinks( '[//www.example.com]' ) )
self:assertDeepEquals( { '[http://www.example.com]' }, W.getExternalLinks( '[http://www.example.com]' ) )
self:assertDeepEquals( { '[http://www.example.com]' }, parser.getExternalLinks( '[http://www.example.com]' ) )
self:assertDeepEquals( { '[https://www.example.com]' }, W.getExternalLinks( '[https://www.example.com]' ) )
self:assertDeepEquals( { '[https://www.example.com]' }, parser.getExternalLinks( '[https://www.example.com]' ) )
self:assertDeepEquals( { '[//www.example.com example]' }, W.getExternalLinks( '[//www.example.com example]' ) )
self:assertDeepEquals( { '[//www.example.com example]' }, parser.getExternalLinks( '[//www.example.com example]' ) )
self:assertDeepEquals( { '[http://www.example.com example]' }, W.getExternalLinks( '[http://www.example.com example]' ) )
self:assertDeepEquals( { '[http://www.example.com example]' }, parser.getExternalLinks( '[http://www.example.com example]' ) )
self:assertDeepEquals( { '[https://www.example.com example]' }, W.getExternalLinks( '[https://www.example.com example]' ) )
self:assertDeepEquals( { '[https://www.example.com example]' }, parser.getExternalLinks( '[https://www.example.com example]' ) )
end
end



Revision as of 20:01, 22 March 2025

local parser = require( 'Module:WikitextParser' )
local testpage = mw.title.new( 'Module:WikitextParser/testpage' ):getContent()
local ScribuntoUnit = require( 'Module:ScribuntoUnit' )
local Suite = ScribuntoUnit:new()

function Suite:testLead()
	self:assertEquals( '', parser.getLead( '' ) )
	self:assertEquals( '', parser.getLead( '==b==' ) )
	self:assertEquals( 'a', parser.getLead( 'a' ) )
	self:assertEquals( 'a', parser.getLead( 'a', 'a\n==b==' ) )
	self:assertEquals( 'This test page interacts with [[Module:WikitextParser/testcases]].', parser.getLead( testpage ) )
end

function Suite:testSection()
	self:assertEquals( nil, parser.getSection( 'a', 'a' ) )
	self:assertEquals( '', parser.getSection( '==a==', 'a' ) )
	self:assertEquals( 'b', parser.getSection( '==a==\nb', 'a' ) )
	self:assertEquals( 'b', parser.getSection( '==a==\nb\n==c==\nd', 'a' ) )
	self:assertEquals( 'b', parser.getSection( '==a==\nb\n==a==\nd', 'a' ) )
	self:assertEquals( 'b\n===c===\nd', parser.getSection( '==a==\nb\n===c===\nd', 'a' ) )
	self:assertEquals( 'd', parser.getSection( '==a==\nb\n===c===\nd', 'c' ) )
	self:assertEquals( 'a\n===Subsection===\nb', parser.getSection( testpage, 'Section' ) )
	self:assertEquals( 'b', parser.getSection( testpage, 'Subsection' ) )
end

function Suite:testSectionTag()
	self:assertEquals( nil, parser.getSectionTag( 'a', 'a' ) )
	self:assertEquals( nil, parser.getSectionTag( 'a<section begin="b" /><section end="b" />c', 'a' ) )
	self:assertEquals( '', parser.getSectionTag( 'a<section begin="b" /><section end="b" />c', 'b' ) )
	self:assertEquals( 'c', parser.getSectionTag( 'a<section begin="b" />c<section end="b" />d', 'b' ) )
	self:assertEquals( '', parser.getSectionTag( testpage, 'a' ) )
	self:assertEquals( 'b', parser.getSectionTag( testpage, 'b' ) )
	self:assertEquals( '{|\n!c\n|}', parser.getSectionTag( testpage, 'c' ) )
	self:assertEquals( nil, parser.getSectionTag( testpage, 'd' ) )
end

function Suite:testSections()
	self:assertDeepEquals( {}, parser.getSections( '' ) )
	self:assertDeepEquals( {}, parser.getSections( 'a' ) )
	self:assertDeepEquals( { ['a']='' }, parser.getSections( '==a==' ) )
	self:assertDeepEquals( { ['b']='' }, parser.getSections( 'a\n==b==' ) )
	self:assertDeepEquals( { ['a']='', ['b']='' }, parser.getSections( '==a==\n==b==' ) )
	self:assertDeepEquals( { ['a']='b' }, parser.getSections( '==a==\nb' ) )
	self:assertDeepEquals( { ['b']='c' }, parser.getSections( 'a\n==b==\nc' ) )
	self:assertDeepEquals( { ['b']='c', ['d']='e' }, parser.getSections( 'a\n==b==\nc\n===d===\ne' ) )
end

function Suite:testLists()
	self:assertDeepEquals( {}, parser.getLists( '' ) )
	self:assertDeepEquals( {}, parser.getLists( 'a' ) )
	self:assertDeepEquals( { '*a' }, parser.getLists( '*a' ) )
	self:assertDeepEquals( { '*a\n*b' }, parser.getLists( '*a\n*b' ) )
	self:assertDeepEquals( { '*b\n*c' }, parser.getLists( 'a\n*b\n*c\nd' ) )
	self:assertDeepEquals( { '*b\n*c', '#e\n#f' }, parser.getLists( 'a\n*b\n*c\nd\n#e\n#f\ng' ) )
	self:assertDeepEquals( {
		'*b\n*c',
		'#e\n#f',
		'*c\n*d',
		'#h\n#i',
		'*c\n*d',
		'#h\n#i',
	}, parser.getLists( testpage ) )
end

function Suite:testParagraphs()
	self:assertDeepEquals( {}, parser.getParagraphs( '' ) )
	self:assertDeepEquals( {}, parser.getParagraphs( '{{a}}' ) )
	self:assertDeepEquals( {}, parser.getParagraphs( '{{a\n|b=c}}' ) )
	self:assertDeepEquals( {}, parser.getParagraphs( '{{a}}\n{{b}}\n{{c}}' ) )
	self:assertDeepEquals( {}, parser.getParagraphs( '{{a}}\n\n{{b}}\n\n{{c}}' ) )
	self:assertDeepEquals( { 'a' }, parser.getParagraphs( 'a' ) )
	self:assertDeepEquals( { 'a{{b}}' }, parser.getParagraphs( 'a{{b}}' ) )
	self:assertDeepEquals( { '{{a}}b' }, parser.getParagraphs( '{{a}}b' ) )
	self:assertDeepEquals( { 'a' }, parser.getParagraphs( 'a\n\n{{b}}' ) )
	self:assertDeepEquals( { 'b' }, parser.getParagraphs( '{{a}}\n\nb' ) )
	self:assertDeepEquals( { '{{a}}b{{c}}' }, parser.getParagraphs( '{{a}}b{{c}}' ) )
	self:assertDeepEquals( { 'a', 'b', 'c' }, parser.getParagraphs( 'a\n\nb\n\nc' ) )
	self:assertDeepEquals( { 'a', 'c' }, parser.getParagraphs( 'a\n\n{{b}}\n\nc' ) )
	self:assertDeepEquals( {
		'X1',
		'{{X2}} X3 {{X4}}',
	}, parser.getParagraphs( parser.getSection( testpage, 'Paragraphs' ) ) )
end

function Suite:testTemplates()
	self:assertDeepEquals( {}, parser.getTemplates( 'a' ) )
	self:assertDeepEquals( { '{{a}}' }, parser.getTemplates( '{{a}}' ) )
	self:assertDeepEquals( { '{{b}}' }, parser.getTemplates( 'a{{b}}c' ) )
	self:assertDeepEquals( { '{{a|b=c}}' }, parser.getTemplates( '{{a|b=c}}' ) )
	self:assertDeepEquals( { '{{a\n|b=c\n}}' }, parser.getTemplates( '{{a\n|b=c\n}}' ) )
	self:assertDeepEquals( { '{{b}}', '{{d}}' }, parser.getTemplates( 'a{{b}}c{{d}}e' ) )
	self:assertDeepEquals( { '{{b}}', '{{d}}' }, parser.getTemplates( 'a{{b}}c{{d}}e' ) )
	self:assertDeepEquals( { '{{a|b={{c}}}}' }, parser.getTemplates( '{{a|b={{c}}}}' ) )
	self:assertDeepEquals( {
		'{{X2}}',
		'{{X3}}',
		'{{X4}}',
		'{{X11\n|b=c\n}}',
		'{{X12\n|b=d\n}}',
		'{{X2}}',
		'{{X4}}',
		'{{X5}}',
		'{{reflist}}',
		'{{reflist|group=i}}',
		'{{Infobox\n|a=1\n|b=2\n|d=4\n|c=3\n}}'
	}, parser.getTemplates( testpage ) )
end

function Suite:testTemplate()
	self:assertEquals( '{{a}}', parser.getTemplate( '{{a}}', 'a' ) )
	self:assertEquals( '{{a|b=c}}', parser.getTemplate( '{{a|b=c}}', 'a' ) )
	self:assertEquals( '{{a|b=c}}', parser.getTemplate( '{{a|b=c}}', 'A' ) )
	self:assertEquals( '{{Infobox\n|a=1\n|b=2\n|d=4\n|c=3\n}}', parser.getTemplate( testpage, 'Infobox' ) )
end

function Suite:testParameters()
	self:assertDeepEquals( { [1]='b' }, parser.getParameters( '{{a|b}}' ) )
	--self:assertDeepEquals( { [1]='b' }, parser.getParameters( '{{a|1=b}}' ) )
	self:assertDeepEquals( { [1]='b',['c']='1' }, parser.getParameters( '{{a|b|c=1}}' ) )
	self:assertDeepEquals( { [1]='b',['c']='d' }, parser.getParameters( '{{a|b|c=d}}' ) )
	self:assertDeepEquals( { ['b']='c' }, parser.getParameters( '{{a|b=c}}' ) )
	self:assertDeepEquals( { ['b']='c', ['d']='e' }, parser.getParameters( '{{a|b=c|d=e}}' ) )
end

function Suite:testTags()
	self:assertDeepEquals( {}, parser.getTags( 'a' ) )
	self:assertDeepEquals( { '<div>a' }, parser.getTags( '<div>a' ) )
	self:assertDeepEquals( { '<div></div>' }, parser.getTags( '<div></div>' ) )
	self:assertDeepEquals( { '<div></div>' }, parser.getTags( 'a<div></div>b' ) )
	self:assertDeepEquals( { '<div>a</div>' }, parser.getTags( '<div>a</div>' ) )
	self:assertDeepEquals( { '<div>b</div>' }, parser.getTags( 'a<div>b</div>c' ) )
	self:assertDeepEquals( { '< div >a</ div >' }, parser.getTags( '< div >a</ div >' ) )
	self:assertDeepEquals( { '<div class="a">b</div>' }, parser.getTags( '<div class="a">b</div>' ) )
	self:assertDeepEquals( { '<div><div></div></div>', '<div></div>' }, parser.getTags( '<div><div></div></div>' ) )
	self:assertDeepEquals( { '<div>b<div>c</div>d</div>', '<div>c</div>' }, parser.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>' }, parser.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>', 
	}, parser.getTags( testpage ) )
end

function Suite:testGalleries()
	self:assertDeepEquals( {}, parser.getGalleries( 'a' ) )
	self:assertDeepEquals( { '<gallery>a</gallery>' }, parser.getGalleries( '<gallery>a</gallery>' ) )
	self:assertDeepEquals( { '<gallery>b</gallery>' }, parser.getGalleries( 'a<gallery>b</gallery>c' ) )
	self:assertDeepEquals( { '<gallery>\nFile:A.png\nFile:B.png\n</gallery>' }, parser.getGalleries( '<gallery>\nFile:A.png\nFile:B.png\n</gallery>' ) )
	self:assertDeepEquals( { '<gallery>\nFile:A.png\nFile:B.png\n</gallery>' }, parser.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>', 
	}, parser.getGalleries( testpage ) )
end

function Suite:testReferences()
	self:assertDeepEquals( {}, parser.getReferences( 'a' ) )
	self:assertDeepEquals( { '<ref>a</ref>' }, parser.getReferences( '<ref>a</ref>' ) )
	self:assertDeepEquals( { '<ref>b</ref>' }, parser.getReferences( 'a<ref>b</ref>c' ) )
	self:assertDeepEquals( { '<ref>b</ref>', '<ref>d</ref>' }, parser.getReferences( 'a<ref>b</ref>c<ref>d</ref>' ) )
	self:assertDeepEquals( { '<ref name="b">c</ref>', '<ref name="b" />' }, parser.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>', 
	}, parser.getReferences( testpage ) )
end

function Suite:testTables()
	self:assertDeepEquals( {}, parser.getTables( 'a' ) )
	self:assertDeepEquals( { '{|\n!b\n|}' }, parser.getTables( 'a\n{|\n!b\n|}\nc' ) )
	self:assertDeepEquals( { '{|\n!b\n|}', '{|\n|d\n|}', '{|id="e"\n|e\n|}' }, parser.getTables( 'a\n{|\n!b\n|}\nc\n{|\n|d\n|}\n{|id="e"\n|e\n|}f' ) )
	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|}', 
	}, parser.getTables( testpage ) )
end

function Suite:testLinks()
	self:assertDeepEquals( {}, parser.getLinks( 'a' ) )
	self:assertDeepEquals( { '[[a]]' }, parser.getLinks( '[[a]]' ) )
	self:assertDeepEquals( { '[[a|b]]' }, parser.getLinks( '[[a|b]]' ) )
	self:assertDeepEquals( { '[[b]]' }, parser.getLinks( 'a[[b]]c' ) )
	self:assertDeepEquals( { '[[b]]', '[[d]]' }, parser.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]]', 
	}, parser.getLinks( testpage ) )
end

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

function Suite:testFiles()
	self:assertDeepEquals( {}, parser.getFiles( 'a' ) )
	self:assertDeepEquals( {}, parser.getFiles( '[[a]]' ) )
	self:assertDeepEquals( { '[[File:a]]' }, parser.getFiles( '[[File:a]]' ) )
	self:assertDeepEquals( { '[[ file : a ]]' }, parser.getFiles( '[[ file : a ]]' ) )
	self:assertDeepEquals( { '[[File:b]]' }, parser.getFiles( 'a[[File:b]]c' ) )
	self:assertDeepEquals( { '[[File:b]]', '[[File:c]]' }, parser.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]]', 
	}, parser.getFiles( testpage ) )
end

function Suite:testFileName()
	self:assertEquals( 'Example.jpg', parser.getFileName( '[[File:Example.jpg]]' ) )
end

function Suite:testExternalLinks()
	self:assertDeepEquals( {}, parser.getExternalLinks( '' ) )
	self:assertDeepEquals( {}, parser.getExternalLinks( 'a' ) )
	self:assertDeepEquals( {}, parser.getExternalLinks( '[[a]]' ) )
	self:assertDeepEquals( { '[//www.example.com]' }, parser.getExternalLinks( '[//www.example.com]' ) )
	self:assertDeepEquals( { '[http://www.example.com]' }, parser.getExternalLinks( '[http://www.example.com]' ) )
	self:assertDeepEquals( { '[https://www.example.com]' }, parser.getExternalLinks( '[https://www.example.com]' ) )
	self:assertDeepEquals( { '[//www.example.com example]' }, parser.getExternalLinks( '[//www.example.com example]' ) )
	self:assertDeepEquals( { '[http://www.example.com example]' }, parser.getExternalLinks( '[http://www.example.com example]' ) )
	self:assertDeepEquals( { '[https://www.example.com example]' }, parser.getExternalLinks( '[https://www.example.com example]' ) )
end

return Suite