Module:Transcluder/testcases

local frame = mw.getCurrentFrame local title = frame and frame.args and frame.args.module or 'Transcluder/sandbox' local T = require( 'Module:' .. title ) local ScribuntoUnit = require('Module:ScribuntoUnit') local Suite = ScribuntoUnit:new

function Suite:testCategories self:assertThrows( function T.getCategories end ) self:assertThrows( function T.getCategories({}) end ) self:assertThrows( function T.getCategories(false) end )

self:assertDeepEquals( {}, T.getCategories('') ) self:assertDeepEquals( {}, T.getCategories('a') ) self:assertDeepEquals( {}, T.getCategories() ) self:assertDeepEquals( {}, T.getCategories() ) self:assertDeepEquals( {}, T.getCategories() ) self:assertDeepEquals( {}, T.getCategories() ) self:assertDeepEquals( {,}, T.getCategories('') ) self:assertDeepEquals( {,}, T.getCategories('\n\n\nc') ) self:assertDeepEquals( {}, T.getCategories('', 0) ) self:assertDeepEquals( {}, T.getCategories(, 2 ) ) self:assertDeepEquals( {,}, T.getCategories('', '2-3') ) self:assertDeepEquals( {}, T.getCategories(, 'X2') ) self:assertDeepEquals( {,}, T.getCategories('', '-X2') )

self:assertEquals( '', T.get('Module:Transcluder/testpage#Categories', { categories = 1 } ) ) self:assertEquals( '', T.get('Module:Transcluder/testpage#Categories', { categories = 2 } ) ) self:assertEquals( '\n\n', T.get('Module:Transcluder/testpage#Categories', { categories = '-X2' } ) ) end

function Suite:testErrors self:assertThrows( function T.get end, 'No page given' ) self:assertThrows( function T.get('') end, 'No page given' ) self:assertThrows( function T.get(' ') end, 'No page given' ) self:assertThrows( function T.get('2 > 1') end, 'Title «2 > 1» is not valid' ) self:assertThrows( function T.get('Non-existent page') end, "Page 'Non-existent page' not found" ) self:assertThrows( function T.get('Module:Transcluder/testpage#Non-existent section') end, "Section 'Non-existent section' not found" ) end

function Suite:testFiles self:assertThrows( function T.getFiles end ) self:assertThrows( function T.getFiles({}) end ) self:assertThrows( function T.getFiles(false) end )

self:assertDeepEquals( {}, T.getFiles('') ) self:assertDeepEquals( {}, T.getFiles('a') ) self:assertDeepEquals( {}, T.getFiles() ) self:assertDeepEquals( {}, T.getFiles() ) self:assertDeepEquals( {,}, T.getFiles('') ) self:assertDeepEquals( {,}, T.getFiles('\n\n\nc') ) self:assertDeepEquals( {}, T.getFiles('', 0 ) ) self:assertDeepEquals( {}, T.getFiles(, 2 ) ) self:assertDeepEquals( {,}, T.getFiles('', '-2' ) ) self:assertDeepEquals( {,}, T.getFiles('', '2-3') ) self:assertDeepEquals( {}, T.getFiles(, 'A.png') ) self:assertDeepEquals( {,}, T.getFiles('', '-A.png') ) self:assertDeepEquals( {,}, T.getFiles('', 'A.png, C.png') ) self:assertDeepEquals( {}, T.getFiles(, '-A.png, C.png') )

self:assertDeepEquals( {,}, T.getFiles('', -1 ) ) self:assertDeepEquals( {}, T.getFiles(, '-2-3' ) ) self:assertDeepEquals( {}, T.getFiles(, { [1] = true } ) ) self:assertDeepEquals( {,}, T.getFiles('', { [1] = false } ) )

self:assertEquals( 'ab', T.get('Module:Transcluder/testpage#Files', { files = 1 } ) ) self:assertEquals( 'ab', T.get('Module:Transcluder/testpage#Files', { files = 2 } ) ) end

function Suite:testGet self:assertEquals( '\nb\n*c\n*d\n{|\n|e\n|}\n\ng\n#h\n#i\nj\n{|\n|k\n|}\nl', T.get('Module:Transcluder/testpage#Get') ) self:assertEquals( 'b\n\n\ng\n#h\n#i\nj\n{|\n|k\n|}\nl', T.get('Module:Transcluder/testpage#Get', { files = 2, tables = 2, lists = 2 } ) ) self:assertEquals( 'test', T.get('Module:Transcluder/testpage2') ) end

function Suite:testInclude self:assertEquals( 'ac', T.get('Module:Transcluder/testpage#Include') ) end

function Suite:testLead self:assertEquals( "This test page interacts with Module:Transcluder/testcases.", T.get('Module:Transcluder/testpage#') ) self:assertEquals( 'This test page interacts with Module:Transcluder/testcases.', T.get('Module:Transcluder/testpage#', { noBold = true } ) ) end

function Suite:testLinks self:assertEquals( 'a b c d e', T.get('Module:Transcluder/testpage#Links', { noLinks = true } ) ) end

function Suite:testLists self:assertDeepEquals( {}, T.getLists('') ) self:assertDeepEquals( {}, T.getLists('a') ) self:assertDeepEquals( {'*a\n*b'}, T.getLists('*a\n*b') ) self:assertDeepEquals( {'*b\n*c'}, T.getLists('a\n*b\n*c\nd') ) self:assertDeepEquals( {'*b\n*c','#e\n#f'}, T.getLists('a\n*b\n*c\nd\n#e\n#f\ng') ) self:assertDeepEquals( {'#e\n#f'}, T.getLists('a\n*b\n*c\nd\n#e\n#f\ng', 2 ) ) self:assertDeepEquals( {'#e\n#f','*h\n*i'}, T.getLists('a\n*b\n*c\nd\n#e\n#f\ng\n*h\n*i', '2-3' ) )

self:assertEquals( '*b\n*c\n\n#e\n#f', T.get('Module:Transcluder/testpage#Lists', { only = 'lists' } ) ) self:assertEquals( '#e\n#f', T.get('Module:Transcluder/testpage#Lists', { only = 'lists', lists = 2 } ) ) end

function Suite:testOnly self:assertEquals( '{|\n|e\n|}\n\n{|\n|k\n|}', T.get('Module:Transcluder/testpage#Only', { only = 'tables' } ) ) self:assertEquals( '*c\n*d\n\n#h\n#i', T.get('Module:Transcluder/testpage#Only', { only = 'lists' } ) ) self:assertEquals( '*c\n*d', T.get('Module:Transcluder/testpage#Only', { only = 'lists', lists = 1 } ) ) end

function Suite:testParagraphs self:assertDeepEquals( {'a'}, T.getParagraphs('a') ) self:assertDeepEquals( {'a'}, T.getParagraphs('a') ) self:assertDeepEquals( {'b'}, T.getParagraphs('b') ) self:assertDeepEquals( {}, T.getParagraphs('') ) self:assertDeepEquals( {}, T.getParagraphs('') ) self:assertDeepEquals( {}, T.getParagraphs('\n\n\n\n') ) self:assertDeepEquals( {'a'}, T.getParagraphs('a\n\n') ) self:assertDeepEquals( {'b'}, T.getParagraphs('\n\nb') ) self:assertDeepEquals( {'b'}, T.getParagraphs('b') ) self:assertDeepEquals( {'a','b','c'}, T.getParagraphs('a\n\nb\n\nc') ) self:assertDeepEquals( {'a','c'}, T.getParagraphs('a\n\n\n\nc') ) self:assertDeepEquals( {'a','c','d','e'}, T.getParagraphs('a\n\nb\n\nc\n\nd\n\ne', '1,3-5' ) ) self:assertDeepEquals( {'e'}, T.getParagraphs('\n\n\n\ne', 1 ) )

self:assertEquals( '\nX1\n{|\n|X2\n|}\n\n', T.get('Module:Transcluder/testpage#Paragraphs', { paragraphs = 1 } ) ) self:assertEquals( 'X1\n\n X3 ', T.get('Module:Transcluder/testpage#Paragraphs', { only = 'paragraphs' } ) ) self:assertEquals( 'X1', T.get('Module:Transcluder/testpage#Paragraphs', { only = 'paragraphs', paragraphs = 1 } ) ) self:assertEquals( ' X3 ', T.get('Module:Transcluder/testpage#Paragraphs', { only = 'paragraphs', paragraphs = 2 } ) ) end

function Suite:testParameters self:assertDeepEquals( {}, T.getParameters('', 0 ) ) self:assertDeepEquals( {}, T.getParameters('', 1 ) ) self:assertDeepEquals( {}, T.getParameters('', 2 ) ) self:assertDeepEquals( {}, T.getParameters('', 1 ) ) self:assertDeepEquals( {}, T.getParameters('', 'd' ) ) self:assertDeepEquals( {['b']='c'}, T.getParameters('', 'b' ) ) self:assertDeepEquals( {['b']='2%'}, T.getParameters('', 'b' ) ) self:assertDeepEquals( {['d']='e'}, T.getParameters('', 'd' ) ) self:assertDeepEquals( {['f']='g'}, T.getParameters('', ' f ' ) ) self:assertDeepEquals( {['b']='c',['d']='e'}, T.getParameters('', 'b,d' ) ) self:assertDeepEquals( {['b']=}, T.getParameters(, 'b' ) ) self:assertDeepEquals( {['b']=}, T.getParameters(, 'b' ) ) self:assertDeepEquals( {['b']=' d '}, T.getParameters('', 'b' ) ) self:assertDeepEquals( {['b']=}, T.getParameters(, 'b' ) ) self:assertDeepEquals( {['b']='c|d'}, T.getParameters('', 'b' ) ) self:assertDeepEquals( {[1]='f'}, T.getParameters('', 1 ) ) self:assertDeepEquals( {[1]='d',[2]='e',[3]='h'}, T.getParameters('', '1-3' ) )

self:assertEquals( 'd', T.get('Module:Transcluder/testpage#Parameters', { only = 'parameters', parameters = 'b' } ) ) self:assertEquals( 'd', T.get('Module:Transcluder/testpage#Parameters', { only = 'parameters', parameters = 'b', templates = 'aa' } ) ) self:assertEquals( 'd', T.get('Module:Transcluder/testpage#Parameters', { only = 'parameters', parameters = 'b', templates = 'bb' } ) ) end

function Suite:testReferences self:assertDeepEquals( {}, T.getReferences('a') ) self:assertDeepEquals( {' '}, T.getReferences('a ') ) self:assertDeepEquals( {}, T.getReferences('a ', 0) ) self:assertDeepEquals( {}, T.getReferences('a ') ) self:assertDeepEquals( {' '}, T.getReferences('a c ', 2) ) self:assertDeepEquals( {' ',' '}, T.getReferences('a d ') ) self:assertDeepEquals( {' '}, T.getReferences('a d ', 'b') )

self:assertEquals( 'acfgk', T.get('Module:Transcluder/testpage#References', { references = 0 } ) ) self:assertEquals( ' \n\n \n\n ', T.get('Module:Transcluder/testpage#References', { only = 'references' } ) ) self:assertEquals( ' \n\n \n\n ', T.get('Module:Transcluder/testpage#References', { only = 'references', fixReferences = true } ) ) end

function Suite:testSection self:assertThrows( function T.getSection('a', 'a') end, "Section 'a' not found" ) self:assertThrows( function T.getSection('==z==', 'z') end, "Section 'z' is empty" )

self:assertEquals( 'b', T.getSection('==a==\nb', 'a') ) self:assertEquals( 'b', T.getSection('==a==\nb\n==c==\nd', 'a') ) self:assertEquals( 'b\n===c===\nd', T.getSection('==a==\nb\n===c===\nd', 'a') ) self:assertEquals( 'd', T.getSection('==a==\nb\n===c===\nd', 'c') )

self:assertEquals( 'a\n===Subsection===\nb', T.get('Module:Transcluder/testpage#Section') ) self:assertEquals( 'b', T.get('Module:Transcluder/testpage#Subsection') ) self:assertEquals( 'a', T.get('Module:Transcluder/testpage#Section', { sections = 0 } ) ) end

function Suite:testSections self:assertEquals( "This test page interacts with Module:Transcluder/testcases.", T.get('Module:Transcluder/testpage', { sections = 0 } ) ) self:assertEquals( 'a\n===Subsection===\nb', T.get('Module:Transcluder/testpage#Section') ) self:assertEquals( 'a', T.get('Module:Transcluder/testpage#Section', { sections = 0 } ) ) self:assertEquals( 'a', T.get('Module:Transcluder/testpage#Section', { sections = 2 } ) ) self:assertEquals( 'a', T.get('Module:Transcluder/testpage#Section', { sections = 'Fake' } ) ) self:assertEquals( 'a\n===Subsection===\nb', T.get('Module:Transcluder/testpage#Section', { sections = 1 } ) ) self:assertEquals( 'a\n===Subsection===\nb', T.get('Module:Transcluder/testpage#Section', { sections = 'Subsection' } ) ) self:assertEquals( 'd', T.get('Module:Transcluder/testpage#Subsection with link' ) ) self:assertEquals( 'e\n===Subsection===\nf', T.get('Module:Transcluder/testpage#Section with (parenthesis)' ) )

-- tags self:assertThrows( function T.get('Module:Transcluder/testpage#a') end, "Section tag 'a' is empty" ) self:assertEquals( 'b', T.get('Module:Transcluder/testpage#b' ) ) self:assertEquals( '{|\n!c\n|}', T.get('Module:Transcluder/testpage#c' ) ) end

function Suite:testSelfLink self:assertEquals( "This test page interacts with Module:Transcluder/testcases.", T.get('Module:Transcluder/testpage', { noSelfLinks = true, sections = 0 } ) ) self:assertEquals( 'Module talk:Transcluder/testcases module talk:Transcluder/testcases a a', T.get('Module:Transcluder/testpage#Self links', { noSelfLinks = true, sections = 0 } ) ) end

function Suite:testTables self:assertEquals( '{|\n!b\n|}\n\n{|\n|d\n|}\n\n{|id="e"\n|e\n|}', T.get('Module:Transcluder/testpage#Tables', { only = 'tables' } ) ) self:assertEquals( '{|\n!b\n|}', T.get('Module:Transcluder/testpage#Tables', { only = 'tables', tables = 1 } ) ) self:assertEquals( '{|\n|d\n|}', T.get('Module:Transcluder/testpage#Tables', { only = 'tables', tables = 2 } ) ) self:assertEquals( '{|\n!b\n|}\n\n{|id="e"\n|e\n|}', T.get('Module:Transcluder/testpage#Tables', { only = 'tables', tables = '1,3' } ) ) self:assertEquals( '{|\n|d\n|}\n\n{|id="e"\n|e\n|}', T.get('Module:Transcluder/testpage#Tables', { only = 'tables', tables = '2-3' } ) ) self:assertEquals( '{|id="e"\n|e\n|}', T.get('Module:Transcluder/testpage#Tables', { only = 'tables', tables = 'e' } ) ) end

function Suite:testTags self:assertDeepEquals( {}, T.getTags( 'a' ) ) -- no tags self:assertDeepEquals( {' a'}, T.getTags( ' a' ) ) -- unclosed tag self:assertDeepEquals( {' '}, T.getTags( '  ' ) ) -- empty tag self:assertDeepEquals( {' '}, T.getTags( 'a  b' ) ) self:assertDeepEquals( {' a '}, T.getTags( ' a ' ) ) -- simple case self:assertDeepEquals( {' b '}, T.getTags( 'a b c' ) ) self:assertDeepEquals( {' a'}, T.getTags( ' a' ) ) -- weird spacing self:assertDeepEquals( {' b '}, T.getTags( ' b ' ) ) -- attributes

-- Nested tags self:assertDeepEquals( {'   ','  '}, T.getTags( '    ' ) ) self:assertDeepEquals( {' b c d ',' c '}, T.getTags( 'a b c d e' ) ) self:assertDeepEquals( {'  a   ','  a  ',' a '}, T.getTags( '   a   ' ) ) self:assertDeepEquals( {' a '}, T.getTags( '  a   ', 'span' ) ) self:assertDeepEquals( {'  a   ','  a  '}, T.getTags( '   a   ', '-span' ) )

self:assertEquals( '\n\n \n\n ', T.get('Module:Transcluder/testpage', { only = 'tags', tags = '1-3' } ) ) self:assertEquals( ' a b \n\n b ', T.get('Module:Transcluder/testpage', { only = 'tags', tags = 'div' } ) ) self:assertEquals( ' b d \n\n d ', T.get('Module:Transcluder/testpage', { only = 'tags', tags = 'span' } ) ) end

function Suite:testTemplates self:assertDeepEquals( {,,''}, T.getTemplates( 'ae' ) ) self:assertDeepEquals( {''}, T.getTemplates( 'ae', 2 ) ) self:assertDeepEquals( {''}, T.getTemplates( 'ae', 'D' ) ) self:assertDeepEquals( {''}, T.getTemplates( 'ae', 'b' ) ) self:assertDeepEquals( {}, T.getTemplates( , 'a' ) ) self:assertDeepEquals( {,}, T.getTemplates( 'ae', '-d' ) ) self:assertDeepEquals( {,}, T.getTemplates( 'ae', 'c,d' ) ) self:assertDeepEquals( {,}, T.getTemplates( 'ae', '1,d' ) ) self:assertDeepEquals( {,}, T.getTemplates( 'ae', { ['c'] = true, ['d'] = true } ) ) self:assertDeepEquals( {,}, T.getTemplates( 'ae', { [1] = true, ['d'] = true } ) ) self:assertDeepEquals( {,}, T.getTemplates( 'ae', { [1] = false } ) )

self:assertEquals( '\n\n\n\n', T.get('Module:Transcluder/testpage#Templates', { only = 'templates' } ) ) self:assertEquals( '', T.get('Module:Transcluder/testpage#Templates', { only = 'templates', templates = 2 } ) ) self:assertEquals( '', T.get('Module:Transcluder/testpage#Templates', { only = 'templates', templates = 'X4' } ) ) self:assertEquals( '\n\n', T.get('Module:Transcluder/testpage#Templates', { only = 'templates', templates = 'X3,X4' } ) ) end

return Suite