Module:Text/testcases
Appearance
From Wikipedia, the free encyclopedia
localp=require('Module:UnitTests') localText=require('Module:Text').Text() localTextSandbox=require('Module:Text/sandbox').Text() -- Tests re-written in Lua from https://de.wikipedia.org/wiki/Wikipedia:Lua/Modul/Text/Test version 198988523 functionp:charTester(m,o) self:equals('',o.char(),'') self:equals('<code>{65,104,97}</code>',o.char({65,104,97}),'Aha') self:equals('<code>{"65",104,97}</code>',o.char({"65",104,97}),'Aha') self:equals('<code>{98,108,97},2</code>',o.char({98,108,97},2),'blabla') self:equals('<code>{"something"}</code>',mw.ustring.match(o.char({'something'}),"error"),"error") self:equals('<code>"something",1,true</code>',o.char('something',1,true),'') self:equals('<code>{7,8,9}</code>',mw.ustring.match(Text.char({7,8,9}),"error"),"error") self:preprocess_equals_many('{{#invoke:'..m..'|char|','}}',{ {'65 104 97','Aha'}, {'98 108 97|*=2','blabla'}, {'something|errors=0',''}}) end functionp:testChar() self:charTester('Text',Text) end functionp:testCharSandbox() self:charTester('Text/sandbox',TextSandbox) end functionp:concatParamsTester(m,o) self:equals('',o.concatParams(),'') self:equals('<code>{}</code>',o.concatParams({}),'') self:equals('<code>A</code>',o.concatParams('A'),'A') self:equals('<code>{"A"}</code>',o.concatParams({'A'}),'A') self:equals('<code>{"A","B","C"}</code>',o.concatParams({'A','B','C'}),'A|B|C',{nowiki=1}) self:equals('<code>{"A","B","C"},"-"</code>',o.concatParams({'A','B','C'},'-'),'A-B-C') self:equals('<code>{"1","2","3"},nil,"%.2f"</code>',o.concatParams({'1','2','3'},nil,'%.2f'),'1.00|2.00|3.00',{nowiki=1}) self:preprocess_equals('{{#invoke:'..m..'|concatParams|1|2|3|separator=:|format=%.2f}}', '1.00:2.00:3.00') end functionp:testConcatParams() self:concatParamsTester('Text',Text) end functionp:testConcatParamsSandbox() self:concatParamsTester('Text/sandbox',TextSandbox) end functionp:listToTextTester(m,o) self:equals('',o.listToText(),'') self:equals('<code>{}</code>',o.listToText({}),'') self:equals('<code>A</code>',o.listToText('A'),'A') self:equals('<code>{"A"}</code>',o.listToText({'A'}),'A') self:equals('<code>{"A","B","C"}</code>',o.listToText({'A','B','C'}),'A, B and C') self:equals('<code>{"1","2","3"},"%.2f"</code>',o.listToText({'1','2','3'},'%.2f'),'1.00, 2.00 and 3.00') self:preprocess_equals('{{#invoke:'..m..'|listToText|1|2|3|format=%.2f}}', '1.00, 2.00 and 3.00') end functionp:testListToText() self:listToTextTester('Text',Text) end functionp:testListToTextSandbox() self:listToTextTester('Text/sandbox',TextSandbox) end functionp:containsCJKTester(o) localfunctionsingleTest(arg,expected) self:equals('<code>'..arg..'</code>',o.containsCJK(arg),expected) end self:equals('',o.containsCJK(),false) singleTest('Draco Dormiens Nunquam Titillandus',false) singleTest('Никогда не щекочи спящего дракона',false) singleTest('सोए शेर को न जगाओ',false) singleTest('永远不要惊醒卧龙',true) singleTest('眠っているドラゴンをくすぐることはありません',true) singleTest('잠자는 용을 간지럽히지 마십시오',true) end functionp:testContainsCJK() self:containsCJKTester(Text) end functionp:testContainsCJKSandbox() self:containsCJKTester(TextSandbox) end functionp:getPlainTester(o) localfunctionsingleTest(arg,expected) self:equals('<code><nowiki>'..arg..'</nowiki></code>', o.getPlain(arg),expected) end singleTest('a and b','a and b') singleTest('a<!--comment-->b','ab') singleTest(' <!--comment-->hello, world<!--comment 2--> ',' hello, world ') singleTest('a <nowiki>b</nowiki> c','a b c') singleTest("'''a'''","a") singleTest("''b''","b") singleTest("'''a''' and ''b''","a and b") singleTest("a and b","a and b") singleTest("'''a'' and '''b''","a and b") singleTest("a<!--I am an unclosed comment","a") singleTest("'''unclosed bold","unclosed bold") singleTest("<!-- hello -- -->'''a''' <!--world-->''<nowiki>b</nowiki>''","a b") singleTest("<b>a</b> '''b'''<!-- hello -- world -->, <div style='font-size:100%;'>c</div>","a b, c") end functionp:testGetPlain() self:getPlainTester(Text) end functionp:testGetPlainSandbox() self:getPlainTester(TextSandbox) end functionp:removeDelimitedTester(o) self:equals('comment',o.removeDelimited('a<!--comment-->b','<!--','-->'),'ab') self:equals('2 comments',o.removeDelimited(' <!--comment-->hello, world<!--comment 2--> ','<!--','-->'),' hello, world ') self:equals('ref',o.removeDelimited('in foo.<ref name=foo>{{cite web|title=Title|url=https://www.example.com}}</ref>','<ref','</ref>'),'in foo.') end functionp:testRemoveDelimited() self:removeDelimitedTester(Text) end functionp:testRemoveDelimitedSandbox() self:removeDelimitedTester(TextSandbox) end functionp:isLatinTester(o) localfunctionsingleTest(arg,expected) self:equals('<code>'..arg..'</code>',o.isLatinRange(arg),expected) end self:equals('',o.isLatinRange(),true) singleTest('abcd',true) singleTest('Ça ira',true) singleTest('α – Ω',false) singleTest('a日本d',false) end functionp:testIsLatin() self:isLatinTester(Text) end functionp:testIsLatinSandbox() self:isLatinTester(TextSandbox) end functionp:isQuoteTester(o) localfunctionsingleTest(arg,expected) self:equals('<code>'..arg..'</code>',o.isQuote(arg),expected) end self:equals('',o.isQuote(),false) singleTest('"',true) singleTest('日',false) singleTest('abc"',false) end functionp:testIsQuote() self:isQuoteTester(Text) end functionp:testIsQuoteSandbox() self:isQuoteTester(TextSandbox) end functionp:quoteTester(o) self:equals('',o.quote(),'""') self:equals('<code>abcd</code>',o.quote('abcd'),'"abcd"') self:equals('<code>"abcd"</code>',o.quote('"abcd"'),'""abcd""') self:equals('fr',o.quote('abcd','fr'),'« abcd »') self:equals('fr2',o.quote('abcd','fr',2),'‹ abcd ›') end functionp:testQuote() self:quoteTester(Text) end functionp:testQuoteSandbox() self:quoteTester(TextSandbox) end functionp:quoteUnquotedTester(o) self:equals('',o.quoteUnquoted(),'') self:equals('<code>abcd</code>',o.quoteUnquoted('abcd'),'"abcd"') self:equals('<code>"abcd"</code>',o.quoteUnquoted('"abcd"'),'"abcd"') self:equals('fr',o.quoteUnquoted('abcd','fr'),'« abcd »') self:equals('fr2',o.quoteUnquoted('abcd','fr',2),'‹ abcd ›') end functionp:testQuoteUnquoted() self:quoteUnquotedTester(Text) end functionp:testQuoteUnquotedSandbox() self:quoteUnquotedTester(TextSandbox) end functionp:removeDiacriticsTester(o) localfunctionsingleTest(arg,expected) self:equals('<code>'..arg..'</code>',o.removeDiacritics(arg),expected) end self:equals('',o.removeDiacritics(),'') singleTest('abcd','abcd') singleTest('âbçdé','abcde') singleTest('a日本d','a日本d') end functionp:testRemoveDiacritics() self:removeDiacriticsTester(Text) end functionp:testRemoveDiacriticsSandbox() self:removeDiacriticsTester(TextSandbox) end functionp:sentenceTerminatedTester(o) localfunctionsingleTest(arg,expected) self:equals('<code><nowiki>'..arg..'</nowiki></code>', o.sentenceTerminated(arg),expected) end singleTest('Hello',false) singleTest('(Hello)',false) singleTest('Hello.',true) singleTest('„Deutsche"',false) singleTest('„Deutsche?"',true) singleTest('"English?"',true) singleTest('[[Hello!]]',true) end functionp:testSentenceTerminated() self:sentenceTerminatedTester(Text) end functionp:testSentenceTerminatedSandbox() self:sentenceTerminatedTester(TextSandbox) end functionp:ucFirstAllTester(o) localfunctionsingleTest(arg,expected) self:equals('<code>'..tostring(arg)..'</code>',o.ucfirstAll(arg),expected) end self:equals('',o.ucfirstAll(),'') singleTest(25,'25') singleTest('Help test me','Help Test Me') singleTest('an der Schönen','An Der Schönen') singleTest('an der Schönen &lauen','An Der Schönen &Lauen') self:equals('HTML ndash',o.ucfirstAll('an der Schönen &lauen donau – X y z'), 'An Der Schönen &Lauen Donau '..mw.text.decode('–',true)..' X Y Z') self:equals('HTML nbsp',o.ucfirstAll('a b'),'A B') self:equals('many HTML',o.ucfirstAll("&<>  ‌‍‎‏"), '&<> '..mw.text.decode(" ‌‍‎‏")) end functionp:testUCFirstAll() self:ucFirstAllTester(Text) end functionp:testUCFirstAllSandbox() self:ucFirstAllTester(TextSandbox) end functionp:uprightNonLatin(o) localfunctionsingleTest(arg,expected) self:equals('<code>'..arg..'</code>',o.uprightNonlatin(arg),expected,{nowiki=1}) end singleTest('abc','abc') singleTest('abc ','abc ') singleTest('Musṭafah','Musṭafah') singleTest('μm','μm') singleTest('1 α-particle','1 α-particle') singleTest('Method 3α','Method 3α') singleTest('ΣΨΩ',"<span dir='auto' style='font-style:normal'>ΣΨΩ</span>") singleTest('abcΣΨΩxyz', "abc<span dir='auto' style='font-style:normal'>ΣΨΩ</span>xyz") singleTest('abЩyz',"ab<span dir='auto' style='font-style:normal'>Щ</span>yz") singleTest('Войната 1915 година. Втора Македония', "<span dir='auto' style='font-style:normal'>Войната 1915 година. Втора Македония</span>") singleTest('a日本d',"a<span dir='auto' style='font-style:normal'>日本</span>d") end functionp:testUprightNonLatin() self:uprightNonLatin(Text) end functionp:testUprightNonLatinSandbox() self:uprightNonLatin(TextSandbox) end functionp:exportTester(m) self:preprocess_equals_many('{{#invoke:'..m..'|','}}',{ {'containsCJK|a',""}, {'containsCJK|日',"1"}, {'isLatinRange|日',""}, {'isLatinRange|a',"1"}, {'isQuote|日',""}, {'isQuote|„',"1"}, {'sentenceTerminated|日',""}, {'sentenceTerminated|a.',"1"}, {'getPlain|a',"a"}, {'removeDiacritics|a',"a"}, {'ucfirstAll|a',"A"}, {'uprightNonlatin|a',"a"}} ) end functionp:testExport() self:exportTester('Text') end functionp:testExportSandbox() self:exportTester('Text/sandbox') end functionp:splitTester(m,o) self:equals_deep('"?a?b?c?d?e?f?", "c"',o.split("?a?b?c?d?e?f?","c"),mw.text.split("?a?b?c?d?e?f?","c")) self:equals_deep('"?a?b?c?d?e?f?", "?"',o.split("?a?b?c?d?e?f?","?"),mw.text.split("?a?b?c?d?e?f?","?")) self:equals_deep('"?a?b?c?d?e?f?", ""',o.split("?a?b?c?d?e?f?",""),mw.text.split("?a?b?c?d?e?f?","")) self:equals_deep('"?a?b?c?d?e?f?", "z"',o.split("?a?b?c?d?e?f?","z"),mw.text.split("?a?b?c?d?e?f?","z")) self:equals_deep('"?a?b?c?d?e?f?", "[bdf]"',o.split("?a?b?c?d?e?f?","[bdf]"),mw.text.split("?a?b?c?d?e?f?","[bdf]")) self:equals_deep('"?a?b?c?d?e?f?", "[bdf]", true',o.split("?a?b?c?d?e?f?","[bdf]",true),mw.text.split("?a?b?c?d?e?f?","[bdf]",true)) self:preprocess_equals_many('{{#invoke:'..m..'|split|?a?b?c?|','}}',{ {'c',mw.text.split("?a?b?c?","c")[1]}, {'?',mw.text.split("?a?b?c?","?")[1]}, {'?|false|2',mw.text.split("?a?b?c?","?")[2]}, {'?|false|-2',mw.text.split("?a?b?c?","?")[#mw.text.split("?a?b?c?","?")-2+1]}, {'|false|2',mw.text.split("?a?b?c?","")[2]}, {'z',mw.text.split("?a?b?c?","z")[1]}, {'[bc]',mw.text.split("?a?b?c?","[bc]")[1]}, {'[bc]|true',mw.text.split("?a?b?c?","[bc]",true)[1]}, }) end functionp:testSplit() self:splitTester('Text',Text) end functionp:testSplitSandbox() self:splitTester('Text/sandbox',TextSandbox) end functionp:zipTester(m) self:preprocess_equals('{{#invoke:'..m..'|zip|a,b,c|1,2,3|sep=,|isep=-|osep=/}}',"a-1/b-2/c-3") self:preprocess_equals('{{#invoke:'..m..'|zip|a b c|x y z|1 2 3|sep=%s+|isep=-|osep=/}}',"a-x-1/b-y-2/c-z-3") end functionp:testZip() self:zipTester('Text') end functionp:testZipSandbox() self:zipTester('Text/sandbox') end returnp