Module:Text/testcases
Appearance
![]() | This is the test cases page for the module Module:Text. Results of the test cases. |
local p = require('Module:UnitTests')
local Text = require('Module:Text').Text()
-- Tests re-written in Lua from https://de.wikipedia.org/wiki/Wikipedia:Lua/Modul/Text/Test version 198988523
function p:testChar()
self:equals('nil',Text.char(),'')
self:equals('3 chars',Text.char({65,104,97}),'Aha')
self:equals('numeric strings',Text.char({"65",104,97}),'Aha')
self:equals('rep',Text.char({98,108,97},2),'blabla')
self:equals('error',mw.ustring.match(Text.char({'something'}),"error"),"error")
self:equals('lenient',Text.char('something',1,true),'')
self:equals('bad characters',mw.ustring.match(Text.char({7,8,9}),"error"),"error")
self:preprocess_equals('{{#invoke:Text|char|65 104 97}}','Aha')
self:preprocess_equals('{{#invoke:Text|char|98 108 97|*=2}}','blabla')
self:preprocess_equals('{{#invoke:Text|char|something|errors=0}}','')
end
function p:testConcatParams()
self:equals('nil',Text.concatParams(),'')
self:equals('empty',Text.concatParams({}),'')
self:equals('1',Text.concatParams({'A'}),'A')
self:equals('3',Text.concatParams({'A','B','C'}),'A|B|C')
self:equals('inbetween',Text.concatParams({'A','B','C'},'-'),'A-B-C')
self:equals('format',Text.concatParams({'1','2','3'},nil,'%.2f'),'1.00|2.00|3.00')
self:preprocess_equals('{{#invoke:Text|concatParams|1|2|3|separator=:|format=%.2f}}',
'1.00:2.00:3.00')
end
function p:testContainsCJK()
self:equals('nil',Text.containsCJK(),false)
self:equals('<code>Draco Dormiens Nunquam Titillandus</code>',
Text.containsCJK('Draco Dormiens Nunquam Titillandus'),false)
self:equals('<code>Никогда не щекочи спящего дракона</code>',
Text.containsCJK('Никогда не щекочи спящего дракона'),false)
self:equals('<code>सोए शेर को न जगाओ</code>',Text.containsCJK('सोए शेर को न जगाओ'),false)
self:equals('<code>永远不要惊醒卧龙</code>',Text.containsCJK('永远不要惊醒卧龙'),true)
self:equals('<code>眠っているドラゴンをくすぐることはありません</code>',
Text.containsCJK('眠っているドラゴンをくすぐることはありません'),true)
self:equals('<code>잠자는 용을 간지럽히지 마십시오</code>',
Text.containsCJK('잠자는 용을 간지럽히지 마십시오'),true)
end
function p:testGetPlain()
self:equals('plain',Text.getPlain('a and b'),'a and b')
self:equals('comment',Text.getPlain('a<!--comment-->b'),'ab')
self:equals('2 comments',Text.getPlain(' <!--comment-->hello, world<!--comment 2--> '),' hello, world ')
self:equals('wikimarkup',Text.getPlain('a <nowiki>b</nowiki> c'),'a b c')
self:equals('bold',Text.getPlain("'''a'''"),"a")
self:equals('italic',Text.getPlain("''b''"),"b")
self:equals('bold and italic',Text.getPlain("'''a''' and ''b''"),"a and b")
self:equals('nbsp',Text.getPlain("a and b"),"a and b")
self:equals('weird1',Text.getPlain("'''a'' and '''b''"),"a and b")
self:equals('weird2',Text.getPlain("a<!--I am an unclosed comment"),"a")
self:equals('weird3',Text.getPlain("'''unclosed bold"),"unclosed bold")
self:equals('mix1',Text.getPlain("<!-- hello -- -->'''a''' <!--world-->''<nowiki>b</nowiki>''"),"a b")
self:equals('mix2',Text.getPlain("<b>a</b> '''b'''<!-- hello -- world -->, <div style='font-size:100%;'>c</div>"),"a b, c")
end
function p:testRemoveDelimited()
self:equals('comment',Text.removeDelimited('a<!--comment-->b','<!--','-->'),'ab')
self:equals('2 comments',Text.removeDelimited(' <!--comment-->hello, world<!--comment 2--> ','<!--','-->'),' hello, world ')
self:equals('ref',Text.removeDelimited('in foo.<ref name=foo>{{cite web|title=Title|url=https://www.example.com}}</ref>','<ref','</ref>'),'in foo.')
end
function p:testIsLatin()
self:equals('',Text.isLatinRange(),true)
self:equals('<code>abcd</code>',Text.isLatinRange('abcd'),true)
self:equals('<code>Ça ira</code>',Text.isLatinRange('Ça ira'),true)
self:equals('<code>α – Ω</code>',Text.isLatinRange('α – Ω'),false)
self:equals('<code>a日本d</code>',Text.isLatinRange('a日本d'),false)
end
function p:testIsQuote()
self:equals('',Text.isQuote(),false)
self:equals('<code>"</code>',Text.isQuote('"'),true)
self:equals('<code>日</code>',Text.isQuote('日'),false)
self:equals('<code>abc</code>"',Text.isQuote('abc"'),false)
end
function p:testQuote()
self:equals('',Text.quote(),'“”')
self:equals('<code>abcd</code>',Text.quote('abcd'),'“abcd”')
self:equals('<code>"abcd"</code>',Text.quote('"abcd"'),'“"abcd"”')
self:equals('fr',Text.quote('abcd','fr'),'« abcd »')
self:equals('fr2',Text.quote('abcd','fr',2),'‹ abcd ›')
end
function p:testQuoteUnquoted()
self:equals('',Text.quoteUnquoted(),'')
self:equals('<code>abcd</code>',Text.quoteUnquoted('abcd'),'“abcd”')
self:equals('<code>"abcd"</code>',Text.quoteUnquoted('"abcd"'),'"abcd"')
self:equals('fr',Text.quoteUnquoted('abcd','fr'),'« abcd »')
self:equals('fr2',Text.quoteUnquoted('abcd','fr',2),'‹ abcd ›')
end
function p:testRemoveDiacritics()
self:equals('',Text.removeDiacritics(),'')
self:equals('<code>abcd</code>',Text.removeDiacritics('abcd'),'abcd')
self:equals('<code>âbçdé</code>',Text.removeDiacritics('âbçdé'),'abcde')
self:equals('<code>a日本d</code>',Text.removeDiacritics('a日本d'),'a日本d')
end
function p:testSentenceTerminated()
self:equals('<code>Hello</code>',Text.sentenceTerminated('Hello'),false)
self:equals('<code>(Hello)</code>',Text.sentenceTerminated('(Hello)'),false)
self:equals('<code>Hello.</code>',Text.sentenceTerminated('Hello.'),true)
self:equals('<code>„Deutsche“</code>',Text.sentenceTerminated('„Deutsche“'),false)
self:equals('<code>„Deutsche?“</code>',Text.sentenceTerminated('„Deutsche?“'),true)
self:equals('<code>"English?"</code>',Text.sentenceTerminated('"English?"'),true)
self:equals('<code>[[Hello!]]</code>',Text.sentenceTerminated('[[Hello!]]'),true)
end
function p:testUCFirstAll()
self:equals('',Text.ucfirstAll(''),'')
self:equals('<code>25</code>',Text.ucfirstAll(25),'25')
self:equals('<code>Help test me</code>',Text.ucfirstAll('Help test me'),'Help Test Me')
self:equals('<code>an der Schönen</code>',Text.ucfirstAll('an der Schönen'),'An Der Schönen')
self:equals('<code>an der Schönen &lauen</code>',Text.ucfirstAll('an der Schönen &lauen'),'An Der Schönen &Lauen')
self:equals('<code>an der Schönen &lauen donau – X y z</code>',Text.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('nbsp',Text.ucfirstAll('a b'),'A B')
self:equals('many HTML',Text.ucfirstAll("&<>  ‌‍‎‏"),
'&<> '..mw.text.decode(" ‌‍‎‏"))
end
function p:testUprightNonLatin()
self:equals('simple',Text.uprightNonlatin('abc'),'abc')
self:equals('with blank',Text.uprightNonlatin('abc '),'abc ')
self:equals('diacritic',Text.uprightNonlatin('Mutsṭafah'),'Mutsṭafah')
self:equals('greek1',Text.uprightNonlatin('μm'),'μm')
self:equals('greek2',Text.uprightNonlatin('1 α-particle'),'1 α-particle')
self:equals('greek3',Text.uprightNonlatin('Method 3α'),'Method 3α')
self:equals('capital greek1',Text.uprightNonlatin('ΣΨΩ'),"<span dir='auto' style='font-style:normal'>ΣΨΩ</span>")
self:equals('capital greek2',Text.uprightNonlatin('abcΣΨΩxyz'),
"abc<span dir='auto' style='font-style:normal'>ΣΨΩ</span>xyz")
self:equals('cyrillic1',Text.uprightNonlatin('abЩyz'),"ab<span dir='auto' style='font-style:normal'>Щ</span>yz")
self:equals('cyrillic2',Text.uprightNonlatin('Войната 1915 година. Втора Македония'),
"<span dir='auto' style='font-style:normal'>Войната 1915 година. Втора Македония</span>")
self:equals('CJK',Text.uprightNonlatin('a日本d'),"a<span dir='auto' style='font-style:normal'>日本</span>d")
end
function p:testExport()
self:preprocess_equals('{{#invoke:Text|containsCJK|a}}',"")
self:preprocess_equals('{{#invoke:Text|containsCJK|日}}',"1")
self:preprocess_equals('{{#invoke:Text|isLatinRange|日}}',"")
self:preprocess_equals('{{#invoke:Text|isLatinRange|a}}',"1")
self:preprocess_equals('{{#invoke:Text|isQuote|日}}',"")
self:preprocess_equals('{{#invoke:Text|isQuote|„}}',"1")
self:preprocess_equals('{{#invoke:Text|sentenceTerminated|日}}',"")
self:preprocess_equals('{{#invoke:Text|sentenceTerminated|a.}}',"1")
self:preprocess_equals('{{#invoke:Text|getPlain|a}}',"a")
self:preprocess_equals('{{#invoke:Text|removeDiacritics|a}}',"a")
self:preprocess_equals('{{#invoke:Text|ucfirstAll|a}}',"A")
self:preprocess_equals('{{#invoke:Text|uprightNonlatin|a}}',"a")
end
return p