....................................../////.===Shadow-Here===./////................................................ > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < > < ------------------------------------------------------------------------------------------------------------------- /////////////////////////////////////////////////////////////////////////////////////////////////////////////////// RIFF¤ WEBPVP8 ˜ ðÑ *ôô>‘HŸK¥¤"§£±¨àð enü¹%½_F‘åè¿2ºQú³íªú`N¿­3ÿƒügµJžaÿ¯ÿ°~¼ÎùnúîÞÖô•òíôÁÉß®Sm¥Ü/ ‡ó˜f£Ùà<˜„xëJ¢Ù€SO3x<ªÔ©4¿+ç¶A`q@Ì“Úñè™ÍÿJÌ´ª-˜ÆtÊÛL]Ïq*‘Ý”ì#ŸÌÏãY]@ê`¿ /ªfkØB4·®£ó z—Üw¥Pxù–ÞLШKÇN¾AkÙTf½è'‰g gÆv›Øuh~ a˜Z— ïj*á¥t d£“uÒ ¨`K˜¹ßþ]b>˜]_ÏÔ6W—è2r4x•íÖ…"ƒÖNîä!¦å Ú}ýxGøÌ —@ ;ÆÚŠ=ɾ1ý8lªË¥ô ^yf®Œ¢u&2©nÙÇ›ñÂñŒ³ aPo['½»øFùà­+4ê“$!lövlüÞ=;N®3ð‚õ›DÉKòÞ>ÄÍ ¥ˆuߤ#ˆ$6ù™¥îЇy’ÍB¼ çxÛ;X"WL£R÷͝*ó-¶Zu}º.s¸sšXqù–DþÿvªhüïwyŸ ¯é³lÀ:KCûÄ£Ëá\…­ ~—ýóî ¼ûûÜTÓüÇy…ŽÆvc»¾×U ñ¸žþоP÷¦ó:Ò¨¨5;Ð#&#ÖúñläÿÁœ GxÉ­/ñ‡áQðìYÉtÒw޼GÔ´zàÒò ð*ëzƒ•4~H]Ø‹f ñÓÈñ`NåWçs'ÆÏW^ø¹!XžµmQ5ÃËoLœÎ: ÞËÍ¥J ù…î èo£ßPÎñ¶ž8.Œ]ʵ~5›ÙË-ù*8ÙÖß±~ ©¹rÓê‚j¶d¸{^Q'˜±Crß ÚH—#¥¥QlÀ×ëã‡DÜ«èî þ&Çæžî;ŽÏºò6ÒLÃXy&ZŒ'j‚¢Ù€IßÚù+–MGi‰*jE€‘JcÜ ÓÌ EÏÚj]o˜ Þr <¾U ûŪæÍ/šÝH¥˜b”¼ ÁñßX GP›ï2›4WŠÏà×£…íÓk†¦H·ÅíMh–*nó÷à]ÁjCº€b7<ب‹¨5車bp2:Á[UªM„QŒçiNMa#<5›áËó¸HýÊ"…×Éw¹¦ì2º–x<›»a±¸3Weü®FÝ⑱ö–î–³|LPÈ~çð~Çå‡|º kD¢µÏàÆAI %1À% ¹Ò – ”ϝS¦‰4&¶£°à Öý”û_Ò Áw°A«Å€?mÇÛgHÉ/8)á¾ÛìáöŽP í¨PŸNÙµº¦‡§Ùš"ÿ«>+ªÕ`Ê÷‡‚ß Õû˜þãÇ-PÍ.¾XV‘€ dÜ"þ4¹ ±Oú‘©t¥¦FªÄÃÄ•b‚znýu½—#cDs˜ÃiÑOˆñ×QO=*IAÊ,¶ŽZƒ;‡wøXè%EÐk:F±Ú” .Ѽ+Áu&Ç`."pÈÉw o&¿dE6‘’EqTuK@Ì¥ã™À(Êk(h‰,H}RÀIXÛš3µ1©_OqÚÒJAñ$ÊÙÜ;D3çŒ[þùœh¬Ã³™ö6ç†NY".Ú‰ï[ªŸŒ '²Ð öø_¨ÂÉ9ué¶³ÒŠõTàîMØ#û¯gN‡bÙ놚X„ö …ÉeüÌ^J ‹€.œ$Æ)βÄeæW#óüßĺŸ€ ÀzwV 9oä»f4V*uB «Ë†¹ì¯žR霓æHXa=&“I4K;¯ç‹h×·"UŠ~<•╪Vêª&ÍSÃÆÅ?ÔqÎ*mTM ˜›µwêd#[C¡©§‘D<©àb†–ÁœøvH/,í:¯( ²£|4-„Æövv„Yͼ™^Á$ˆ„¢Û[6yB.åH*V¨æ?$=˜Ñ€•ñ·­(VlŸ‘ nÀt8W÷´Bûba?q9ú¶Xƒl«ÿ\ù¶’þòUÐj/õ¢Ìµ³g$ƒÎR!¸»|Oߍë’BhîÚÑ¢ñåŒJ„®„£2Ð3•ô02Nt…!£Í]Ïc½Qÿ?ˆ<&ÃA¾Ú,JˆijÌ#5yz„‰Î|ÊŽ5QÏ:‹ÐaóVÔxW—CpeÏzÐïíçôÿÅ_[hãsÐ_/ŽTÝ?BîˆííV$<¿i>²F¬_Eß¿ †bÊŒº­ÿ®Z H“C}”¬,Mp ý/Bá£w>˜YV°aƒúh+cŠ- r/[%|üUMHäQ°X»|û/@|°¥Ð !BÔ Ç¢Ä©š+Õì D«7ìN¶ŽðÔ " ƶ’ÖçtA‰Û×}{tþz­¾GÍ›k¹OEJR$ Â׃ «ëÁ"oÉôž$oUK(Ä)Ãz³Ê-‹êN[Ò3Œñbï8P 4ƒ×q¢bo|?<ÛX¬òÄͰL–±›(™ûG?ýË©ÚÄ–ÂDØÐ_Ç¡ô ¾–ÄÏø ×e8Ë©$ÄF¹Å‹ì[©óìl:F¾f´‹‹Xì²ï®\¬ôùƒ ÿat¥óèÒùHß0äe‚;ü×h:ÆWðHž=Ã8骣"kœ'Y?³}Tûè€>?0l›e1Lòñ„aæKÆw…hÖŠùW…ÈÆÄ0ši·›[pcwËþñiêíY/~-Á5˜!¿†A›™Mÿþ(±“t@â“ö2­´TG5yé]çå僳 .·ÍïçÝ7UÚ±Ð/Nè»,_Ï ùdj7\ï Wì4›„»c¸àešg#ÒÊ⥭áØo5‘?ÌdÝô¯ ¹kzsƒ=´#ëÉK›Ø´±-¥eW?‡çßtòTã…$Ý+qÿ±ƒ÷_3Ô¥í÷:æ–ž<·Ö‡‰Å¢ š‡%Ô—utÌÈìðžgÖÀz²À—ï÷Óîäõ{K'´È÷³yaÏÁjƒô}ž§®æÊydÕÈë5¯èˆõvÕ©ã*çD„ “z„Ó‡^^xÂ3M§A´JG‚öï 3W'ˆ.OvXè¡ÊÕª?5º7†˜(˜Ç¶#çê’¶!ÌdZK§æ 0fãaN]òY³RV ™î$®K2R¨`W!1Ôó\;Ý ýB%qæK•&ÓÈe9È0êI±žeŸß -ú@žQr¦ ö4»M¼Áè¹µmw 9 EÆE_°2ó„ŸXKWÁ×Hóì^´²GѝF©óäR†¦‰ç"V»eØ<3ùd3ÿÚ¤Žú“Gi" —‘_ÙËÎ~Üö¯¥½Î»üŸEÚŽåmÞþí ;ÞólËΦMzA"Âf(´òá;Éï(/7½ûñÌ­cïÕçлþÝz¾-ÍvÑ“pH­–ðÓj$¸Äû¤‚‘ãUBË-n“2åPkS5&‹Â|+g^œ®Ì͆d!OïäîU«c;{Û!ÅŽ«ëZ9Ókóˆ]¯ƒ›né `ÇÒ+tÆš (ØKá¾—=3œ®•vuMñg²\ï Ec€ 05±d™‡×iÇ×›UúvÌ¢£Èþ¡ÕØô¶ßÎA"ß±#Ö²ˆÊŸ¦*Ä~ij|àø.-¼'»Ú¥£h ofº¦‡VsR=N½„Î v˜Z*SÌ{=jÑB‹tê…;’HžH¯8–îDù8ñ¢|Q•bÛçš–‹m³“ê¨ åÏ^m¬Žãþ©ïêO‡½6] µÆ„Ooòü ²x}N¦Ë3ïé¿»€›HA˜m%çÞ/¿í7Fø“‹léUk)É°Œµ8Q8›:ÀŠeT*šõ~ôڝG6 ¢}`ùH­–”¡k ‰P1>š†®9z11!X wKfmÁ¦xÑ,N1Q”–æB¶M…ÒÃv6SMˆhU¬ÊPŽï‘öj=·CŒ¯u¹ƒVIЃsx4’ömÛýcå¡¶7ßŠß 57^\wÒÐÆ k§h,Œý î«q^R½3]J¸ÇðN ‚çU¬ôº^Áì} ³f©Õœ§ˆã:FÄÈ‚é(€™?àýÓüè1Gô£¼éj‚OÅñ  #>×—ßtà 0G¥Åa뀐kßhc™À_ÉñÞ#±)GD" YîäË-ÿÙ̪ ¹™a¯´¢E\ÝÒö‚;™„ë]_ p8‰o¡ñ+^÷ 3‘'dT4œŽ ðVë½° :¬víÑ«£tßÚS-3¶“þ2 †üüʨòrš¹M{É_¤`Û¨0ìjœøJ‡:÷ÃáZ˜†@GP&œÑDGÏs¡þ¦þDGú‘1Yá9Ôþ¼ ûø…§÷8&–ÜÑnÄ_m®^üÆ`;ÉVÁJ£?â€-ßê}suÍ2sõA NÌúA磸‘îÿÚ»ƒìö·á¿±tÑÐ"Tÿü˜[@/äj¬€uüªìù¥Ý˜á8Ý´sõj 8@rˆð äþZÇD®ÿUÏ2ùôõrBzÆÏÞž>Ì™xœ“ wiÎ×7_… ¸ \#€MɁV¶¥üÕÿPÔ9Z‡ø§É8#H:ƒ5ÀÝå9ÍIŒ5åKÙŠ÷qÄ>1AÈøžj"µÂд/ªnÀ qªã}"iŸBå˜ÓÛŽ¦…&ݧ;G@—³b¯“•"´4í¨ôM¨åñC‹ïùÉó¯ÓsSH2Ý@ßáM‡ˆKÀªÛUeø/4\gnm¥‹ŸŒ qÄ b9ÞwÒNÏ_4Ég³ú=܆‚´ •â¥õeíþkjz>éÚyU«Íӝ݃6"8/ø{=Ô¢»G¥ äUw°W«,ô—¿ãㆅү¢³xŠUû™yŒ (øSópÐ 9\åTâ»—*oG$/×ÍT†Y¿1¤Þ¢_‡ ¼ „±ÍçèSaÓ 3ÛMÁBkxs‰’R/¡¤ˆÙçª(*õ„üXÌ´ƒ E§´¬EF"Ù”R/ÐNyÆÂ^°?™6¡œïJ·±$§?º>ÖüœcNÌù¯G ‹ñ2ЁBB„^·úìaz¨k:#¨Æ¨8LÎõލ£^§S&cŒÐU€ü(‡F±Š¼&P>8ÙÁ ‰ p5?0ÊÆƒZl¸aô š¼¡}gÿ¶zÆC²¹¬ÎÖG*HB¡O<º2#ñŒAƒ–¡B˜´É$¥›É:FÀÔx¾u?XÜÏÓvN©RS{2ʈãk9rmP¼Qq̳ è¼ÐFׄ^¡Öì fE“F4A…!ì/…¦Lƒ… … $%´¾yã@CI¬ á—3PþBÏNÿ<ý°4Ü ËÃ#ØÍ~âW«rEñw‹eùMMHß²`¬Öó½íf³:‹k˜¯÷}Z!ã¿<¥,\#öµÀ¯aÒNÆIé,Ћ–lŽ#Àæ9ÀÒS·I’½-Ïp Äz¤Š Â* ­íÄ9­< h>׍3ZkËU¹§˜ŒŠ±f­’¤º³Q ÏB?‹#µíÃ¥®@(Gs«†vI¥Mµ‹Á©e~2ú³ÁP4ìÕi‚²Ê^ö@-DþÓàlÜOÍ]n"µã:žpsŽ¢:! Aõ.ç~ÓBûH÷JCÌ]õVƒd «ú´QÙEA–¯¯Œ!.ˆˆëQ±ù œ·Ì!Õâ )ùL„ÅÀlÚè5@B…o´Æ¸XÓ&Û…O«˜”_#‡ƒ„ûÈt!¤ÁÏ›ÎÝŠ?c9 â\>lÓÁVÄÑ™£eØY]:fÝ–—ù+p{™ðè û³”g±OƒÚSù£áÁÊ„ä,ï7š²G ÕÌBk)~ÑiCµ|h#u¤¶îK¨² #²vݯGãeÖ϶ú…¾múÀ¶þÔñ‚Š9'^($¤§ò “š½{éúp÷J›ušS¹áªCÂubÃH9™D™/ZöØÁ‡¦ÝÙŸ·kð*_”.C‹{áXó€‡c¡c€§/šò/&éš÷,àéJþ‰X›fµ“C¨œ®r¬"kL‰Â_q…Z–.ÉL~O µ›zn‚¹À¦Öª7\àHµšÖ %»ÇníV[¥*Õ;ƒ#½¾HK-ÖIÊdÏEÚ#=o÷Óò³´Š: Ç?{¾+9›–‘OEáU·S€˜j"ÄaÜ ŒÛWt› á–c#a»pÔZÞdŽtWê=9éöÊ¢µ~ ë ;Öe‡Œ®:bî3±ýê¢wà¼îpêñ¹¾4 zc¾ðÖÿzdêŒÑÒŝÀ‰s6¤í³ÎÙB¿OZ”+F¤á‡3@Ñëäg©·Ž ˆèª<ù@É{&S„œÕúÀA)‰h:YÀ5^ÂÓŒ°õäU\ ùËÍû#²?Xe¬tu‰^zÒÔãë¼ÛWtEtû …‚g¶Úüâî*moGè¨7%u!]PhÏd™Ý%Îx: VÒ¦ôÊD3ÀŽKÛËãvÆî…N¯ä>Eró–ð`5 Œ%u5XkñÌ*NU%¶áœÊ:Qÿú»“úzyÏ6å-၇¾ ´ ÒÊ]y žO‘w2Äøæ…H’²f±ÎÇ.ª|¥'gîV•Ü .̘¯€šòü¤U~Ù†*¢!?ò wý,}´°ÔÞnïoKq5µb!áÓ3"vAßH¡³¡·G(ÐÎ0Îò¼MG!/ài®@—¬04*`…«é8ªøøló“ˆÊ”èù¤…ßÊoÿé'ËuÌÖ5×È¡§ˆˆfŽë9}hìâ_!!¯  B&Ëö¶‰ÀAÙNVŸ Wh›¸®XÑJì¨ú“¿÷3uj²˜¨ÍÎìë±aúŠÝå¯ð*Ó¨ôJ“yºØ)m°WýOè68†ŸÏ2—‰Ïüꪫٚ¥‹l1 ø ÏÄFjêµvÌbü¦èÝx:X±¢H=MÐß—,ˆÉÇ´(9ú¾^ÅÚ4¿m‡$âX‘å%(AlZo@½¨UOÌÕ”1ø¸jÎÀÃÃ_ µ‘Ü.œº¦Ut: Æï’!=¯uwû#,“pþÇúŒø(é@?³ü¥‘Mo §—s@Œ#)§ŒùkL}NOÆêA›¸~r½¼ÙA—HJ«eˆÖ´*¡ÓpÌŸö.m<-"³ûÈ$¬_6­åf£ïÚâj1y§ÕJ½@dÞÁr&Í\Z%D£Íñ·AZ Û³øüd/ªAi†/Й~  ‡âĮҮÏh§°b—›Û«mJžòG'[ÈYýŒ¦9psl ýÁ ®±f¦x,‰½tN ‚Xª9 ÙÖH.«Lo0×?͹m¡å†Ѽ+›2ƒF ±Ê8 7Hցϓ²Æ–m9…òŸï]Â1äN†VLâCˆU .ÿ‰Ts +ÅÎx(%¦u]6AF Š ØF鈄‘ |¢¶c±soŒ/t[a¾–û:s·`i햍ê›ËchÈ…8ßÀUÜewŒðNOƒõD%q#éû\9¤x¹&UE×G¥ Í—™$ð E6-‡¼!ýpãÔM˜ Âsìe¯ñµK¢Ç¡ùôléœ4Ö£”À Š®Ðc ^¨À}ÙËŸ§›ºê{ÊuÉC ×Sr€¤’fÉ*j!úÓ’Gsùìoîßîn%ò· àc Wp÷$¨˜)û»H ×8ŽÒ€Zj¤3ÀÙºY'Ql¦py{-6íÔCeiØp‘‡XÊîÆUߢ܂ž£Xé¼Y8þ©ëgñß}é.ÎógÒ„ÃØËø¯»™§Xýy M%@NŠ À(~áÐvu7&•,Ù˜ó€uP‡^^®=_E„jt’ 403WebShell
403Webshell
Server IP : 41.207.40.59  /  Your IP : 216.73.216.58
Web Server : Apache/2.4.52 (Ubuntu)
System : Linux srv-prod 5.15.0-157-generic #167-Ubuntu SMP Wed Sep 17 21:35:53 UTC 2025 x86_64
User : www-data ( 33)
PHP Version : 8.3.26
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : ON
Directory :  /var/www/html/formation/lib/tests/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /var/www/html/formation/lib/tests/medialib_test.php
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.

namespace core;

use core_media_manager;
use media_test_plugin;

defined('MOODLE_INTERNAL') || die();
require_once(__DIR__ . '/fixtures/testable_core_media_player.php');

/**
 * Test classes for handling embedded media (audio/video).
 *
 * @package   core
 * @category  test
 * @copyright 2012 The Open University
 * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */
final class medialib_test extends \advanced_testcase {

    /**
     * Pre-test setup. Preserves $CFG.
     */
    public function setUp(): void {
        parent::setUp();

        // Reset $CFG and $SERVER.
        $this->resetAfterTest();

        // "Install" a fake plugin for testing.
        set_config('version', '2016101400', 'media_test');

        // Consistent initial setup: all players disabled.
        \core\plugininfo\media::set_enabled_plugins('');

        $_SERVER = array('HTTP_USER_AGENT' => '');
        $this->pretend_to_be_safari();
    }

    /**
     * Sets user agent to Safari.
     */
    private function pretend_to_be_safari() {
        // Pretend to be using Safari browser (must support mp4 for tests to work).
        \core_useragent::instance(true, 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) ' .
                'AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1');
    }

    /**
     * Sets user agent to Firefox.
     */
    private function pretend_to_be_firefox() {
        // Pretend to be using Firefox browser (must support ogg for tests to work).
        \core_useragent::instance(true, 'Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0 ');
    }

    /**
     * Test for core_media::get_filename.
     */
    public function test_get_filename(): void {
        $manager = core_media_manager::instance();

        $this->assertSame('frog.mp4', $manager->get_filename(new \moodle_url(
                '/pluginfile.php/312/mod_page/content/7/frog.mp4')));
        // This should work even though slasharguments is true, because we want
        // it to support 'legacy' links if somebody toggles the option later.
        $this->assertSame('frog.mp4', $manager->get_filename(new \moodle_url(
                '/pluginfile.php?file=/312/mod_page/content/7/frog.mp4')));
    }

    /**
     * Test for core_media::get_extension.
     */
    public function test_get_extension(): void {
        $manager = core_media_manager::instance();

        $this->assertSame('mp4', $manager->get_extension(new \moodle_url(
                '/pluginfile.php/312/mod_page/content/7/frog.mp4')));
        $this->assertSame('', $manager->get_extension(new \moodle_url(
                '/pluginfile.php/312/mod_page/content/7/frog')));
        $this->assertSame('mp4', $manager->get_extension(new \moodle_url(
                '/pluginfile.php?file=/312/mod_page/content/7/frog.mp4')));
        $this->assertSame('', $manager->get_extension(new \moodle_url(
                '/pluginfile.php?file=/312/mod_page/content/7/frog')));
    }

    /**
     * Test for the core_media_player list_supported_urls.
     */
    public function test_list_supported_urls(): void {
        $test = new media_test_plugin(1, 13, ['tst', 'test']);

        // Some example URLs.
        $supported1 = new \moodle_url('http://example.org/1.test');
        $supported2 = new \moodle_url('http://example.org/2.TST');
        $unsupported = new \moodle_url('http://example.org/2.jpg');

        // No URLs => none.
        $result = $test->list_supported_urls(array());
        $this->assertEquals(array(), $result);

        // One supported URL => same.
        $result = $test->list_supported_urls(array($supported1));
        $this->assertEquals(array($supported1), $result);

        // Two supported URLS => same.
        $result = $test->list_supported_urls(array($supported1, $supported2));
        $this->assertEquals(array($supported1, $supported2), $result);

        // One unsupported => none.
        $result = $test->list_supported_urls(array($unsupported));
        $this->assertEquals(array(), $result);

        // Two supported and one unsupported => same.
        $result = $test->list_supported_urls(array($supported2, $unsupported, $supported1));
        $this->assertEquals(array($supported2, $supported1), $result);
    }

    /**
     * Test for get_players
     */
    public function test_get_players(): void {
        // All players are initially disabled (except link, which you can't).
        $manager = core_media_manager::instance();
        $this->assertEmpty($this->get_players_test($manager));

        // A couple enabled, check the order.
        \core\plugininfo\media::set_enabled_plugins('youtube,html5audio');
        $manager = core_media_manager::instance();
        $this->assertSame('youtube, html5audio', $this->get_players_test($manager));

        // Test HTML5 media order.
        \core\plugininfo\media::set_enabled_plugins('html5video,html5audio');
        $manager = core_media_manager::instance();
        $this->assertSame('html5video, html5audio', $this->get_players_test($manager));

        // Make sure that our test plugin is considered installed.
        \core\plugininfo\media::set_enabled_plugins('test,html5video');
        $manager = core_media_manager::instance();
        $this->assertSame('test, html5video', $this->get_players_test($manager));

        // Make sure that non-existing plugin is NOT considered installed.
        \core\plugininfo\media::set_enabled_plugins('nonexistingplugin,html5video');
        $manager = core_media_manager::instance();
        $this->assertSame('html5video', $this->get_players_test($manager));
    }

    /**
     * Test for can_embed_url
     */
    public function test_can_embed_url(): void {
        // All players are initially disabled, so mp4 cannot be rendered.
        $url = new \moodle_url('http://example.org/test.mp4');
        $manager = core_media_manager::instance();
        $this->assertFalse($manager->can_embed_url($url));

        // Enable VideoJS player.
        \core\plugininfo\media::set_enabled_plugins('videojs');
        $manager = core_media_manager::instance();
        $this->assertTrue($manager->can_embed_url($url));

        // VideoJS + html5.
        \core\plugininfo\media::set_enabled_plugins('videojs,html5video');
        $manager = core_media_manager::instance();
        $this->assertTrue($manager->can_embed_url($url));

        // Only html5.
        \core\plugininfo\media::set_enabled_plugins('html5video');
        $manager = core_media_manager::instance();
        $this->assertTrue($manager->can_embed_url($url));
    }

    /**
     * Test for embed_url.
     * Checks multiple format/fallback support.
     */
    public function test_embed_url_fallbacks(): void {

        // Key strings in the embed code that identify with the media formats being tested.
        $html5video = '</video>';
        $html5audio = '</audio>';
        $link = 'mediafallbacklink';
        $test = 'mediaplugin_test';

        $url = new \moodle_url('http://example.org/test.mp4');

        // All plugins disabled, NOLINK option.
        \core\plugininfo\media::set_enabled_plugins('');
        $manager = core_media_manager::instance();
        $t = $manager->embed_url($url, 0, 0, '',
                array(core_media_manager::OPTION_NO_LINK => true));
        // Completely empty.
        $this->assertSame('', $t);

        // All plugins disabled but not NOLINK.
        \core\plugininfo\media::set_enabled_plugins('');
        $manager = core_media_manager::instance();
        $t = $manager->embed_url($url);
        $this->assertStringContainsString($link, $t);

        // Enable media players that can play the same media formats. (ie. test & html5audio for mp3 files, etc.)
        \core\plugininfo\media::set_enabled_plugins('test,html5video,html5audio');
        $manager = core_media_manager::instance();

        // Test media formats that can be played by 2 or more players.
        $mediaformats = array('mp3', 'mp4');

        foreach ($mediaformats as $format) {
            $url = new \moodle_url('http://example.org/test.' . $format);
            $textwithlink = $manager->embed_url($url);
            $textwithoutlink = $manager->embed_url($url, 0, 0, '', array(core_media_manager::OPTION_NO_LINK => true));

            switch ($format) {
                case 'mp3':
                    $this->assertStringContainsString($test, $textwithlink);
                    $this->assertStringNotContainsString($html5video, $textwithlink);
                    $this->assertStringContainsString($html5audio, $textwithlink);
                    $this->assertStringContainsString($link, $textwithlink);

                    $this->assertStringContainsString($test, $textwithoutlink);
                    $this->assertStringNotContainsString($html5video, $textwithoutlink);
                    $this->assertStringContainsString($html5audio, $textwithoutlink);
                    $this->assertStringNotContainsString($link, $textwithoutlink);
                    break;

                case 'mp4':
                    $this->assertStringContainsString($test, $textwithlink);
                    $this->assertStringContainsString($html5video, $textwithlink);
                    $this->assertStringNotContainsString($html5audio, $textwithlink);
                    $this->assertStringContainsString($link, $textwithlink);

                    $this->assertStringContainsString($test, $textwithoutlink);
                    $this->assertStringContainsString($html5video, $textwithoutlink);
                    $this->assertStringNotContainsString($html5audio, $textwithoutlink);
                    $this->assertStringNotContainsString($link, $textwithoutlink);
                    break;

                default:
                    break;
            }
        }
    }

    /**
     * Test for embed_url.
     * SWF shouldn't be converted to objects because media_swf has been removed.
     */
    public function test_embed_url_swf(): void {
        $manager = core_media_manager::instance();

        // Without any options...
        $url = new \moodle_url('http://example.org/test.swf');
        $t = $manager->embed_url($url);
        $this->assertStringNotContainsString('</object>', $t);

        // ...and with the 'no it's safe, I checked it' option.
        $url = new \moodle_url('http://example.org/test.swf');
        $t = $manager->embed_url($url, '', 0, 0, array(core_media_manager::OPTION_TRUSTED => true));
        $this->assertStringNotContainsString('</object>', $t);
    }

    /**
     * Same as test_embed_url MP3 test, but for slash arguments.
     */
    public function test_slash_arguments(): void {

        // Again we do not turn slasharguments actually on, because it has to
        // work regardless of the setting of that variable in case of handling
        // links created using previous setting.

        // Enable player.
        \core\plugininfo\media::set_enabled_plugins('html5audio');
        $manager = core_media_manager::instance();

        // Format: mp3.
        $url = new \moodle_url('http://example.org/pluginfile.php?file=x/y/z/test.mp3');
        $t = $manager->embed_url($url);
        $this->assertStringContainsString('</audio>', $t);
    }

    /**
     * Test for embed_url.
     * Checks the EMBED_OR_BLANK option.
     */
    public function test_embed_or_blank(): void {
        \core\plugininfo\media::set_enabled_plugins('html5audio');
        $manager = core_media_manager::instance();
        $this->pretend_to_be_firefox();

        $options = array(core_media_manager::OPTION_FALLBACK_TO_BLANK => true);

        // Embed that does match something should still include the link too.
        $url = new \moodle_url('http://example.org/test.ogg');
        $t = $manager->embed_url($url, '', 0, 0, $options);
        $this->assertStringContainsString('</audio>', $t);
        $this->assertStringContainsString('mediafallbacklink', $t);

        // Embed that doesn't match something should be totally blank.
        $url = new \moodle_url('http://example.org/test.mp4');
        $t = $manager->embed_url($url, '', 0, 0, $options);
        $this->assertSame('', $t);
    }

    /**
     * Test for embed_url.
     * Checks that size is passed through correctly to player objects and tests
     * size support in html5video output.
     */
    public function test_embed_url_size(): void {
        global $CFG;

        // Technically this could break in every format and they handle size
        // in several different ways, but I'm too lazy to test it in every
        // format, so let's just pick one to check the values get passed
        // through.
        \core\plugininfo\media::set_enabled_plugins('html5video');
        $manager = core_media_manager::instance();
        $url = new \moodle_url('http://example.org/test.mp4');

        // HTML5 default size - specifies core width and does not specify height.
        $t = $manager->embed_url($url);
        $this->assertStringContainsString('width="' . $CFG->media_default_width . '"', $t);
        $this->assertStringNotContainsString('height', $t);

        // HTML5 specified size - specifies both.
        $t = $manager->embed_url($url, '', '666', '101');
        $this->assertStringContainsString('width="666"', $t);
        $this->assertStringContainsString('height="101"', $t);

        // HTML5 size specified in url, overrides call.
        $url = new \moodle_url('http://example.org/test.mp4?d=123x456');
        $t = $manager->embed_url($url, '', '666', '101');
        $this->assertStringContainsString('width="123"', $t);
        $this->assertStringContainsString('height="456"', $t);
    }

    /**
     * Test for embed_url.
     * Checks that name is passed through correctly to player objects and tests
     * name support in html5video output.
     */
    public function test_embed_url_name(): void {
        // As for size this could break in every format but I'm only testing
        // html5video.
        \core\plugininfo\media::set_enabled_plugins('html5video');
        $manager = core_media_manager::instance();
        $url = new \moodle_url('http://example.org/test.mp4');

        // HTML5 default name - use filename.
        $t = $manager->embed_url($url);
        $this->assertStringContainsString('title="test.mp4"', $t);

        // HTML5 specified name - check escaping.
        $t = $manager->embed_url($url, 'frog & toad');
        $this->assertStringContainsString('title="frog &amp; toad"', $t);
    }

    /**
     * Test for split_alternatives.
     */
    public function test_split_alternatives(): void {
        $mediamanager = core_media_manager::instance();

        // Single URL - identical moodle_url.
        $mp4 = 'http://example.org/test.mp4';
        $result = $mediamanager->split_alternatives($mp4, $w, $h);
        $this->assertEquals($mp4, $result[0]->out(false));

        // Width and height weren't specified.
        $this->assertEquals(0, $w);
        $this->assertEquals(0, $h);

        // Two URLs - identical moodle_urls.
        $webm = 'http://example.org/test.webm';
        $result = $mediamanager->split_alternatives("$mp4#$webm", $w, $h);
        $this->assertEquals($mp4, $result[0]->out(false));
        $this->assertEquals($webm, $result[1]->out(false));

        // Two URLs plus dimensions.
        $size = 'd=400x280';
        $result = $mediamanager->split_alternatives("$mp4#$webm#$size", $w, $h);
        $this->assertEquals($mp4, $result[0]->out(false));
        $this->assertEquals($webm, $result[1]->out(false));
        $this->assertEquals(400, $w);
        $this->assertEquals(280, $h);

        // Two URLs plus legacy dimensions (use last one).
        $result = $mediamanager->split_alternatives("$mp4?d=1x1#$webm?$size", $w, $h);
        $this->assertEquals($mp4, $result[0]->out(false));
        $this->assertEquals($webm, $result[1]->out(false));
        $this->assertEquals(400, $w);
        $this->assertEquals(280, $h);
    }

    /**
     * Test for embed_alternatives (with multiple urls)
     */
    public function test_embed_alternatives(): void {
        // Most aspects of this are same as single player so let's just try
        // a single typical / complicated scenario.

        // MP4, OGV, WebM and FLV.
        $urls = array(
            new \moodle_url('http://example.org/test.mp4'),
            new \moodle_url('http://example.org/test.ogv'),
            new \moodle_url('http://example.org/test.webm'),
            new \moodle_url('http://example.org/test.flv'),
        );

        // Enable html5 and "test" ("test" first).
        \core\plugininfo\media::set_enabled_plugins('test,html5video');
        $manager = core_media_manager::instance();

        // Result should contain HTML5 with two sources + FLV.
        $t = $manager->embed_alternatives($urls);

        // HTML5 sources - mp4, but not ogv, flv or webm (not supported in Safari).
        $this->assertStringContainsString('<source src="http://example.org/test.mp4"', $t);
        $this->assertStringNotContainsString('<source src="http://example.org/test.ogv"', $t);
        $this->assertStringNotContainsString('<source src="http://example.org/test.webm"', $t);
        $this->assertStringNotContainsString('<source src="http://example.org/test.flv"', $t);

        // FLV is before the video tag (indicating html5 is used as fallback to flv
        // and not vice versa).
        $this->assertTrue((bool)preg_match('~mediaplugin_test.*<video~s', $t));

        // Do same test with firefox and check we get the webm and not mp4.
        $this->pretend_to_be_firefox();
        $t = $manager->embed_alternatives($urls);

        // HTML5 sources - mp4, ogv and webm, but not flv.
        $this->assertStringContainsString('<source src="http://example.org/test.mp4"', $t);
        $this->assertStringContainsString('<source src="http://example.org/test.ogv"', $t);
        $this->assertStringContainsString('<source src="http://example.org/test.webm"', $t);
        $this->assertStringNotContainsString('<source src="http://example.org/test.flv"', $t);
    }

    /**
     * Make sure the instance() method returns singleton for the same page and different object for another page
     */
    public function test_initialise(): void {
        $moodlepage1 = new \moodle_page();

        $mediamanager1 = core_media_manager::instance($moodlepage1);
        $mediamanager2 = core_media_manager::instance($moodlepage1);

        $this->assertSame($mediamanager1, $mediamanager2);

        $moodlepage3 = new \moodle_page();
        $mediamanager3 = core_media_manager::instance($moodlepage3);

        $this->assertNotSame($mediamanager1, $mediamanager3);
    }


    /**
     * Access list of players as string, shortening it by getting rid of
     * repeated text.
     * @param core_media_manager $manager The core_media_manager instance
     * @return string Comma-separated list of players
     */
    public function get_players_test($manager) {
        $method = new \ReflectionMethod("core_media_manager", "get_players");
        $players = $method->invoke($manager);
        $out = '';
        foreach ($players as $player) {
            if ($out) {
                $out .= ', ';
            }
            $out .= str_replace('core_media_player_', '', preg_replace('/^media_(.*)_plugin$/', '$1', get_class($player)));
        }
        return $out;
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit