internationalization.lib.test.php 62 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493
  1. <?php
  2. /* For licensing terms, see /license.txt */
  3. /**
  4. * This is a test of internationalization.lib.php which is
  5. * a common purpose library for supporting internationalization
  6. * related functions. Only the public API is tested here.
  7. * @author Ricardo Rodriguez Salazar, 2009.
  8. * @author Ivan Tcholakov, 2009-2010.
  9. *
  10. * Notes:
  11. * 1. While saving this file, please, preserve its UTF-8 encoding.
  12. * Othewise this test would be broken.
  13. * 2. While running this test, send a header declaring UTF-8 encoding.
  14. * Then you would see variable dumps correctly.
  15. * 3. Tests about string comparison and sorting might give false results
  16. * if the intl extension has not been installed.
  17. */
  18. class TestInternationalization extends UnitTestCase {
  19. private $language_strings = array( // All these strings are UTF-8 encoded.
  20. 'afrikaans' => "Hy laat my in groen weivelde rus. Hy bring my by waters waar daar vrede is.",
  21. 'albanian' => "Çdokush prej jush mund të kontribuojë vullnetarisht me dijen e tij për zgjerimin e mëtejshëm të kësaj enciklopedie të lirë.",
  22. 'alemannic' => "Das bedütet, dass a dem Projekt alli chöi teilnä, wo en alemannischi Dialektspilart beherrsche, wo da gredt wird.",
  23. 'amharic' => "ዳግማዊ ፡ ምኒልክ ፡ ንጉሠ ፡ ነገሥት ፡ ዘኢትዮጵያ ።",
  24. 'arabic' => "ما اسمك؟",
  25. 'armenian' => "Ընդհանուր տեղեկություններ, կառավարման համակարգ, ժողովրդագրություն և աշխարհագրական տվյալներ:",
  26. 'asturian' => "La ortografía nun ye fonolóxica sinon histórica, tando considerada como una de les llingües más abegoses d'aprender de les qu'usen esi alfabetu.",
  27. 'belarusian' => "Умоўным часам пачатку гісторыі сучаснай беларускай літаратурнай мовы лічыцца пачатак 19 стагоддзя.",
  28. 'bosnian' => "Engleski jezik je nastao iz jezika germanskih plemena koja su se u kasnom starom vijeku naselila na jugoistoku otoka Velike Britanije.",
  29. 'brazilian' => "O governo federal irá zerar o número de municípios sem bibliotecas este ano. De acordo com o Sistema Nacional de Bibliotecas Públicas, 661 municípios ainda não têm esses equipamentos. Se sua cidade não estiver nesta relação e não possuir biblioteca pública municipal, informe aqui. A cultura é um direito de todo o cidadão!",
  30. 'breton' => "Hon Tad, c'hwi hag a zo en Neñv, ra vo santelaet hoc'h ano. Ra zeuio ho Rouantelezh.",
  31. 'bulgarian' => "Глобалното затопляне ще освободи Северния ледовит океан от ледовете през лятото през следващите 20 години.",
  32. 'catalan' => "Els drets juridicolingüístics dels catalanoparlants són ben diferents segons l'indret geogràfic, podem parlar de catalanoparlants de primera i de segona.",
  33. 'croatian' => "Oče naš, koji jesi na nebesima, sveti se ime Tvoje. Dođi kraljevstvo Tvoje, budi volja Tvoja, kako na Nebu, tako i na Zemlji.",
  34. 'czech' => "V převážné většině mezinárodních škol je vyučovacím jazykem angličtina.",
  35. 'danish' => "Et ganske særligt kendetegn ved dansk er stød.",
  36. 'dari' => "جمعیت افغانستان حدود ۳۰ میلیون نفر برآورد می‌شود. براساس سرشماری مقدماتی کمیته ملی احصائیه کشور، جمعیت افغانستان در سال ۱۳۸۵، ۲۴ میلیون",
  37. 'dutch' => "De officiële taal, zoals die wordt onderwezen op scholen en gebruikt wordt door de autoriteiten, wordt Standaardnederlands genoemd.",
  38. 'english' => "Approximately 375 million people speak English as their first language.",
  39. 'esperanto' => "La vortprovizo de Esperanto devenas plejparte el la okcidenteŭropaj lingvoj, dum ĝia sintakso kaj morfologio montras ankaŭ slavlingvan influon.",
  40. 'estonian' => "Ta eelistab lubjarikast pinnast, kuid kasvab ka settelistel muldadel ja väheviljakal pinnasel, kus teisi puittaimi ei leidu.",
  41. 'euskera' => "Euskaren gramatika zailtasun handikoa da, horrez gain, hizkuntza indoeuroparra ez izanik, eratze edo joskera bereziak ditu, beste hizkuntzetan aurkitu ez ditzakegunak.",
  42. 'finnish' => "Nominit taipuvat sijoissa eli sijamuodoissa yleensä sekä yksikössä että monikossa.",
  43. 'french' => "La majorité du fonds lexical français provient du latin (en tant que langue-mère) ou bien est construit à partir des racines gréco-latines.",
  44. 'frisian' => "Us Heit, dy't yn de himelen is jins namme wurde hillige. Jins keninkryk komme.",
  45. 'friulian' => "Mandi, jo mi clami Jacum! Vuê al è propite cjalt! O scugni propite lâ cumò, ariviodisi.",
  46. 'galician' => "Se borrarán todos los comentarios que, con criterio subjetivo como en toda web, se consideren inadecuados.",
  47. 'georgian' => "საკუთარ პერიოდში ბუგერო მსოფლიოს ერთ-ერთ უდიდეს მხატვრად იყო აღიარებული, თუმცა მე-20 საუკუნის დასაწყისში მას უკვე არაფრად აგდებდნენ, შესაძლოა მისი იმპრესიონისტთა მიმართ აგრესიულობის გამო. მიუხედავად ამისა, დღეს მას თაყვანისმცემლების ახალი დიდი ტალღა შეემატა - მისი ნამუშევრები მსოფლიოს ასზე მეტ უდიდეს მუზეუმშია გამოფენილი.",
  48. 'german' => "Durch ihre zentrale Lage in Europa wurde die deutsche Sprache über die Jahrhunderte durch andere Sprachen beeinflusst.",
  49. 'greek' => "Η ναυτική βιομηχανία αποτέλεσε ένα σημαντικό στοιχείο της Ελληνικής οικονομικής δραστηριότητας από τα αρχαία χρόνια.",
  50. 'hawaiian' => "A ma mua o ka hō'ea 'ana i Tahiti, ua ho'okele maila lākou mai Sāmoa a Tonga paha.",
  51. 'hebrew' => "שימו לב: אם עדיין לא נרשמתם, ייתכן כי חלק מהתכונות אינן זמינות לכם. במקרה זה רצוי ליצור חשבון חדש, פעולה האורכת מספר דקות בלבד. ראו איך ליצור חשבון חדש.",
  52. 'hindi' => "साइट का लिंक लगाने के लिए निम्नांकित फार्मेट में उपयुक्त कक्ष में/या नया कक्ष बना कर लिखें :",
  53. 'hungarian' => "A magyar nyelv az uráli nyelvcsalád tagja, a finnugor nyelvek közé tartozó ugor nyelvek egyike.",
  54. 'icelandic' => "Margir Íslendingar telja íslenskuna vera „upprunalegra“ mál en flest önnur og að hún hafi breyst minna.",
  55. 'indonesian' => "Selain itu, Baristand senantiasa meningkatkan kualitas personil dan berbagai fasilitas pendukung industri, serta fasilitas lainnya yaitu perpustakaan dengan buku-buku ilmiah, laporan hasil penelitian, dan majalah ilmiah.",
  56. 'irish' => "háinig críoch dheifnideach lena chuid scríbhneoireachta nuair a cuireadh i dteach na ngealt é agus síocóis dhúlagrach ag luí ar a intinn.",
  57. 'italian' => "Tuttavia l'assetto attuale della lingua è in sostanza quello del fiorentino trecentesco, ripulito dei tratti più marcatamente locali.",
  58. 'japanese' => "日本語(にほんご、にっぽんご)は、主として、日本で使用されてきた言語である。日本国は法令上、公用語を明記していないが、事実上の公用語となっており、学校教育の「国語」で教えられる。",
  59. 'korean' => "이 문서는 삭제되었습니다. 이 문서의 삭제/이동 기록은 다음과 같습니다.",
  60. 'latin' => "Architecti est scientia pluribus disciplinis et variis eruditionibus ornata, cuius iudicio probantur omnia quae ab ceteris artibus perficiuntur opera.",
  61. 'latvian' => "Tas visvairāk ir vērojams jaunu terminu darināšanā, kas bieži izsauc arī negatīvu reakciju.",
  62. 'lithuanian' => "Dabartinės literatūrinės kalbos pagrindas remiasi vakarų aukštaičių pietiečių (suvalkiečių) tarme, išlaikiusia senesnes fonetikos ir morfologijos lytis.",
  63. 'macedonian' => "Залагањето за создавање на македонски литературен јазик датира уште од почетокот на XIX век, со појавата на Просветителите.",
  64. 'malay' => "Suntingan yang tidak sesuai akan dikeluarkan segera, dan pesalah yang berulang boleh disekat daripada menyunting. Harap maklum.",
  65. 'manx' => "Haink ram cooney da aavioghey ny Gaelgey liorish yn obbyr recortyssagh jeant liorish aahirreyderyn 'sy 20oo eash.",
  66. 'marathi' => "समस्त विकिपीडिया वाचक आणि संपादकांना दीपावलीच्या हार्दीक शुभेच्छा !",
  67. 'middle_frisian' => "30 beest van en wief dat er gen schrift van is dy plæge hem Kom krod my ney de Verman ta.",
  68. 'mingo' => "Kakwékö nêkê ne'hu niyawë'ö, ne n-u'kaiwayeí ne' thusnye'ö N-awëníyu', ne' húkwa huwënitkëhtahkö haya'tatek, n- utukëstaniak, háwê,",
  69. 'nepali' => "तपाईंको/तिम्रो नाम के हो?",
  70. 'norwegian' => "Språksamfunn lånar ord frå meir prestisjefylte språksamfunn, via tospråklege talarar. Studium av lånordslag i norsk speglar dermed samfunnsmessige tilhøve i Europa opp gjennom hundreåra.",
  71. 'occitan' => "Ara s'estima que sus una populacion de 14 o 15 milions d'occitans, son entre 500 000 e 2 000 000 los que son capables de parlar l'occitan correntament, mas las ocasions de lo parlar dins la societat son raras.",
  72. 'pashto' => "د راجيت سيتارام پنډت په قول ميلنده پڼهو اصلي نسخه په زړه پښتو ليکل شويده - موړ کتاب چې د",
  73. 'persian' => "زبان فارسی (پارسی، دری، یا تاجیکی) زبانی است که در کشورهای ایران، افغانستان[۲]، تاجیکستان[۳] و",
  74. 'polish' => "Język polski wywodzi się z języka praindoeuropejskiego za pośrednictwem języka prasłowiańskiego.",
  75. 'portuguese' => "Assim como os outros idiomas, o português sofreu uma evolução histórica, sendo influenciado por vários idiomas e dialetos, até chegar ao estágio conhecido atualmente. Deve-se considerar, porém, que o português de hoje compreende vários dialetos e subdialetos, falares e subfalares, muitas vezes bastante distintos, além de dois padrões reconhecidos internacionalmente (português brasileiro e português europeu).",
  76. 'quechua_cusco' => "Simi yachaqkunaqa rimanakun, qhichwa simi hukllachu achkachu rimay. SIL International nisqa tantanakuy ninmi, 42 rimaymi, nispa.",
  77. 'romanian' => "Limba română este vorbită în toată lumea de aproximativ 26 de milioane de persoane.",
  78. 'rumantsch' => "Mintga idiom ha sviluppà sia atgna lingua da scrittira ch'è dentant savens era puspè in cumpromiss tranter ils differents dialects regiunals e locals.",
  79. 'russian' => "Русский язык — один из восточнославянских языков, один из крупнейших языков мира, в том числе самый распространённый из славянских языков и самый распространённый язык Европы, как географически, так и по числу носителей языка как родного (хотя также значительная и географически большая часть русского языкового ареала находится в Азии).",
  80. 'sanskrit' => "एयं भाषा न केवलं भारतस्‍य अपितु विश्‍वस्‍यप्राचीनतमा भाषा मन्‍यते। इयं भाषा एतावती समृद्घा अस्‍ति यत्‌ प्राय: सर्वासु भारतीयभाषासु न्‍यूनाधिकरूपेण अस्‍या: शब्‍दा: प्रयुज्‍यन्‍ते. अत: भाषाविदां मते इयं सर्वासां भाषाणां जननी मन्‍यते। पुरा संस्कृतं लोकभाषा आसीत्‌। जना: संस्कृतं वदन्ति स्म॥ विश्‍वस्‍य आदिम: ग्रन्‍थ: ऋग्‍वेद: संस्‍कृतभाषायामेवास्‍ति। अन्‍ये च वेदा: यथा यजुर्वेद:, सामवेद:, अथर्ववेदश्‍च संस्‍कृतभाषायामेव सन्‍ति। आयुर्वेद धनुर्वेद गन्‍धर्ववेदार्थवेदाख्‍या: चत्‍वार: उपवेदा: अपि संस्‍कृते एव विरचिता:॥ सर्वा: उपनिषद: संस्‍कृते उपनिबद्घाः। अन्‍ये ग्रन्‍था: - शिक्षा, कल्‍प, निरुक्त, ज्‍योतिष, छन्‍द, व्‍याकरण, वेदाङ्ग, दर्शन, इतिहास, पुराण, काव्‍य, शास्‍त्र: चेत्यादयः ॥ महर्षि-पाणिनिना विरचिता अष्‍टाध्‍यायी इति संस्‍कृतव्‍याकरणम्‌ अधुनापि भारते विदेशेषु च भाषाविज्ञानिनां प्रेरणास्‍थानं वर्तते ॥ वाक्यकारं वररुचिं भाष्यकारं पतंजलिम् | पाणिनिं सूत्रकारं च प्रणतोस्मि मुनित्रयम् ॥",
  81. 'scots' => "Anglian speakers wis weel staiblisht in sooth-east Scotland by the 7t century. In the 13t century Norman landawners an thair reteeners, speakin Northumbrian Middle Inglis, wis inveetit tae come an sattle by the Keeng.",
  82. 'scots_gaelic' => "Ciamar a tha thu? Dè an t-ainm a tha ort? Dè a tha seo?",
  83. 'serbian' => "Gajica je objavljena je 1830. godine u Zagrebu u „kratkoj osnovi horvatsko-slavonskoga pravopisa“. Razvio ju je Ljudevit Gaj.",
  84. 'serbian_cyrillic' => "Као и када су други језици у питању, неопходно је разграничити појам језичких система којим се Срби како етницитет служе од стандардног језика који се употребљава у државним и културним институцијама.",
  85. 'simpl_chinese' => "现代标准汉语,是普通话、国语、华语的统称,指通行于中国大陆和香港、澳门、台湾、海外华人的共通语文,为现代汉语共通的交际口语与书面语,是联合国官方语言之一,是国际人士学习汉语言的主要参照。",
  86. 'slovak' => "Ak ste nedávno napísali tento článok, skúste vyčistiť jeho vyrovnávaciu pamäť alebo chvíľu počkať predtým, než ho znova vytvoríte.",
  87. 'slovenian' => "Slovénščina je južnoslovanski jezik z okoli 2,2 milijonoma govorcev po svetu, od katerih jih večina živi v Sloveniji. Je eden redkih indoevropskih jezikov, ki je še ohranil dvojino.",
  88. 'spanish' => "El castellano es lengua oficial de España. También se habla en Gibraltar[70] y en Andorra (donde es la lengua materna mayoritaria debido a la inmigración, pero no es la lengua propia y oficial como sí lo es el catalán[71] ).",
  89. 'swahili' => "Lugha hii ina utajiri mkubwa wa misamiati na misemo na mithali na mashairi na mafumbo na vitendawili na nyimbo.",
  90. 'swedish' => "Hej. Hur är det? Bara bra, tack. Förlåt, jag har glömt, varifrån kommer du nu igen?",
  91. 'tagalog' => "Ang Wikibooks ay isang ambagang proyekto sa pagkagawa ng isang koleksyon ng mga libre at malayang-kontentong pang-araling aklat na pwede mong baguhin.",
  92. 'tamil' => "நீங்கள் ஆங்கிலம் பேசுவீர்களா?",
  93. 'thai' => "ภาษาไทย เป็นภาษาราชการของประเทศไทย และภาษาแม่ของชาวไทย และชนเชื้อสายอื่นในประเทศไทย ภาษาไทยเป็นภาษาในกลุ่มภาษาไต ซึ่งเป็นกลุ่มย่อยของตระกูลภาษาไท-กะได สันนิษฐานว่า",
  94. 'trad_chinese' => "中華民國,在亞東之極,本都南京,因事失地泰半,暫遷於臺北。其東以鴨綠江界朝鮮國,隔東海望日本。其北與俄羅斯相接。其西有大山,天下至高者也。而皆失於內戰,今僅得臺灣及其周圍矣。",
  95. 'turkce' => "Bu kitapta Türkçe konuşmak, yazmak ve okumak için gereken her şeyi bulacaksınız.",
  96. 'ukrainian' => "Українська мова є мовою найбільшого корінного етносу України і невід'ємною базовою ознакою його ідентичності протягом багатьох століть.",
  97. 'vietnamese' => "Tiếng Việt là ngôn ngữ chính thức tại Việt Nam, và cũng là ngôn ngữ phổ thông đối với các dân tộc thiểu số tại Việt Nam.",
  98. 'welsh' => "Gan nad oedd y Frythoneg yn iaith ysgrifenedig tystiolaeth anuniongyrchol yn unig sydd i'r newidiadau a ddigwyddodd iddi.",
  99. 'yiddish' => "יידיש אדער אידיש (Yiddish) גערופֿן ביי אידן אלס מאַמע לשון, איז אַ שפּראַך װאָס װערט הײַנט גערעדט ביי 1.5 מיליאָן יידן[1] און באַקאַנט ביי 3,142,560 מיליאָן [2] מענטשן איבער דער װעלט, בעיקר פֿונעם אַשכנזישן אָפּשטאַם.",
  100. 'yoruba' => "Èdè Yorùbá Ní báyìí, tí a bá wo èdè Yorùbá, àwon onímò pín èdè náà sábée èyà wa nínú e bí èdè Niger-Congo. Wón tún fìdí rè múlè pé èyà wa yìí ló wópò jùlo ní síso, ní ìwò oòrùn aláwò dúdú fún egbe-egbèrún odún."
  101. );
  102. function TestInternationalization() {
  103. $this->UnitTestCase('Internationalization library - main/inc/lib/internationalization.lib.test.php');
  104. }
  105. /**
  106. * ----------------------------------------------------------------------------
  107. * A safe way to calculate binary lenght of a string (as number of bytes)
  108. * ----------------------------------------------------------------------------
  109. */
  110. public function test_api_byte_count() {
  111. $string = 'xxxáéíóú?'; // UTF-8
  112. $res = api_byte_count($string);
  113. $this->assertTrue($res == 14);
  114. $this->assertTrue(is_numeric($res));
  115. //var_dump($res);
  116. }
  117. /**
  118. * ----------------------------------------------------------------------------
  119. * Multibyte string conversion functions
  120. * ----------------------------------------------------------------------------
  121. */
  122. public function test_api_convert_encoding() {
  123. $string = 'xxxáéíóú?€'; // UTF-8
  124. $from_encoding = 'UTF-8';
  125. $to_encoding = 'ISO-8859-15';
  126. $res = api_convert_encoding($string, $to_encoding, $from_encoding);
  127. $this->assertTrue(is_string($res));
  128. $this->assertTrue(api_convert_encoding($res, $from_encoding, $to_encoding) == $string);
  129. //var_dump($res);
  130. //var_dump(api_convert_encoding($res, $from_encoding, $to_encoding));
  131. }
  132. public function test_api_utf8_encode() {
  133. $string = 'xxxáéíóú?€'; // UTF-8
  134. $from_encoding = 'ISO-8859-15';
  135. $string1 = api_utf8_decode($string, $from_encoding);
  136. $res = api_utf8_encode($string1, $from_encoding);
  137. $this->assertTrue(is_string($res));
  138. $this->assertTrue($res == $string);
  139. //var_dump($res);
  140. }
  141. public function test_api_utf8_decode() {
  142. $string = 'xxxx1ws?!áéíóú@€'; // UTF-8
  143. $to_encoding = 'ISO-8859-15';
  144. $res = api_utf8_decode($string, $to_encoding);
  145. $this->assertTrue(is_string($res));
  146. $this->assertTrue(api_utf8_encode($res, $to_encoding) == $string);
  147. //var_dump($res);
  148. }
  149. public function test_api_to_system_encoding() {
  150. $string = api_utf8_encode(get_lang('Title'), api_get_system_encoding());
  151. $from_encoding = 'UTF-8';
  152. $check_utf8_validity = false;
  153. $res = api_to_system_encoding($string, $from_encoding, $check_utf8_validity);
  154. $this->assertTrue(is_string($res));
  155. $this->assertTrue(api_convert_encoding($res, $from_encoding, api_get_system_encoding()) == $string);
  156. //var_dump(api_utf8_encode($res, api_get_system_encoding()));
  157. }
  158. public function test_api_htmlentities() {
  159. $string = 'áéíóú@!?/\-_`*ç´`'; // UTF-8
  160. $quote_style = ENT_QUOTES;
  161. $encoding = 'UTF-8';
  162. $res = api_htmlentities($string, $quote_style, $encoding);
  163. $this->assertTrue(is_string($res));
  164. $this->assertTrue(api_convert_encoding($res, $encoding, 'HTML-ENTITIES') == $string);
  165. //var_dump($res);
  166. }
  167. public function test_api_html_entity_decode() {
  168. $string = 'áéíóú@/\!?Ç´`+*?-_ '; // UTF-8
  169. $quote_style = ENT_QUOTES;
  170. $encoding = 'UTF-8';
  171. $res = api_html_entity_decode(api_convert_encoding($string, 'HTML-ENTITIES', $encoding), $quote_style, $encoding);
  172. $this->assertTrue(is_string($res));
  173. $this->assertTrue($res == $string);
  174. //var_dump($res);
  175. }
  176. public function test_api_xml_http_response_encode() {
  177. $string='áéíóú@/\!?Ç´`+*?-_'; // UTF-8
  178. $from_encoding = 'UTF-8';
  179. $res = api_xml_http_response_encode($string, $from_encoding);
  180. $this->assertTrue(is_string($res));
  181. //var_dump($res);
  182. }
  183. public function test_api_file_system_encode() {
  184. $string = 'áéíóú@/\!?Ç´`+*?-_'; // UTF-8
  185. $from_encoding = 'UTF-8';
  186. $res = api_file_system_encode($string, $from_encoding);
  187. $this->assertTrue(is_string($res));
  188. //var_dump($res);
  189. }
  190. public function test_api_file_system_decode() {
  191. $string='áéíóú@/\!?Ç´`+*?-_'; // UTF-8
  192. $to_encoding = 'UTF-8';
  193. $res = api_file_system_decode($string, $to_encoding);
  194. $this->assertTrue(is_string($res));
  195. //var_dump($res);
  196. }
  197. public function test_api_transliterate() {
  198. $string = 'Фёдор Михайлович Достоевкий'; // UTF-8
  199. /*
  200. // If you have broken by mistake UTF-8 encoding of this source, try the following equivalent:
  201. $string = api_html_entity_decode(
  202. '&#1060;&#1105;&#1076;&#1086;&#1088; '.
  203. '&#1052;&#1080;&#1093;&#1072;&#1081;&#1083;&#1086;&#1074;&#1080;&#1095; '.
  204. '&#1044;&#1086;&#1089;&#1090;&#1086;&#1077;&#1074;&#1082;&#1080;&#1081;',
  205. ENT_QUOTES, 'UTF-8');
  206. */
  207. $unknown = 'X';
  208. $from_encoding = 'UTF-8';
  209. $res = api_transliterate($string, $unknown, $from_encoding);
  210. $this->assertTrue($res);
  211. $this->assertTrue(is_string($res));
  212. $this->assertTrue($res == 'Fyodor Mihaylovich Dostoevkiy');
  213. //var_dump($string);
  214. //var_dump($res);
  215. }
  216. /**
  217. * ----------------------------------------------------------------------------
  218. * Common multibyte string functions
  219. * ----------------------------------------------------------------------------
  220. */
  221. public function test_api_ord() {
  222. $encoding = 'UTF-8';
  223. $characters = array('И', 'в', 'а', 'н', ' ', 'I', 'v', 'a', 'n'); // UTF-8
  224. $codepoints = array(1048, 1074, 1072, 1085, 32, 73, 118, 97, 110);
  225. $res = array();
  226. foreach ($characters as $character) {
  227. $res[] = api_ord($character, $encoding);
  228. }
  229. $this->assertTrue($res == $codepoints);
  230. //var_dump($res);
  231. }
  232. public function test_api_chr() {
  233. $encoding = 'UTF-8';
  234. $codepoints = array(1048, 1074, 1072, 1085, 32, 73, 118, 97, 110);
  235. $characters = array('И', 'в', 'а', 'н', ' ', 'I', 'v', 'a', 'n'); // UTF-8
  236. $res = array();
  237. foreach ($codepoints as $codepoint) {
  238. $res[] = api_chr($codepoint, $encoding);
  239. }
  240. $this->assertTrue($res == $characters);
  241. //var_dump($res);
  242. }
  243. public function test_api_str_ireplace() {
  244. $search = 'Á'; // UTF-8
  245. $replace = 'a';
  246. $subject = 'bájando'; // UTF-8
  247. $count = null;
  248. $encoding = 'UTF-8';
  249. $res = api_str_ireplace($search, $replace, $subject, & $count, $encoding);
  250. $this->assertTrue($res);
  251. $this->assertTrue(is_string($res));
  252. $this->assertTrue($res == 'bajando');
  253. //var_dump($res);
  254. }
  255. public function test_api_str_split() {
  256. $string = 'áéíóúº|\/?Ç][ç]'; // UTF-8
  257. $split_length = 1;
  258. $encoding = 'UTF-8';
  259. $res = api_str_split($string, $split_length, $encoding);
  260. $this->assertTrue(is_array($res));
  261. $this->assertTrue(count($res) == 15);
  262. //var_dump($res);
  263. }
  264. public function test_api_stripos() {
  265. $haystack = 'bájando'; // UTF-8
  266. $needle = 'Á';
  267. $offset = 0;
  268. $encoding = 'UTF-8';
  269. $res = api_stripos($haystack, $needle, $offset, $encoding);
  270. $this->assertTrue(is_numeric($res)|| is_bool($res));
  271. $this->assertTrue($res == 1);
  272. //var_dump($res);
  273. }
  274. public function test_api_stristr() {
  275. $haystack = 'bájando'; // UTF-8
  276. $needle = 'Á';
  277. $part = false;
  278. $encoding = 'UTF-8';
  279. $res = api_stristr($haystack, $needle, $part, $encoding);
  280. $this->assertTrue(is_bool($res) || is_string($res));
  281. $this->assertTrue($res == 'ájando');
  282. //var_dump($res);
  283. }
  284. public function test_api_strlen() {
  285. $string='áéíóúº|\/?Ç][ç]'; // UTF-8
  286. $encoding = 'UTF-8';
  287. $res = api_strlen($string, $encoding);
  288. $this->assertTrue(is_numeric($res));
  289. $this->assertTrue($res == 15);
  290. //var_dump($res);
  291. }
  292. public function test_api_strpos() {
  293. $haystack = 'bájando'; // UTF-8
  294. $needle = 'á';
  295. $offset = 0;
  296. $encoding = 'UTF-8';
  297. $res = api_strpos($haystack, $needle, $offset, $encoding);
  298. $this->assertTrue(is_numeric($res)|| is_bool($res));
  299. $this->assertTrue($res == 1);
  300. //var_dump($res);
  301. }
  302. public function test_api_strrchr() {
  303. $haystack = 'aviación aviación'; // UTF-8
  304. $needle = 'ó';
  305. $part = false;
  306. $encoding = 'UTF-8';
  307. $res = api_strrchr($haystack, $needle, $part, $encoding);
  308. $this->assertTrue(is_string($res)|| is_bool($res));
  309. $this->assertTrue($res == 'ón');
  310. //var_dump($res);
  311. }
  312. public function test_api_strrev() {
  313. $string = 'áéíóúº|\/?Ç][ç]'; // UTF-8
  314. $encoding = 'UTF-8';
  315. $res = api_strrev($string, $encoding);
  316. $this->assertTrue(is_string($res));
  317. $this->assertTrue($res == ']ç[]Ç?/\|ºúóíéá');
  318. //var_dump($res);
  319. }
  320. public function test_api_strripos() {
  321. $haystack = 'aviación aviación'; // UTF-8
  322. $needle = 'Ó';
  323. $offset = 0;
  324. $encoding = 'UTF-8';
  325. $res = api_strripos($haystack, $needle, $offset, $encoding);
  326. $this->assertTrue(is_numeric($res) || is_bool($res));
  327. $this->assertTrue($res == 15);
  328. //var_dump($res);
  329. }
  330. public function test_api_strrpos() {
  331. $haystack = 'aviación aviación'; // UTF-8
  332. $needle = 'ó';
  333. $offset = 0;
  334. $encoding = 'UTF-8';
  335. $res = api_strrpos($haystack, $needle, $offset, $encoding);
  336. $this->assertTrue(is_numeric($res) || is_bool($res));
  337. $this->assertTrue($res == 15);
  338. //var_dump($res);
  339. }
  340. public function test_api_strstr() {
  341. $haystack = 'aviación'; // UTF-8
  342. $needle = 'ó';
  343. $part = false;
  344. $encoding = 'UTF-8';
  345. $res = api_strstr($haystack, $needle, $part, $encoding);
  346. $this->assertTrue(is_bool($res)|| is_string($res));
  347. $this->assertTrue($res == 'ón');
  348. //var_dump($res);
  349. }
  350. public function test_api_strtolower() {
  351. $string = 'áéíóúº|\/?Ç][ç]'; // UTF-8
  352. $encoding = 'UTF-8';
  353. $res = api_strtolower($string, $encoding);
  354. $this->assertTrue(is_string($res));
  355. $this->assertTrue($res == 'áéíóúº|\/?ç][ç]');
  356. //var_dump($res);
  357. }
  358. public function test_api_strtoupper() {
  359. $string='áéíóúº|\/?Ç][ç]'; // UTF-8
  360. $encoding = 'UTF-8';
  361. $res = api_strtoupper($string, $encoding);
  362. $this->assertTrue(is_string($res));
  363. $this->assertTrue($res =='ÁÉÍÓÚº|\/?Ç][Ç]');
  364. //var_dump($res);
  365. }
  366. public function test_api_substr() {
  367. $string = 'áéíóúº|\/?Ç][ç]'; // UTF-8
  368. $start = 10;
  369. $length = 4;
  370. $encoding = 'UTF-8';
  371. $res = api_substr($string, $start, $length, $encoding);
  372. $this->assertTrue(is_string($res));
  373. $this->assertTrue($res == 'Ç][ç');
  374. //var_dump($res);
  375. }
  376. public function test_api_substr_replace() {
  377. $string = 'áéíóúº|\/?Ç][ç]'; // UTF-8
  378. $replacement = 'eiou';
  379. $start= 1;
  380. $length = 4;
  381. $encoding = 'UTF-8';
  382. $res = api_substr_replace($string, $replacement, $start, $length, $encoding);
  383. $this->assertTrue(is_string($res));
  384. $this->assertTrue($res == 'áeiouº|\/?Ç][ç]');
  385. //var_dump($res);
  386. }
  387. public function test_api_ucfirst() {
  388. $string = 'áéíóúº|\/? xx ][ xx ]'; // UTF-8
  389. $encoding = 'UTF-8';
  390. $res = api_ucfirst($string, $encoding);
  391. $this->assertTrue($res);
  392. $this->assertTrue(is_string($res));
  393. $this->assertTrue($res == 'Áéíóúº|\/? xx ][ xx ]');
  394. //var_dump($res);
  395. }
  396. public function test_api_ucwords() {
  397. $string = 'áéíóúº|\/? xx ][ xx ]'; // UTF-8
  398. $encoding = 'UTF-8';
  399. $res = api_ucwords($string, $encoding);
  400. $this->assertTrue($res);
  401. $this->assertTrue(is_string($res));
  402. $this->assertTrue($res == 'Áéíóúº|\/? Xx ][ Xx ]');
  403. //var_dump($res);
  404. }
  405. /**
  406. * ----------------------------------------------------------------------------
  407. * String operations using regular expressions
  408. * ----------------------------------------------------------------------------
  409. */
  410. public function test_api_preg_match() {
  411. $pattern = '/иван/i'; // UTF-8
  412. $subject = '-- Ivan (en) -- Иван (bg) --'; // UTF-8
  413. $matches = null;
  414. $flags = 0;
  415. $offset = 0;
  416. $encoding = 'UTF-8';
  417. $res = api_preg_match($pattern, $subject, $matches, $flags, $offset, $encoding);
  418. $this->assertTrue($res == 1);
  419. //var_dump($res);
  420. //var_dump($matches);
  421. }
  422. public function test_api_preg_match_all() {
  423. $pattern = '/иван/i'; // UTF-8
  424. $subject = '-- Ivan (en) -- Иван (bg) -- иван --'; // UTF-8
  425. $matches = null;
  426. $flags = PREG_PATTERN_ORDER;
  427. $offset = 0;
  428. $encoding = 'UTF-8';
  429. $res = api_preg_match_all($pattern, $subject, $matches, $flags, $offset, $encoding);
  430. $this->assertTrue($res == 2);
  431. //var_dump($res);
  432. //var_dump($matches);
  433. }
  434. public function test_api_preg_replace() {
  435. $pattern = '/иван/i'; // UTF-8
  436. $replacement = 'ИВАН'; // UTF-8
  437. $subject = '-- Ivan (en) -- Иван (bg) -- иван --'; // UTF-8
  438. $limit = -1;
  439. $count = null;
  440. $encoding = 'UTF-8';
  441. $res = api_preg_replace($pattern, $replacement, $subject, $limit, $count, $encoding);
  442. $this->assertTrue($res == '-- Ivan (en) -- ИВАН (bg) -- ИВАН --'); // UTF-8
  443. //var_dump($res);
  444. }
  445. public function test_api_preg_replace_callback() {
  446. $pattern = '/иван/i'; // UTF-8
  447. $subject = '-- Ivan (en) -- Иван (bg) -- иван --'; // UTF-8
  448. $limit = -1;
  449. $count = null;
  450. $encoding = 'UTF-8';
  451. $res = api_preg_replace_callback($pattern, create_function('$matches', 'return api_ucfirst($matches[0], \'UTF-8\');'), $subject, $limit, $count, $encoding);
  452. $this->assertTrue($res == '-- Ivan (en) -- Иван (bg) -- Иван --'); // UTF-8
  453. //var_dump($res);
  454. }
  455. public function test_api_preg_split() {
  456. $pattern = '/иван/i'; // UTF-8
  457. $subject = '-- Ivan (en) -- Иван (bg) -- иван --'; // UTF-8
  458. $limit = -1;
  459. $count = null;
  460. $encoding = 'UTF-8';
  461. $res = api_preg_split($pattern, $subject, $limit, $count, $encoding);
  462. $this->assertTrue($res[0] == '-- Ivan (en) -- '); // UTF-8
  463. //var_dump($res);
  464. }
  465. /**
  466. * ----------------------------------------------------------------------------
  467. * Obsolete string operations using regular expressions, to be deprecated
  468. * ----------------------------------------------------------------------------
  469. */
  470. public function test_api_ereg() {
  471. $pattern = 'scorm/showinframes.php([^"\'&]*)(&|&amp;)file=([^"\'&]*)$';
  472. $string = 'http://localhost/dokeos/main/scorm/showinframes.php?id=5&amp;file=test.php';
  473. $regs = array();
  474. $res = api_ereg($pattern, $string, $regs);
  475. $this->assertTrue(is_numeric($res));
  476. //var_dump($regs);
  477. //var_dump($res);
  478. }
  479. public function test_api_ereg_replace() {
  480. $pattern = 'file=([^"\'&]*)$';
  481. $string = 'http://localhost/dokeos/main/scorm/showinframes.php?id=5&amp;file=test.php';
  482. $replacement = 'file=my_test.php';
  483. $option = null;
  484. $res = api_ereg_replace($pattern, $replacement, $string, $option);
  485. $this->assertTrue(is_string($res));
  486. $this->assertTrue(strlen($res) == 77);
  487. //var_dump($res);
  488. }
  489. public function test_api_eregi() {
  490. $pattern = 'scorm/showinframes.php([^"\'&]*)(&|&amp;)file=([^"\'&]*)$';
  491. $string = 'http://localhost/dokeos/main/scorm/showinframes.php?id=5&amp;file=test.php';
  492. $regs = array();
  493. $res = api_eregi($pattern, $string, $regs);
  494. $this->assertTrue(is_numeric($res));
  495. //var_dump($regs);
  496. //var_dump($res);
  497. }
  498. public function test_api_eregi_replace() {
  499. $pattern = 'file=([^"\'&]*)$';
  500. $string = 'http://localhost/dokeos/main/scorm/showinframes.php?id=5&amp;file=test.php';
  501. $replacement = 'file=my_test.php';
  502. $option = null;
  503. $res = api_eregi_replace($pattern, $replacement, $string, $option);
  504. $this->assertTrue(is_string($res));
  505. $this->assertTrue(strlen($res) == 77);
  506. //var_dump($res);
  507. }
  508. public function test_api_split() {
  509. $pattern = '[/.-]';
  510. $string = '08/22/2009';
  511. $limit = null;
  512. $res = api_split($pattern, $string, $limit);
  513. $this->assertTrue(is_array($res));
  514. $this->assertTrue(count($res) == 3);
  515. //var_dump($res);
  516. }
  517. /**
  518. * ----------------------------------------------------------------------------
  519. * String comparison
  520. * ----------------------------------------------------------------------------
  521. */
  522. public function test_api_strcasecmp() {
  523. $string1 = 'áéíóu'; // UTF-8
  524. $string2 = 'Áéíóu'; // UTF-8
  525. $language = 'english';
  526. $encoding = 'UTF-8';
  527. $res = api_strcasecmp($string1, $string2, $language, $encoding);
  528. $this->assertTrue(is_numeric($res));
  529. $this->assertTrue($res == 0);
  530. //var_dump($res);
  531. }
  532. public function test_api_strcmp() {
  533. $string1 = 'áéíóu'; // UTF-8
  534. $string2 = 'Áéíóu'; // UTF-8
  535. $language = 'english';
  536. $encoding = 'UTF-8';
  537. $res = api_strcmp($string1, $string2, $language, $encoding);
  538. $this->assertTrue(is_numeric($res));
  539. $this->assertTrue($res == 1);
  540. //var_dump($res);
  541. }
  542. public function test_api_strnatcasecmp() {
  543. $string1 = '201áéíóu.txt'; // UTF-8
  544. $string2 = '30Áéíóu.TXT'; // UTF-8
  545. $language = 'english';
  546. $encoding = 'UTF-8';
  547. $res = api_strnatcasecmp($string1, $string2, $language, $encoding);
  548. $this->assertTrue(is_numeric($res));
  549. $this->assertTrue($res == 1);
  550. //var_dump($res);
  551. }
  552. public function test_api_strnatcmp() {
  553. $string1 = '201áéíóu.txt'; // UTF-8
  554. $string2 = '30áéíóu.TXT'; // UTF-8
  555. $language = 'english';
  556. $encoding = 'UTF-8';
  557. $res = api_strnatcmp($string1, $string2, $language, $encoding);
  558. $this->assertTrue(is_numeric($res));
  559. $this->assertTrue($res == 1);
  560. //var_dump($res);
  561. }
  562. /**
  563. * ----------------------------------------------------------------------------
  564. * Sorting arrays
  565. * ----------------------------------------------------------------------------
  566. */
  567. public function test_api_asort() {
  568. $array = array('úéo', 'aíó', 'áed'); // UTF-8
  569. $sort_flag = SORT_REGULAR;
  570. $language = 'english';
  571. $encoding = 'UTF-8';
  572. $res = api_asort($array, $sort_flag, $language, $encoding);
  573. $keys = array_keys($array);
  574. $this->assertTrue(is_bool($res));
  575. $this->assertTrue($array[$keys[0]] == 'aíó' || $array[$keys[0]] == 'áed'); // The second result is given when intl php-extension is active.
  576. //var_dump($array);
  577. //var_dump($res);
  578. }
  579. public function test_api_arsort() {
  580. $array = array('aíó', 'úéo', 'áed'); // UTF-8
  581. $sort_flag = SORT_REGULAR;
  582. $language = 'english';
  583. $encoding = 'UTF-8';
  584. $res = api_arsort($array, $sort_flag, $language, $encoding);
  585. $keys = array_keys($array);
  586. $this->assertTrue(is_bool($res));
  587. $this->assertTrue($array[$keys[0]] == 'úéo');
  588. //var_dump($array);
  589. //var_dump($res);
  590. }
  591. public function test_api_natsort() {
  592. $array = array('img12.png', 'img10.png', 'img2.png', 'img1.png'); // UTF-8
  593. $language = 'english';
  594. $encoding = 'UTF-8';
  595. $res = api_natsort($array, $language, $encoding);
  596. $keys = array_keys($array);
  597. $this->assertTrue(is_bool($res));
  598. $this->assertTrue($array[$keys[0]] == 'img1.png');
  599. //var_dump($array);
  600. //var_dump($res);
  601. }
  602. public function test_api_natrsort() {
  603. $array = array('img2.png', 'img10.png', 'img12.png', 'img1.png'); // UTF-8
  604. $language = 'english';
  605. $encoding = 'UTF-8';
  606. $res = api_natrsort($array, $language, $encoding);
  607. $keys = array_keys($array);
  608. $this->assertTrue(is_bool($res));
  609. $this->assertTrue($array[$keys[0]] == 'img12.png');
  610. //var_dump($array);
  611. //var_dump($res);
  612. }
  613. public function test_api_natcasesort() {
  614. $array = array('img2.png', 'img10.png', 'Img12.png', 'img1.png'); // UTF-8
  615. $language = 'english';
  616. $encoding = 'UTF-8';
  617. $res = api_natcasesort($array, $language, $encoding);
  618. $keys = array_keys($array);
  619. $this->assertTrue(is_bool($res));
  620. $this->assertTrue($array[$keys[0]] == 'img1.png');
  621. //var_dump($array);
  622. //var_dump($res);
  623. }
  624. public function test_api_natcasersort() {
  625. $array = array('img2.png', 'img10.png', 'Img12.png', 'img1.png'); // UTF-8
  626. $language = 'english';
  627. $encoding = 'UTF-8';
  628. $res = api_natcasersort($array, $language, $encoding);
  629. $keys = array_keys($array);
  630. $this->assertTrue(is_bool($res));
  631. $this->assertTrue($array[$keys[0]] == 'Img12.png');
  632. //var_dump($array);
  633. //var_dump($res);
  634. }
  635. public function test_api_ksort() {
  636. $array = array('aíó' => 'img2.png', 'úéo' => 'img10.png', 'áed' => 'img12.png', 'áedc' => 'img1.png'); // UTF-8
  637. $sort_flag = SORT_REGULAR;
  638. $language = 'english';
  639. $encoding = 'UTF-8';
  640. $res = api_ksort($array, $sort_flag, $language, $encoding);
  641. $keys = array_keys($array);
  642. $this->assertTrue(is_bool($res));
  643. $this->assertTrue($array[$keys[0]] == 'img2.png');
  644. //var_dump($array);
  645. //var_dump($res);
  646. }
  647. public function test_api_krsort() {
  648. $array = array('aíó' => 'img2.png', 'úéo' => 'img10.png', 'áed' => 'img12.png', 'áedc' => 'img1.png'); // UTF-8
  649. $sort_flag = SORT_REGULAR;
  650. $language = 'english';
  651. $encoding = 'UTF-8';
  652. $res = api_krsort($array, $sort_flag, $language, $encoding);
  653. $keys = array_keys($array);
  654. $this->assertTrue(is_bool($res));
  655. $this->assertTrue($array[$keys[0]] == 'img10.png');
  656. //var_dump($array);
  657. //var_dump($res);
  658. }
  659. public function test_api_knatsort() {
  660. $array = array('img2.png' => 'aíó', 'img10.png' => 'úéo', 'img12.png' => 'áed', 'img1.png' => 'áedc'); // UTF-8
  661. $language = 'english';
  662. $encoding = 'UTF-8';
  663. $res = api_knatsort($array, $language, $encoding);
  664. $keys = array_keys($array);
  665. $this->assertTrue(is_bool($res));
  666. $this->assertTrue($array[$keys[0]] == 'áedc');
  667. //var_dump($array);
  668. //var_dump($res);
  669. }
  670. public function test_api_knatrsort() {
  671. $array = array('img2.png' => 'aíó', 'img10.png' => 'úéo', 'IMG12.PNG' => 'áed', 'img1.png' => 'áedc'); // UTF-8
  672. $language = 'english';
  673. $encoding = 'UTF-8';
  674. $res = api_knatrsort($array, $language, $encoding);
  675. $keys = array_keys($array);
  676. $this->assertTrue(is_bool($res));
  677. $this->assertTrue($array[$keys[0]] == 'úéo' || $array[$keys[0]] == 'áed'); // The second result is given when intl php-extension is active.
  678. //var_dump($array);
  679. //var_dump($res);
  680. }
  681. public function test_api_knatcasesort() {
  682. $array = array('img2.png' => 'aíó', 'img10.png' => 'úéo', 'IMG12.PNG' => 'áed', 'img1.png' => 'áedc'); // UTF-8
  683. $language = 'english';
  684. $encoding = 'UTF-8';
  685. $res = api_knatcasesort($array, $language, $encoding);
  686. $keys = array_keys($array);
  687. $this->assertTrue(is_bool($res));
  688. $this->assertTrue($array[$keys[0]] == 'áedc');
  689. //var_dump($array);
  690. //var_dump($res);
  691. }
  692. public function test_api_knatcasersort() {
  693. $array = array('img2.png' => 'aíó', 'img10.png' => 'úéo', 'IMG12.PNG' => 'áed', 'IMG1.PNG' => 'áedc'); // UTF-8
  694. $language = 'english';
  695. $encoding = 'UTF-8';
  696. $res = api_knatcasersort($array, $language, $encoding);
  697. $keys = array_keys($array);
  698. $this->assertTrue(is_bool($res));
  699. $this->assertTrue($array[$keys[0]] == 'áed');
  700. //var_dump($array);
  701. //var_dump($res);
  702. }
  703. public function test_api_sort() {
  704. $array = array('úéo', 'aíó', 'áed', 'áedc'); // UTF-8
  705. $sort_flag = SORT_REGULAR;
  706. $language = 'english';
  707. $encoding = 'UTF-8';
  708. $res = api_sort($array, $sort_flag, $language, $encoding);
  709. $this->assertTrue(is_bool($res));
  710. $this->assertTrue($array[0] == 'aíó' || $array[0] == 'áed'); // The second result is given when intl php-extension is active.
  711. //var_dump($array);
  712. //var_dump($res);
  713. }
  714. public function testapi_rsort() {
  715. $array = array('aíó', 'úéo', 'áed', 'áedc'); // UTF-8
  716. $sort_flag = SORT_REGULAR;
  717. $language = 'english';
  718. $encoding = 'UTF-8';
  719. $res = api_rsort($array, $sort_flag, $language, $encoding);
  720. $this->assertTrue(is_bool($res));
  721. $this->assertTrue($array[0] == 'úéo');
  722. //var_dump($array);
  723. //var_dump($res);
  724. }
  725. /**
  726. * ----------------------------------------------------------------------------
  727. * Common sting operations with arrays
  728. * ----------------------------------------------------------------------------
  729. */
  730. public function test_api_in_array_nocase() {
  731. $needle = 'áéíó'; // UTF-8
  732. $haystack = array('Áéíó', 'uáé', 'íóú'); // UTF-8
  733. $strict = false;
  734. $encoding = 'UTF-8';
  735. $res = api_in_array_nocase($needle, $haystack, $strict, $encoding);
  736. $this->assertTrue(is_bool($res));
  737. $this->assertTrue($res === true);
  738. //var_dump($res);
  739. }
  740. /**
  741. * ----------------------------------------------------------------------------
  742. * Encoding management functions
  743. * ----------------------------------------------------------------------------
  744. */
  745. public function test_api_refine_encoding_id() {
  746. $encoding = 'koI8-r';
  747. $res = api_refine_encoding_id($encoding);
  748. $this->assertTrue($res);
  749. $this->assertTrue(is_string($res));
  750. $this->assertTrue($res == 'KOI8-R');
  751. //var_dump($res);
  752. }
  753. public function test_api_equal_encodings() {
  754. $encoding1 = 'cp65001';
  755. $encoding2 = 'utf-8';
  756. $encoding3 = 'WINDOWS-1251';
  757. $encoding4 = 'WINDOWS-1252';
  758. $encoding5 = 'win-1250';
  759. $encoding6 = 'windows-1250';
  760. $res1 = api_equal_encodings($encoding1, $encoding2);
  761. $res2 = api_equal_encodings($encoding3, $encoding4);
  762. $res3 = api_equal_encodings($encoding5, $encoding6);
  763. $res4 = api_equal_encodings($encoding5, $encoding6, true);
  764. $this->assertTrue(is_bool($res1));
  765. $this->assertTrue(is_bool($res2));
  766. $this->assertTrue(is_bool($res3));
  767. $this->assertTrue(is_bool($res4));
  768. $this->assertTrue($res1);
  769. $this->assertTrue(!$res2);
  770. $this->assertTrue($res3);
  771. $this->assertTrue(!$res4);
  772. //var_dump($res1);
  773. //var_dump($res2);
  774. //var_dump($res3);
  775. //var_dump($res4);
  776. }
  777. public function test_api_is_utf8() {
  778. $encoding = 'cp65001'; // This an alias of UTF-8.
  779. $res = api_is_utf8($encoding);
  780. $this->assertTrue(is_bool($res));
  781. $this->assertTrue($res);
  782. //var_dump($res);
  783. }
  784. public function test_api_is_latin1() {
  785. $encoding = 'ISO-8859-15';
  786. $strict = false;
  787. $res = api_is_latin1($encoding, false);
  788. $this->assertTrue(is_bool($res));
  789. $this->assertTrue($res);
  790. //var_dump($res);
  791. }
  792. public function test_api_get_system_encoding() {
  793. $res = api_get_system_encoding();
  794. $this->assertTrue(is_string($res));
  795. $this->assertTrue($res);
  796. //var_dump($res);
  797. }
  798. public function test_api_get_file_system_encoding() {
  799. $res = api_get_file_system_encoding();
  800. $this->assertTrue(is_string($res));
  801. $this->assertTrue($res);
  802. //var_dump($res);
  803. }
  804. public function test_api_is_encoding_supported() {
  805. $encoding1 = 'UTF-8';
  806. $encoding2 = 'XXXX#%#%VR^%BBDNdjlrsg;d';
  807. $res1 = api_is_encoding_supported($encoding1);
  808. $res2 = api_is_encoding_supported($encoding2);
  809. $this->assertTrue(is_bool($res1) && is_bool($res2));
  810. $this->assertTrue($res1 && !$res2);
  811. //var_dump($res1);
  812. //var_dump($res2);
  813. }
  814. public function test_api_get_non_utf8_encoding() {
  815. $language = 'bulgarian';
  816. $res = api_get_non_utf8_encoding($language);
  817. $this->assertTrue($res);
  818. $this->assertTrue(is_string($res));
  819. $this->assertTrue($res == 'WINDOWS-1251');
  820. //var_dump($res);
  821. }
  822. public function test_api_get_valid_encodings() {
  823. $res = api_get_valid_encodings();
  824. $ok = is_array($res) && !empty($res);
  825. $this->assertTrue($ok);
  826. if ($ok) {
  827. foreach ($res as $value) {
  828. $ok = $ok && is_string($value);
  829. }
  830. $this->assertTrue($ok);
  831. }
  832. //var_dump($res);
  833. }
  834. public function test_api_detect_encoding_html() {
  835. $meta = '<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />'."\n";
  836. $head1 = '<head>'."\n".'<title>Sample Document</title>'."\n".'</head>'."\n";
  837. $head2 = '<head>'."\n".'<title>Sample Document</title>'."\n".$meta.'</head>'."\n";
  838. $body1 = '<p>This is a sample document for testing encoding detection.</p>'."\n";
  839. $body2 = '<body>'."\n".$body1.'</body>';
  840. $html1 = $body1; // A html-snippet, see for example some log-files created by the "Chat" tool.
  841. $html2 = '<html>'."\n".$head1.$body2."\n".'</html>'; // A full html-document, no encoding has been declared.
  842. $html3 = '<html>'."\n".$head2.$body2."\n".'</html>'; // A full html-document, encoding has been declared.
  843. $res1 = api_detect_encoding_html($html1);
  844. $res2 = api_detect_encoding_html($html2);
  845. $res3 = api_detect_encoding_html($html3);
  846. $this->assertTrue(
  847. $res1 === 'UTF-8'
  848. && $res2 === 'UTF-8'
  849. && $res3 === 'ISO-8859-15'
  850. );
  851. //var_dump($res1);
  852. //var_dump($res2);
  853. //var_dump($res3);
  854. }
  855. public function test_api_detect_encoding_xml() {
  856. $xml1 = '
  857. <Users>
  858. <User>
  859. <Username>username1</Username>
  860. <Lastname>xxx</Lastname>
  861. <Firstname>xxx</Firstname>
  862. <Password>xxx</Password>
  863. <Email>xxx@xx.xx</Email>
  864. <OfficialCode>xxx</OfficialCode>
  865. <Phone>xxx</Phone>
  866. <Status>student</Status>
  867. </User>
  868. </Users>'; // US-ASCII
  869. $xml2 = '<?xml version="1.0" encoding="ISO-8859-15"?>'.$xml1;
  870. $xml3 = '<?xml version="1.0" encoding="utf-8"?>'.$xml1;
  871. $xml4 = str_replace('<Lastname>xxx</Lastname>', '<Lastname>x'.chr(192).'x</Lastname>', $xml1); // A non-UTF-8 character has been inserted.
  872. $res1 = api_detect_encoding_xml($xml1);
  873. $res2 = api_detect_encoding_xml($xml2);
  874. $res3 = api_detect_encoding_xml($xml3);
  875. $res4 = api_detect_encoding_xml($xml4);
  876. $res5 = api_detect_encoding_xml($xml4, 'windows-1251');
  877. $this->assertTrue(
  878. $res1 === 'UTF-8'
  879. && $res2 === 'ISO-8859-15'
  880. && $res3 === 'UTF-8'
  881. && api_equal_encodings($res4, api_get_system_encoding())
  882. && $res5 === 'WINDOWS-1251'
  883. );
  884. //var_dump($res1);
  885. //var_dump($res2);
  886. //var_dump($res3);
  887. //var_dump($res4);
  888. //var_dump($res5);
  889. }
  890. public function test_api_convert_encoding_xml() {
  891. $xml = '
  892. <?xml version="1.0" encoding="UTF-8"?>
  893. <Users>
  894. <User>
  895. <Username>username1</Username>
  896. <Lastname>xxx</Lastname>
  897. <Firstname>Иван</Firstname>
  898. <Password>xxx</Password>
  899. <Email>xxx@xx.xx</Email>
  900. <OfficialCode>xxx</OfficialCode>
  901. <Phone>xxx</Phone>
  902. <Status>student</Status>
  903. </User>
  904. </Users>'; // UTF-8
  905. $res1 = api_convert_encoding_xml($xml, 'WINDOWS-1251', 'UTF-8');
  906. $res2 = api_convert_encoding_xml($xml, 'WINDOWS-1251');
  907. $res3 = api_convert_encoding_xml($res1, 'UTF-8', 'WINDOWS-1251');
  908. $res4 = api_convert_encoding_xml($res2, 'UTF-8');
  909. $this->assertTrue(
  910. $res3 === $xml
  911. && $res4 === $xml
  912. );
  913. //var_dump(preg_replace(array('/\r?\n/m', '/\t/m'), array('<br />', '&nbsp;&nbsp;&nbsp;&nbsp;'), htmlspecialchars($res1)));
  914. //var_dump(preg_replace(array('/\r?\n/m', '/\t/m'), array('<br />', '&nbsp;&nbsp;&nbsp;&nbsp;'), htmlspecialchars($res2)));
  915. //var_dump(preg_replace(array('/\r?\n/m', '/\t/m'), array('<br />', '&nbsp;&nbsp;&nbsp;&nbsp;'), htmlspecialchars($res3)));
  916. //var_dump(preg_replace(array('/\r?\n/m', '/\t/m'), array('<br />', '&nbsp;&nbsp;&nbsp;&nbsp;'), htmlspecialchars($res4)));
  917. }
  918. public function test_api_utf8_encode_xml() {
  919. $xml1 = '
  920. <?xml version="1.0" encoding="UTF-8"?>
  921. <Users>
  922. <User>
  923. <Username>username1</Username>
  924. <Lastname>xxx</Lastname>
  925. <Firstname>Иван</Firstname>
  926. <Password>xxx</Password>
  927. <Email>xxx@xx.xx</Email>
  928. <OfficialCode>xxx</OfficialCode>
  929. <Phone>xxx</Phone>
  930. <Status>student</Status>
  931. </User>
  932. </Users>'; // UTF-8
  933. $xml2 = '
  934. <?xml version="1.0" encoding="WINDOWS-1251"?>
  935. <Users>
  936. <User>
  937. <Username>username1</Username>
  938. <Lastname>xxx</Lastname>
  939. <Firstname>'.chr(200).chr(226).chr(224).chr(237).'</Firstname>
  940. <Password>xxx</Password>
  941. <Email>xxx@xx.xx</Email>
  942. <OfficialCode>xxx</OfficialCode>
  943. <Phone>xxx</Phone>
  944. <Status>student</Status>
  945. </User>
  946. </Users>'; // WINDOWS-1251
  947. $res1 = api_utf8_encode_xml($xml2);
  948. $this->assertTrue($res1 === $xml1);
  949. //var_dump(preg_replace(array('/\r?\n/m', '/\t/m'), array('<br />', '&nbsp;&nbsp;&nbsp;&nbsp;'), htmlspecialchars($res1)));
  950. }
  951. public function test_api_utf8_decode_xml() {
  952. $xml1 = '
  953. <?xml version="1.0" encoding="UTF-8"?>
  954. <Users>
  955. <User>
  956. <Username>username1</Username>
  957. <Lastname>xxx</Lastname>
  958. <Firstname>Иван</Firstname>
  959. <Password>xxx</Password>
  960. <Email>xxx@xx.xx</Email>
  961. <OfficialCode>xxx</OfficialCode>
  962. <Phone>xxx</Phone>
  963. <Status>student</Status>
  964. </User>
  965. </Users>'; // UTF-8
  966. $xml2 = '
  967. <?xml version="1.0" encoding="WINDOWS-1251"?>
  968. <Users>
  969. <User>
  970. <Username>username1</Username>
  971. <Lastname>xxx</Lastname>
  972. <Firstname>'.chr(200).chr(226).chr(224).chr(237).'</Firstname>
  973. <Password>xxx</Password>
  974. <Email>xxx@xx.xx</Email>
  975. <OfficialCode>xxx</OfficialCode>
  976. <Phone>xxx</Phone>
  977. <Status>student</Status>
  978. </User>
  979. </Users>'; // WINDOWS-1251
  980. $res1 = api_utf8_decode_xml($xml1, 'WINDOWS-1251');
  981. $this->assertTrue($res1 === $xml2);
  982. //var_dump(preg_replace(array('/\r?\n/m', '/\t/m'), array('<br />', '&nbsp;&nbsp;&nbsp;&nbsp;'), htmlspecialchars($res1)));
  983. }
  984. /**
  985. * ----------------------------------------------------------------------------
  986. * String validation functions concerning certain encodings
  987. * ----------------------------------------------------------------------------
  988. */
  989. public function test_api_is_valid_utf8() {
  990. $string = 'áéíóú1@\/-ḉ`´';
  991. $res = api_is_valid_utf8($string);
  992. $this->assertTrue(is_bool($res));
  993. $this->assertTrue($res);
  994. //var_dump($res);
  995. }
  996. public function test_api_is_valid_ascii() {
  997. $string = 'áéíóú'; // UTF-8
  998. $res = api_is_valid_ascii($string);
  999. $this->assertTrue(is_bool($res));
  1000. $this->assertTrue(!$res);
  1001. //var_dump($res);
  1002. }
  1003. /**
  1004. * ----------------------------------------------------------------------------
  1005. * Language management functions
  1006. * ----------------------------------------------------------------------------
  1007. */
  1008. public function test_api_is_language_supported() {
  1009. $language1 = 'english';
  1010. $language2 = 'english_org';
  1011. $language3 = 'EnGlIsh';
  1012. $language4 = 'EnGlIsh_oRg';
  1013. $language5 = 'french';
  1014. $language6 = 'french_corporate';
  1015. $language7 = 'frEncH';
  1016. $language8 = 'freNch_corPorAte';
  1017. $language9 = 'xxxxxxxxxxxxxx';
  1018. $res1 = api_is_language_supported($language1);
  1019. $res2 = api_is_language_supported($language2);
  1020. $res3 = api_is_language_supported($language3);
  1021. $res4 = api_is_language_supported($language4);
  1022. $res5 = api_is_language_supported($language5);
  1023. $res6 = api_is_language_supported($language6);
  1024. $res7 = api_is_language_supported($language7);
  1025. $res8 = api_is_language_supported($language8);
  1026. $res9 = api_is_language_supported($language9);
  1027. $this->assertTrue(
  1028. $res1 === true
  1029. && $res2 === true
  1030. && $res3 === true
  1031. && $res4 === true
  1032. && $res5 === true
  1033. && $res6 === true
  1034. && $res7 === true
  1035. && $res8 === true
  1036. && $res9 === false
  1037. );
  1038. //var_dump($res1);
  1039. //var_dump($res2);
  1040. //var_dump($res3);
  1041. //var_dump($res4);
  1042. //var_dump($res5);
  1043. //var_dump($res6);
  1044. //var_dump($res7);
  1045. //var_dump($res8);
  1046. //var_dump($res9);
  1047. }
  1048. public function test_api_get_valid_language() {
  1049. $enabled_languages_info = api_get_languages();
  1050. $enabled_languages = $enabled_languages_info['folder'];
  1051. $language = array();
  1052. $language[] = ' '.strtoupper(api_get_interface_language()).' ';
  1053. $language[] = " \t ".strtoupper(api_get_setting('platformLanguage'))." \t ";
  1054. $language[] = 'xxxxxxxxxxxxxx';
  1055. $language[] = ' \t'.strtoupper('bulgarian').' ';
  1056. $res = array();
  1057. $res[] = api_get_valid_language($language[1]);
  1058. $res[] = api_get_valid_language($language[2]);
  1059. $res[] = api_get_valid_language($language[3]);
  1060. $res[] = api_get_valid_language($language[4]);
  1061. $expected = array();
  1062. foreach ($language as $value) {
  1063. $value = str_replace('_km', '_KM', strtolower(trim($value)));
  1064. if (empty($value) || !in_array($value, $enabled_languages) || !api_is_language_supported($value)) {
  1065. $value = api_get_setting('platformLanguage');
  1066. }
  1067. $expected = $value;
  1068. }
  1069. $is_ok = true;
  1070. foreach ($language as $key => $value) {
  1071. $is_ok = $is_ok && ($value === $res[$key]);
  1072. }
  1073. //var_dump($res);
  1074. //var_dump($expected);
  1075. }
  1076. public function test_api_purify_language_id() {
  1077. $language = 'english_org';
  1078. $res = api_purify_language_id($language);
  1079. $this->assertTrue(is_string($res));
  1080. $this->assertTrue($res == 'english');
  1081. //var_dump($res);
  1082. }
  1083. function test_api_get_language_isocode() {
  1084. $test_language_table = array(
  1085. '*** invalid entry ***' => 'en', // An invalid entry.
  1086. 'arabic' => 'ar',
  1087. 'arabic_unicode' => 'ar',
  1088. 'asturian' => 'ast',
  1089. 'bosnian' => 'bs',
  1090. 'brazilian' => 'pt-BR',
  1091. 'bulgarian' => 'bg',
  1092. 'catalan' => 'ca',
  1093. 'croatian' => 'hr',
  1094. 'czech' => 'cs',
  1095. 'danish' => 'da',
  1096. 'dari' => 'prs',
  1097. 'dutch' => 'nl',
  1098. 'dutch_corporate' => 'nl',
  1099. 'english' => 'en',
  1100. 'english_org' => 'en',
  1101. 'esperanto' => 'eo',
  1102. 'euskera' => 'eu',
  1103. 'finnish' => 'fi',
  1104. 'french' => 'fr',
  1105. 'french_corporate' => 'fr',
  1106. 'french_KM' => 'fr',
  1107. 'french_org' => 'fr',
  1108. 'french_unicode' => 'fr',
  1109. 'friulian' => 'fur',
  1110. 'galician' => 'gl',
  1111. 'georgian' => 'ka',
  1112. 'german' => 'de',
  1113. 'greek' => 'el',
  1114. 'hebrew' => 'he',
  1115. 'hungarian' => 'hu',
  1116. 'indonesian' => 'id',
  1117. 'italian' => 'it',
  1118. 'japanese' => 'ja',
  1119. 'japanese_unicode' => 'ja',
  1120. 'korean' => 'ko',
  1121. 'latvian' => 'lv',
  1122. 'lithuanian' => 'lt',
  1123. 'macedonian' => 'mk',
  1124. 'malay' => 'ms',
  1125. 'norwegian' => 'no',
  1126. 'occitan' => 'oc',
  1127. 'pashto' => 'ps',
  1128. 'persian' => 'fa',
  1129. 'polish' => 'pl',
  1130. 'portuguese' => 'pt',
  1131. 'quechua_cusco' => 'qu',
  1132. 'romanian' => 'ro',
  1133. 'russian' => 'ru',
  1134. 'russian_unicode' => 'ru',
  1135. 'serbian' => 'sr',
  1136. 'simpl_chinese' => 'zh',
  1137. 'simpl_chinese_unicode' => 'zh',
  1138. 'slovak' => 'sk',
  1139. 'slovenian' => 'sl',
  1140. 'slovenian_unicode' => 'sl',
  1141. 'spanish' => 'es',
  1142. 'spanish_latin' => 'es',
  1143. 'swahili' => 'sw',
  1144. 'swedish' => 'sv',
  1145. 'thai' => 'th',
  1146. 'trad_chinese' => 'zh-TW',
  1147. 'trad_chinese_unicode' => 'zh-TW',
  1148. 'turkce' => 'tr',
  1149. 'ukrainian' => 'uk',
  1150. 'vietnamese' => 'vi',
  1151. 'yoruba' => 'yo'
  1152. );
  1153. $res = array();
  1154. foreach ($test_language_table as $language => $expected_result) {
  1155. $test_result = api_get_language_isocode($language);
  1156. $res[$language] = array(
  1157. 'expected_result' => $expected_result,
  1158. 'test_result' => $test_result,
  1159. 'is_ok' => $expected_result === $test_result
  1160. );
  1161. }
  1162. $this->assertTrue(is_array($res));
  1163. $is_ok = true;
  1164. foreach ($res as $language => $test_case) {
  1165. $is_ok = $is_ok && $test_case['is_ok'];
  1166. }
  1167. $this->assertTrue($is_ok);
  1168. //var_dump($res);
  1169. //foreach ($res as $language => $test_case) { echo ($test_case['is_ok'] ? '<span style="color: green; font-weight: bold;">Ok</span>' : '<span style="color: red; font-weight: bold;">Failed</span>').' '.$language.' => '.(is_null($test_case['test_result']) ? 'NULL' : $test_case['test_result']).'<br />'; }
  1170. }
  1171. public function test_api_get_text_direction() {
  1172. $languages = array('english', 'en', 'arabic', 'ar');
  1173. $expected_results = array('ltr', 'ltr', 'rtl', 'rtl');
  1174. $res = array();
  1175. foreach ($languages as $language) {
  1176. $res[] = api_get_text_direction($language);
  1177. }
  1178. $this->assertTrue($res === $expected_results);
  1179. //var_dump($res);
  1180. }
  1181. public function test_api_is_latin1_compatible() {
  1182. $language = 'portuguese';
  1183. $res = api_is_latin1_compatible($language);
  1184. $this->assertTrue(is_bool($res));
  1185. $this->assertTrue($res);
  1186. //var_dump($res);
  1187. }
  1188. /*
  1189. // This test works. It has been disabled, because it is time-consuming.
  1190. public function test_api_detect_language() {
  1191. $encoding = 'UTF-8';
  1192. $strings = $this->language_strings;
  1193. $is_test_ok = true;
  1194. foreach ($strings as $language => $string) {
  1195. if (api_is_language_supported($language)) {
  1196. $res = api_detect_language($string, $encoding);
  1197. $non_utf8_encoding = api_get_non_utf8_encoding($res);
  1198. if (!empty($non_utf8_encoding)) {
  1199. $is_ok = ($res == $language) || (api_is_encoding_supported($non_utf8_encoding) ? $string == api_utf8_encode(api_utf8_decode($string, $non_utf8_encoding), $non_utf8_encoding) : true);
  1200. } else {
  1201. $is_ok = true;
  1202. }
  1203. $is_test_ok = $is_test_ok && $is_ok;
  1204. echo ($is_ok ? '<span style="color: green; font-weight: bold;">Ok</span>' : '<span style="color: red; font-weight: bold;">Failed</span>').' '.$language.': '.$string.' => <strong>'.$res.'</strong><br />';
  1205. }
  1206. }
  1207. echo '<br />';
  1208. $this->assertTrue($is_test_ok);
  1209. }
  1210. */
  1211. /*
  1212. // This test works. It has been disabled, because it is time-consuming.
  1213. public function test_api_detect_encoding() {
  1214. $strings = $this->language_strings;
  1215. $is_test_ok = true;
  1216. foreach ($strings as $language => $string) {
  1217. if (api_is_language_supported($language)) {
  1218. $is_ok = api_is_utf8(api_detect_encoding($string)); // Checking whether the input string is UTF-8.
  1219. $is_test_ok = $is_test_ok && $is_ok;
  1220. $non_utf8_encoding = api_get_non_utf8_encoding($language);
  1221. if (!empty($non_utf8_encoding) && api_is_encoding_supported($non_utf8_encoding)) {
  1222. $res = api_detect_encoding(api_utf8_decode($string, $non_utf8_encoding));
  1223. $test_string = api_utf8_encode(api_utf8_decode($string, $non_utf8_encoding), $res);
  1224. $is_ok = api_equal_encodings($non_utf8_encoding, $res) || $string == $test_string;
  1225. echo $language.'<br />';
  1226. echo $string.'<br />';
  1227. echo $test_string.'<br />';
  1228. echo ($is_ok ? '<span style="color: green; font-weight: bold;">Ok</span>' : '<span style="color: red; font-weight: bold;">Failed</span>').' '.$non_utf8_encoding.' => <strong>'.$res.'</strong><br />';
  1229. echo '<br />';
  1230. } else {
  1231. $is_ok = true;
  1232. }
  1233. $is_test_ok = $is_test_ok && $is_ok;
  1234. }
  1235. }
  1236. $this->assertTrue($is_test_ok);
  1237. }
  1238. */
  1239. // The second function for testing api_detect_encoding().
  1240. public function test_api_detect_encoding_2() {
  1241. $string_utf8 = 'Това е тест на български език'; // Bulgarian language, UTF-8
  1242. $string_utf8_broken = $string_utf8.chr(198); // Intentionaly broken UTF-8, it should be detected as UTF-8
  1243. $res1 = api_detect_encoding($string_utf8, 'bulgarian');
  1244. $res2 = api_detect_encoding($string_utf8_broken, 'bulgarian');
  1245. $this->assertTrue(api_is_utf8($res1) && api_is_utf8($res2));
  1246. //var_dump($res1);
  1247. //var_dump($res2);
  1248. }
  1249. public function test_api_get_local_time_with_datetime() {
  1250. $datetime_not_converted = '2010-03-13 16:24:02';
  1251. $datetime_gmtplus1 = api_get_local_time($datetime_not_converted, 'Europe/Paris', 'America/Lima');
  1252. $this->assertEqual($datetime_gmtplus1, '2010-03-13 22:24:02');
  1253. }
  1254. public function test_api_get_local_time_with_timestamp() {
  1255. $current_timestamp = time();
  1256. $datetime = api_get_local_time($current_timestamp, 'Europe/Paris');
  1257. $system_timezone = date_default_timezone_get();
  1258. date_default_timezone_set('Europe/Paris');
  1259. $this->assertEqual($datetime, date('Y-m-d H:i:s', $current_timestamp));
  1260. date_default_timezone_set($system_timezone);
  1261. }
  1262. public function test_api_get_utc_datetime_with_string() {
  1263. $timestamp = time();
  1264. $timezone = _api_get_timezone();
  1265. $system_timezone = date_default_timezone_get();
  1266. date_default_timezone_set($timezone);
  1267. $datetime = date('Y-m-d H:i:s', $timestamp);
  1268. $datetime_utc = api_get_utc_datetime($datetime);
  1269. $this->assertEqual($datetime_utc, gmdate('Y-m-d H:i:s', $timestamp));
  1270. date_default_timezone_set($system_timezone);
  1271. }
  1272. public function test_api_get_utc_datetime_with_timestamp() {
  1273. $timestamp = time();
  1274. $this->assertEqual(api_get_utc_datetime($timestamp), gmdate("Y-m-d H:i:s", $timestamp));
  1275. }
  1276. /*
  1277. // Enable the following test when you need to run it.
  1278. // Testing whether all the language files load successfully. This means that their php-syntax is correct.
  1279. public function test_all_the_language_files() {
  1280. $files = array( // Only files with these names will be loaded/tested.
  1281. 'accessibility.inc.php',
  1282. 'admin.inc.php',
  1283. 'agenda.inc.php',
  1284. 'announcements.inc.php',
  1285. 'blog.inc.php',
  1286. 'chat.inc.php',
  1287. 'coursebackup.inc.php',
  1288. 'courses.inc.php',
  1289. 'course_description.inc.php',
  1290. 'course_home.inc.php',
  1291. 'course_info.inc.php',
  1292. 'create_course.inc.php',
  1293. 'document.inc.php',
  1294. 'dropbox.inc.php',
  1295. 'exercice.inc.php',
  1296. 'external_module.inc.php',
  1297. 'forum.inc.php',
  1298. 'glossary.inc.php',
  1299. 'gradebook.inc.php',
  1300. 'group.inc.php',
  1301. 'help.inc.php',
  1302. 'hotspot.inc.php',
  1303. 'import.inc.php',
  1304. 'index.inc.php',
  1305. 'install.inc.php',
  1306. 'learnpath.inc.php',
  1307. 'link.inc.php',
  1308. 'md_document.inc.php',
  1309. 'md_link.inc.php',
  1310. 'md_mix.inc.php',
  1311. 'md_scorm.inc.php',
  1312. 'messages.inc.php',
  1313. 'myagenda.inc.php',
  1314. 'notebook.inc.php',
  1315. 'notification.inc.php',
  1316. 'pedaSuggest.inc.php',
  1317. 'registration.inc.php',
  1318. 'reservation.inc.php',
  1319. 'resourcelinker.inc.php',
  1320. 'scorm.inc.php',
  1321. 'scormbuilder.inc.php',
  1322. 'scormdocument.inc.php',
  1323. 'slideshow.inc.php',
  1324. 'survey.inc.php',
  1325. 'tracking.inc.php',
  1326. 'trad4all.inc.php',
  1327. 'userInfo.inc.php',
  1328. 'videoconf.inc.php',
  1329. 'wiki.inc.php',
  1330. 'work.inc.php'
  1331. );
  1332. $languages = test_get_language_folder_list();
  1333. $lang_dir = api_get_path(SYS_LANG_PATH);
  1334. foreach ($languages as $language) {
  1335. echo 'Language: <strong>'.ucwords($language).'</strong><br />';
  1336. echo '-------------------------------------------------------------------------<br />';
  1337. foreach ($files as $file) {
  1338. echo 'Loading '.$lang_dir.$language.'/<strong>'.$file.'</strong> ...<br />';
  1339. test_load_php_language_file($lang_dir.$language.'/'.$file);
  1340. }
  1341. echo '<br />';
  1342. }
  1343. $this->assertTrue(true); // Once we arrived here, the test is Ok.
  1344. }
  1345. */
  1346. }
  1347. // An isolated namespace for testing whether language files load successfully.
  1348. function test_load_php_language_file($filename) {
  1349. include $filename;
  1350. }
  1351. // A helper function.
  1352. function test_get_language_folder_list() {
  1353. $result = array();
  1354. $exceptions = array('.', '..', 'CVS', '.svn');
  1355. $dirname = api_get_path(SYS_LANG_PATH);
  1356. $handle = opendir($dirname);
  1357. while ($entries = readdir($handle)) {
  1358. if (in_array($entries, $exceptions)) {
  1359. continue;
  1360. }
  1361. if (is_dir($dirname.$entries)) {
  1362. $result[] = $entries;
  1363. }
  1364. }
  1365. closedir($handle);
  1366. sort($result);
  1367. return $result;
  1368. }
  1369. ?>