Module:WikitextParser/testcases

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

c', 'a' ) )

self:assertEquals( '', parser.getSectionTag( 'a

c', 'b' ) )

self:assertEquals( 'c', parser.getSectionTag( 'a

c
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:testTemplateParameters()

self:assertDeepEquals( { [1]='b' }, parser.getTemplateParameters( '{{a|b}}' ) )

--self:assertDeepEquals( { [1]='b' }, parser.getTemplateParameters( '{{a|1=b}}' ) )

self:assertDeepEquals( { [1]='b',['c']='1' }, parser.getTemplateParameters( '{{a|b|c=1}}' ) )

self:assertDeepEquals( { [1]='b',['c']='d' }, parser.getTemplateParameters( '{{a|b|c=d}}' ) )

self:assertDeepEquals( { ['b']='c' }, parser.getTemplateParameters( '{{a|b=c}}' ) )

self:assertDeepEquals( { ['b']='c', ['d']='e' }, parser.getTemplateParameters( '{{a|b=c|d=e}}' ) )

end

function Suite:testTags()

self:assertDeepEquals( {}, parser.getTags( 'a' ) )

self:assertDeepEquals( {}, parser.getTags( '' ) )

self:assertDeepEquals( { '

a' }, parser.getTags( '
a' ) )

self:assertDeepEquals( { '

' }, parser.getTags( '
' ) )

self:assertDeepEquals( { '

' }, parser.getTags( 'a
b' ) )

self:assertDeepEquals( { '

a
' }, parser.getTags( '
a
' ) )

self:assertDeepEquals( { '

b
' }, parser.getTags( 'a
b
c' ) )

self:assertDeepEquals( { '< div >a' }, parser.getTags( '< div >a' ) )

self:assertDeepEquals( { '

b
' }, parser.getTags( '
b
' ) )

self:assertDeepEquals( { '

', '
' }, parser.getTags( '
' ) )

self:assertDeepEquals( { '

b
c
d
', '
c
' }, parser.getTags( 'a
b
c
d
e' ) )

self:assertDeepEquals( { '

a
', '
a
', 'a' }, parser.getTags( '
a
' ) )

self:assertDeepEquals( {

'\nFile:A.png|gg\nFile:B.png\n',

'g',

'
',

'
',

'


',

'

a
b
',

'

b
',

'bd',

'd',

'

',

'

',

'

',

'

',

'

',

'

',

'b',

'e',

'',

'j',

'',

'm',

'b',

}, parser.getTags( testpage ) )

end

function Suite:testTagName()

self:assertEquals( nil, parser.getTagName( 'abc' ) )

self:assertEquals( 'ref', parser.getTagName( '' ) )

self:assertEquals( 'ref', parser.getTagName( '< ref />' ) )

self:assertEquals( 'ref', parser.getTagName( '< ref name="a" />' ) )

self:assertEquals( 'ref', parser.getTagName( 'a' ) )

self:assertEquals( 'ref', parser.getTagName( 'b' ) )

end

function Suite:testTagAttribute()

self:assertEquals( nil, parser.getTagAttribute( '', 'name' ) )

self:assertEquals( 'a', parser.getTagAttribute( '', 'name' ) )

self:assertEquals( 'b', parser.getTagAttribute( '', 'name' ) )

self:assertEquals( 'c', parser.getTagAttribute( '< ref name = "c" />', 'name' ) )

end

function Suite:testGalleries()

self:assertDeepEquals( {}, parser.getGalleries( 'a' ) )

self:assertDeepEquals( { 'a' }, parser.getGalleries( 'a' ) )

self:assertDeepEquals( { 'b' }, parser.getGalleries( 'abc' ) )

self:assertDeepEquals( { '\nFile:A.png\nFile:B.png\n' }, parser.getGalleries( '\nFile:A.png\nFile:B.png\n' ) )

self:assertDeepEquals( { '\nFile:A.png\nFile:B.png\n' }, parser.getGalleries( 'a\nFile:A.png\nFile:B.png\nb' ) )

self:assertDeepEquals( {

'\nFile:A.png|gg\nFile:B.png\n',

}, parser.getGalleries( testpage ) )

end

function Suite:testReferences()

self:assertDeepEquals( {}, parser.getReferences( 'a' ) )

self:assertDeepEquals( { 'a' }, parser.getReferences( 'a' ) )

self:assertDeepEquals( { 'b' }, parser.getReferences( 'abc' ) )

self:assertDeepEquals( { 'b', 'd' }, parser.getReferences( 'abcd' ) )

self:assertDeepEquals( { 'c', '' }, parser.getReferences( 'acd' ) )

self:assertDeepEquals( {

'g',

'b',

'e',

'',

'j',

'',

'm',

}, 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:testTableAttribute()

self:assertEquals( nil, parser.getTableAttribute( '

\n|a\n
', 'id' ) )

self:assertEquals( 'a', parser.getTableAttribute( '

id=a\n|a\n
', 'id' ) )

self:assertEquals( 'b', parser.getTableAttribute( '

id="b" class="foo"\n|a\n
', 'id' ) )

self:assertEquals( 'c', parser.getTableAttribute( '

class="foo" id="c" \n|a\n
', 'id' ) )

end

function Suite:testLinks()

self:assertDeepEquals( {}, parser.getLinks( 'a' ) )

self:assertDeepEquals( { 'a' }, parser.getLinks( 'a' ) )

self:assertDeepEquals( { 'b' }, parser.getLinks( 'b' ) )

self:assertDeepEquals( { 'b' }, parser.getLinks( 'abc' ) )

self:assertDeepEquals( { 'b', 'd' }, parser.getLinks( 'abcde' ) )

self:assertDeepEquals( {

'Module:WikitextParser/testcases',

'link',

'File:Name.jpg',

'File:A.png',

'File:C.png',

'b',

'd',

'Module talk:Transcluder/testcases',

'module talk:Transcluder/testcases',

'a',

'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( 'aCategory:bc' ) )

self:assertDeepEquals( { 'Category:b', 'Category:c' }, parser.getCategories( 'aCategory:bCategory:cd' ) )

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( 'aFile:bc' ) )

self:assertDeepEquals( { 'File:b', 'File:c' }, parser.getFiles( 'aFile:bFile:cd' ) )

self:assertDeepEquals( {

'File:Name.jpg',

'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' ) )

self:assertEquals( 'Example.jpg', parser.getFileName( 'thumb' ) )

self:assertEquals( 'Example.jpg', parser.getFileName( ' thumb ' ) )

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