mirror of
https://github.com/moodle/moodle.git
synced 2025-08-05 00:46:50 +02:00
MDL-38158 core_media: Convert media players to new plugin type
AMOS BEGIN MOV [siteyoutube,core_media],[pluginname,media_youtube] MOV [siteyoutube_desc,core_media],[pluginname_help,media_youtube] MOV [sitevimeo,core_media],[pluginname,media_vimeo] MOV [sitevimeo_desc,core_media],[pluginname_help,media_vimeo] MOV [html5audio,core_media],[pluginname,media_html5audio] MOV [html5audio_desc,core_media],[pluginname_help,media_html5audio] MOV [html5video,core_media],[pluginname,media_html5video] MOV [html5video_desc,core_media],[pluginname_help,media_html5video] MOV [flashanimation,core_media],[pluginname,media_swf] MOV [flashanimation_desc,core_media],[pluginname_help,media_swf] AMOS END
This commit is contained in:
parent
3c73b26c4b
commit
fab11235d8
76 changed files with 3524 additions and 4406 deletions
|
@ -25,38 +25,25 @@
|
|||
|
||||
defined('MOODLE_INTERNAL') || die();
|
||||
|
||||
global $CFG;
|
||||
require_once($CFG->libdir . '/medialib.php');
|
||||
|
||||
/**
|
||||
* Test script for media embedding.
|
||||
*/
|
||||
class core_medialib_testcase extends advanced_testcase {
|
||||
|
||||
/** @var array Files covered by test */
|
||||
public static $includecoverage = array('lib/medialib.php', 'lib/outputrenderers.php');
|
||||
|
||||
/**
|
||||
* Pre-test setup. Preserves $CFG.
|
||||
*/
|
||||
public function setUp() {
|
||||
global $CFG;
|
||||
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.
|
||||
$CFG->core_media_enable_html5video = false;
|
||||
$CFG->core_media_enable_html5audio = false;
|
||||
$CFG->core_media_enable_mp3 = false;
|
||||
$CFG->core_media_enable_flv = false;
|
||||
$CFG->core_media_enable_wmp = false;
|
||||
$CFG->core_media_enable_qt = false;
|
||||
$CFG->core_media_enable_rm = false;
|
||||
$CFG->core_media_enable_youtube = false;
|
||||
$CFG->core_media_enable_vimeo = false;
|
||||
$CFG->core_media_enable_swf = false;
|
||||
\core\plugininfo\media::set_enabled_plugins('');
|
||||
|
||||
$_SERVER = array('HTTP_USER_AGENT' => '');
|
||||
$this->pretend_to_be_safari();
|
||||
|
@ -76,33 +63,20 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
*/
|
||||
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 (Windows NT 6.1; rv:8.0) Gecko/20100101 Firefox/8.0');
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for the core_media_player is_enabled.
|
||||
*/
|
||||
public function test_is_enabled() {
|
||||
global $CFG;
|
||||
|
||||
// Test enabled: unset, 0, 1.
|
||||
$test = new core_media_player_test;
|
||||
$this->assertFalse($test->is_enabled());
|
||||
$CFG->core_media_enable_test = 0;
|
||||
$this->assertFalse($test->is_enabled());
|
||||
$CFG->core_media_enable_test = 1;
|
||||
$this->assertTrue($test->is_enabled());
|
||||
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() {
|
||||
$this->assertSame('frog.mp4', core_media::get_filename(new moodle_url(
|
||||
$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', core_media::get_filename(new moodle_url(
|
||||
$this->assertSame('frog.mp4', $manager->get_filename(new moodle_url(
|
||||
'/pluginfile.php?file=/312/mod_page/content/7/frog.mp4')));
|
||||
}
|
||||
|
||||
|
@ -110,13 +84,15 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* Test for core_media::get_extension.
|
||||
*/
|
||||
public function test_get_extension() {
|
||||
$this->assertSame('mp4', core_media::get_extension(new moodle_url(
|
||||
$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('', core_media::get_extension(new moodle_url(
|
||||
$this->assertSame('', $manager->get_extension(new moodle_url(
|
||||
'/pluginfile.php/312/mod_page/content/7/frog')));
|
||||
$this->assertSame('mp4', core_media::get_extension(new moodle_url(
|
||||
$this->assertSame('mp4', $manager->get_extension(new moodle_url(
|
||||
'/pluginfile.php?file=/312/mod_page/content/7/frog.mp4')));
|
||||
$this->assertSame('', core_media::get_extension(new moodle_url(
|
||||
$this->assertSame('', $manager->get_extension(new moodle_url(
|
||||
'/pluginfile.php?file=/312/mod_page/content/7/frog')));
|
||||
}
|
||||
|
||||
|
@ -124,8 +100,7 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* Test for the core_media_player list_supported_urls.
|
||||
*/
|
||||
public function test_list_supported_urls() {
|
||||
global $CFG;
|
||||
$test = new core_media_player_test;
|
||||
$test = new media_test_plugin(1, 13, ['tst', 'test']);
|
||||
|
||||
// Some example URLs.
|
||||
$supported1 = new moodle_url('http://example.org/1.test');
|
||||
|
@ -157,57 +132,59 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* Test for core_media_renderer get_players
|
||||
*/
|
||||
public function test_get_players() {
|
||||
global $CFG, $PAGE;
|
||||
|
||||
// All players are initially disabled (except link, which you can't).
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$this->assertSame('link', $renderer->get_players_test());
|
||||
$manager = new core_media_manager_test();
|
||||
$this->assertEmpty($manager->get_players_test());
|
||||
|
||||
// A couple enabled, check the order.
|
||||
$CFG->core_media_enable_html5audio = true;
|
||||
$CFG->core_media_enable_mp3 = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$this->assertSame('mp3, html5audio, link', $renderer->get_players_test());
|
||||
\core\plugininfo\media::set_enabled_plugins('youtube,html5audio');
|
||||
$manager = new core_media_manager_test();
|
||||
$this->assertSame('youtube, html5audio', $manager->get_players_test());
|
||||
|
||||
// Test QT and HTML5 media order.
|
||||
$CFG->core_media_enable_mp3 = false;
|
||||
$CFG->core_media_enable_html5video = true;
|
||||
$CFG->core_media_enable_qt = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$this->assertSame('html5video, html5audio, qt, link', $renderer->get_players_test());
|
||||
// Test SWF and HTML5 media order.
|
||||
\core\plugininfo\media::set_enabled_plugins('html5video,html5audio,swf');
|
||||
$manager = new core_media_manager_test();
|
||||
$this->assertSame('html5video, html5audio, swf', $manager->get_players_test());
|
||||
|
||||
// Make sure that our test plugin is considered installed.
|
||||
\core\plugininfo\media::set_enabled_plugins('test,html5video');
|
||||
$manager = new core_media_manager_test();
|
||||
$this->assertSame('test, html5video', $manager->get_players_test());
|
||||
|
||||
// Make sure that non-existing plugin is NOT considered installed.
|
||||
\core\plugininfo\media::set_enabled_plugins('nonexistingplugin,html5video');
|
||||
$manager = new core_media_manager_test();
|
||||
$this->assertSame('html5video', $manager->get_players_test());
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for core_media_renderer can_embed_url
|
||||
*/
|
||||
public function test_can_embed_url() {
|
||||
global $CFG, $PAGE;
|
||||
|
||||
// All players are initially disabled, so mp4 cannot be rendered.
|
||||
$url = new moodle_url('http://example.org/test.mp4');
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$this->assertFalse($renderer->can_embed_url($url));
|
||||
$manager = core_media_manager::instance();
|
||||
$this->assertFalse($manager->can_embed_url($url));
|
||||
|
||||
// Enable QT player.
|
||||
$CFG->core_media_enable_qt = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$this->assertTrue($renderer->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));
|
||||
|
||||
// QT + html5.
|
||||
$CFG->core_media_enable_html5video = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$this->assertTrue($renderer->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.
|
||||
$CFG->core_media_enable_qt = false;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$this->assertTrue($renderer->can_embed_url($url));
|
||||
\core\plugininfo\media::set_enabled_plugins('html5video');
|
||||
$manager = core_media_manager::instance();
|
||||
$this->assertTrue($manager->can_embed_url($url));
|
||||
|
||||
// Only WMP.
|
||||
$CFG->core_media_enable_html5video = false;
|
||||
$CFG->core_media_enable_wmp = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$this->assertFalse($renderer->can_embed_url($url));
|
||||
// Only SWF.
|
||||
\core\plugininfo\media::set_enabled_plugins('swf');
|
||||
$manager = core_media_manager::instance();
|
||||
$this->assertFalse($manager->can_embed_url($url));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -215,73 +192,68 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* Checks multiple format/fallback support.
|
||||
*/
|
||||
public function test_embed_url_fallbacks() {
|
||||
global $CFG, $PAGE;
|
||||
|
||||
// Key strings in the embed code that identify with the media formats being tested.
|
||||
$qt = 'qtplugin.cab';
|
||||
$swf = '</object>';
|
||||
$html5video = '</video>';
|
||||
$html5audio = '</audio>';
|
||||
$link = 'mediafallbacklink';
|
||||
$mp3 = 'mediaplugin_mp3';
|
||||
$test = 'mediaplugin_test';
|
||||
|
||||
$url = new moodle_url('http://example.org/test.mp4');
|
||||
|
||||
// All plugins disabled, NOLINK option.
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$t = $renderer->embed_url($url, 0, 0, '',
|
||||
array(core_media::OPTION_NO_LINK => true));
|
||||
\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.
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$t = $renderer->embed_url($url);
|
||||
\core\plugininfo\media::set_enabled_plugins('');
|
||||
$manager = core_media_manager::instance();
|
||||
$t = $manager->embed_url($url);
|
||||
$this->assertContains($link, $t);
|
||||
|
||||
// Enable media players that can play the same media formats. (ie. qt & html5video for mp4 files, etc.)
|
||||
$CFG->core_media_enable_html5video = true;
|
||||
$CFG->core_media_enable_html5audio = true;
|
||||
$CFG->core_media_enable_mp3 = true;
|
||||
$CFG->core_media_enable_qt = true;
|
||||
// Enable media players that can play the same media formats. (ie. test & html5audio for mp3 files, etc.)
|
||||
\core\plugininfo\media::set_enabled_plugins('html5video,html5audio,test,swf');
|
||||
$manager = core_media_manager::instance();
|
||||
|
||||
// Test media formats that can be played by 2 or more players.
|
||||
$mediaformats = array('mp3', 'm4a', 'mp4', 'm4v');
|
||||
$mediaformats = array('mp3', 'mp4');
|
||||
|
||||
foreach ($mediaformats as $format) {
|
||||
$url = new moodle_url('http://example.org/test.' . $format);
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
$textwithlink = $renderer->embed_url($url);
|
||||
$textwithoutlink = $renderer->embed_url($url, 0, 0, '', array(core_media::OPTION_NO_LINK => true));
|
||||
$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->assertContains($mp3, $textwithlink);
|
||||
$this->assertContains($test, $textwithlink);
|
||||
$this->assertNotContains($html5video, $textwithlink);
|
||||
$this->assertContains($html5audio, $textwithlink);
|
||||
$this->assertNotContains($swf, $textwithlink);
|
||||
$this->assertContains($link, $textwithlink);
|
||||
|
||||
$this->assertContains($mp3, $textwithoutlink);
|
||||
$this->assertContains($html5audio, $textwithoutlink);
|
||||
$this->assertNotContains($link, $textwithoutlink);
|
||||
break;
|
||||
|
||||
case 'm4a':
|
||||
$this->assertContains($qt, $textwithlink);
|
||||
$this->assertContains($html5audio, $textwithlink);
|
||||
$this->assertContains($link, $textwithlink);
|
||||
|
||||
$this->assertContains($qt, $textwithoutlink);
|
||||
$this->assertContains($test, $textwithoutlink);
|
||||
$this->assertNotContains($html5video, $textwithoutlink);
|
||||
$this->assertContains($html5audio, $textwithoutlink);
|
||||
$this->assertNotContains($swf, $textwithoutlink);
|
||||
$this->assertNotContains($link, $textwithoutlink);
|
||||
break;
|
||||
|
||||
case 'mp4':
|
||||
case 'm4v':
|
||||
$this->assertContains($qt, $textwithlink);
|
||||
$this->assertContains($test, $textwithlink);
|
||||
$this->assertContains($html5video, $textwithlink);
|
||||
$this->assertNotContains($html5audio, $textwithlink);
|
||||
$this->assertNotContains($swf, $textwithlink);
|
||||
$this->assertContains($link, $textwithlink);
|
||||
|
||||
$this->assertContains($qt, $textwithoutlink);
|
||||
$this->assertContains($test, $textwithoutlink);
|
||||
$this->assertContains($html5video, $textwithoutlink);
|
||||
$this->assertNotContains($html5audio, $textwithoutlink);
|
||||
$this->assertNotContains($swf, $textwithoutlink);
|
||||
$this->assertNotContains($link, $textwithoutlink);
|
||||
break;
|
||||
|
||||
|
@ -296,140 +268,37 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* Check SWF works including the special option required to enable it
|
||||
*/
|
||||
public function test_embed_url_swf() {
|
||||
global $CFG, $PAGE;
|
||||
$CFG->core_media_enable_swf = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
\core\plugininfo\media::set_enabled_plugins('swf');
|
||||
$manager = core_media_manager::instance();
|
||||
|
||||
// Without any options...
|
||||
$url = new moodle_url('http://example.org/test.swf');
|
||||
$t = $renderer->embed_url($url);
|
||||
$t = $manager->embed_url($url);
|
||||
$this->assertNotContains('</object>', $t);
|
||||
|
||||
// ...and with the 'no it's safe, I checked it' option.
|
||||
$url = new moodle_url('http://example.org/test.swf');
|
||||
$t = $renderer->embed_url($url, '', 0, 0, array(core_media::OPTION_TRUSTED => true));
|
||||
$t = $manager->embed_url($url, '', 0, 0, array(core_media_manager::OPTION_TRUSTED => true));
|
||||
$this->assertContains('</object>', $t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test for core_media_renderer embed_url.
|
||||
* Exercises all the basic formats not covered elsewhere.
|
||||
*/
|
||||
public function test_embed_url_other_formats() {
|
||||
global $CFG, $PAGE;
|
||||
|
||||
// Enable all players and get renderer.
|
||||
$CFG->core_media_enable_html5audio = true;
|
||||
$CFG->core_media_enable_mp3 = true;
|
||||
$CFG->core_media_enable_flv = true;
|
||||
$CFG->core_media_enable_wmp = true;
|
||||
$CFG->core_media_enable_rm = true;
|
||||
$CFG->core_media_enable_youtube = true;
|
||||
$CFG->core_media_enable_vimeo = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
|
||||
// Check each format one at a time. This is a basic check to be sure
|
||||
// the HTML is included for files of the right type, not a test that
|
||||
// the HTML itself is correct.
|
||||
|
||||
// Format: mp3.
|
||||
$url = new moodle_url('http://example.org/test.mp3');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('core_media_mp3_', $t);
|
||||
|
||||
// Format: flv.
|
||||
$url = new moodle_url('http://example.org/test.flv');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('core_media_flv_', $t);
|
||||
|
||||
// Format: wmp.
|
||||
$url = new moodle_url('http://example.org/test.avi');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('6BF52A52-394A-11d3-B153-00C04F79FAA6', $t);
|
||||
|
||||
// Format: rm.
|
||||
$url = new moodle_url('http://example.org/test.rm');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('CFCDAA03-8BE4-11cf-B84B-0020AFBBCCFA', $t);
|
||||
|
||||
// Format: youtube.
|
||||
$url = new moodle_url('http://www.youtube.com/watch?v=vyrwMmsufJc');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
$url = new moodle_url('http://www.youtube.com/v/vyrwMmsufJc');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
|
||||
// Format: youtube video within playlist.
|
||||
$url = new moodle_url('https://www.youtube.com/watch?v=dv2f_xfmbD8&index=4&list=PLxcO_MFWQBDcyn9xpbmx601YSDlDcTcr0');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
$this->assertContains('list=PLxcO_MFWQBDcyn9xpbmx601YSDlDcTcr0', $t);
|
||||
|
||||
// Format: youtube video with start time.
|
||||
$url = new moodle_url('https://www.youtube.com/watch?v=JNJMF1l3udM&t=1h11s');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
$this->assertContains('start=3611', $t);
|
||||
|
||||
// Format: youtube video within playlist with start time.
|
||||
$url = new moodle_url('https://www.youtube.com/watch?v=dv2f_xfmbD8&index=4&list=PLxcO_MFWQBDcyn9xpbmx601YSDlDcTcr0&t=1m5s');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
$this->assertContains('list=PLxcO_MFWQBDcyn9xpbmx601YSDlDcTcr0', $t);
|
||||
$this->assertContains('start=65', $t);
|
||||
|
||||
// Format: youtube video with invalid parameter values (injection attempts).
|
||||
$url = new moodle_url('https://www.youtube.com/watch?v=dv2f_xfmbD8&index=4&list=PLxcO_">');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
$this->assertNotContains('list=PLxcO_', $t); // We shouldn't get a list param as input was invalid.
|
||||
$url = new moodle_url('https://www.youtube.com/watch?v=JNJMF1l3udM&t=">');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
$this->assertNotContains('start=', $t); // We shouldn't get a start param as input was invalid.
|
||||
|
||||
// Format: youtube playlist.
|
||||
$url = new moodle_url('http://www.youtube.com/view_play_list?p=PL6E18E2927047B662');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
$url = new moodle_url('http://www.youtube.com/playlist?list=PL6E18E2927047B662');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
$url = new moodle_url('http://www.youtube.com/p/PL6E18E2927047B662');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
|
||||
// Format: vimeo.
|
||||
$url = new moodle_url('http://vimeo.com/1176321');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</iframe>', $t);
|
||||
|
||||
// Format: html5audio.
|
||||
$this->pretend_to_be_firefox();
|
||||
$url = new moodle_url('http://example.org/test.ogg');
|
||||
$t = $renderer->embed_url($url);
|
||||
$this->assertContains('</audio>', $t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Same as test_embed_url MP3 test, but for slash arguments.
|
||||
*/
|
||||
public function test_slash_arguments() {
|
||||
global $CFG, $PAGE;
|
||||
|
||||
// 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 MP3 and get renderer.
|
||||
$CFG->core_media_enable_mp3 = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
// 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 = $renderer->embed_url($url);
|
||||
$this->assertContains('core_media_mp3_', $t);
|
||||
$t = $manager->embed_url($url);
|
||||
$this->assertContains('</audio>', $t);
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -437,23 +306,21 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* Checks the EMBED_OR_BLANK option.
|
||||
*/
|
||||
public function test_embed_or_blank() {
|
||||
global $CFG, $PAGE;
|
||||
$CFG->core_media_enable_html5audio = true;
|
||||
\core\plugininfo\media::set_enabled_plugins('html5audio');
|
||||
$manager = core_media_manager::instance();
|
||||
$this->pretend_to_be_firefox();
|
||||
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
|
||||
$options = array(core_media::OPTION_FALLBACK_TO_BLANK => true);
|
||||
$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 = $renderer->embed_url($url, '', 0, 0, $options);
|
||||
$t = $manager->embed_url($url, '', 0, 0, $options);
|
||||
$this->assertContains('</audio>', $t);
|
||||
$this->assertContains('mediafallbacklink', $t);
|
||||
|
||||
// Embed that doesn't match something should be totally blank.
|
||||
$url = new moodle_url('http://example.org/test.mp4');
|
||||
$t = $renderer->embed_url($url, '', 0, 0, $options);
|
||||
$t = $manager->embed_url($url, '', 0, 0, $options);
|
||||
$this->assertSame('', $t);
|
||||
}
|
||||
|
||||
|
@ -463,29 +330,29 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* size support in html5video output.
|
||||
*/
|
||||
public function test_embed_url_size() {
|
||||
global $CFG, $PAGE;
|
||||
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.
|
||||
$CFG->core_media_enable_html5video = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
\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 = $renderer->embed_url($url);
|
||||
$this->assertContains('width="' . CORE_MEDIA_VIDEO_WIDTH . '"', $t);
|
||||
$t = $manager->embed_url($url);
|
||||
$this->assertContains('width="' . $CFG->media_default_width . '"', $t);
|
||||
$this->assertNotContains('height', $t);
|
||||
|
||||
// HTML5 specified size - specifies both.
|
||||
$t = $renderer->embed_url($url, '', '666', '101');
|
||||
$t = $manager->embed_url($url, '', '666', '101');
|
||||
$this->assertContains('width="666"', $t);
|
||||
$this->assertContains('height="101"', $t);
|
||||
|
||||
// HTML5 size specified in url, overrides call.
|
||||
$url = new moodle_url('http://example.org/test.mp4?d=123x456');
|
||||
$t = $renderer->embed_url($url, '', '666', '101');
|
||||
$t = $manager->embed_url($url, '', '666', '101');
|
||||
$this->assertContains('width="123"', $t);
|
||||
$this->assertContains('height="456"', $t);
|
||||
}
|
||||
|
@ -496,20 +363,18 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* name support in html5video output.
|
||||
*/
|
||||
public function test_embed_url_name() {
|
||||
global $CFG, $PAGE;
|
||||
|
||||
// As for size this could break in every format but I'm only testing
|
||||
// html5video.
|
||||
$CFG->core_media_enable_html5video = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
\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 = $renderer->embed_url($url);
|
||||
$t = $manager->embed_url($url);
|
||||
$this->assertContains('title="test.mp4"', $t);
|
||||
|
||||
// HTML5 specified name - check escaping.
|
||||
$t = $renderer->embed_url($url, 'frog & toad');
|
||||
$t = $manager->embed_url($url, 'frog & toad');
|
||||
$this->assertContains('title="frog & toad"', $t);
|
||||
}
|
||||
|
||||
|
@ -517,9 +382,11 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* Test for core_media_renderer split_alternatives.
|
||||
*/
|
||||
public function test_split_alternatives() {
|
||||
$mediamanager = core_media_manager::instance();
|
||||
|
||||
// Single URL - identical moodle_url.
|
||||
$mp4 = 'http://example.org/test.mp4';
|
||||
$result = core_media::split_alternatives($mp4, $w, $h);
|
||||
$result = $mediamanager->split_alternatives($mp4, $w, $h);
|
||||
$this->assertEquals($mp4, $result[0]->out(false));
|
||||
|
||||
// Width and height weren't specified.
|
||||
|
@ -528,20 +395,20 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
|
||||
// Two URLs - identical moodle_urls.
|
||||
$webm = 'http://example.org/test.webm';
|
||||
$result = core_media::split_alternatives("$mp4#$webm", $w, $h);
|
||||
$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 = core_media::split_alternatives("$mp4#$webm#$size", $w, $h);
|
||||
$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 = core_media::split_alternatives("$mp4?d=1x1#$webm?$size", $w, $h);
|
||||
$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);
|
||||
|
@ -552,83 +419,50 @@ class core_medialib_testcase extends advanced_testcase {
|
|||
* Test for core_media_renderer embed_alternatives (with multiple urls)
|
||||
*/
|
||||
public function test_embed_alternatives() {
|
||||
global $PAGE, $CFG;
|
||||
|
||||
// Most aspects of this are same as single player so let's just try
|
||||
// a single typical / complicated scenario.
|
||||
|
||||
// MP3, WebM and FLV.
|
||||
// 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 flv.
|
||||
$CFG->core_media_enable_html5video = true;
|
||||
$CFG->core_media_enable_flv = true;
|
||||
$renderer = new core_media_renderer_test($PAGE, '');
|
||||
// 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 = $renderer->embed_alternatives($urls);
|
||||
$t = $manager->embed_alternatives($urls);
|
||||
|
||||
// HTML5 sources - mp4, not flv or webm (not supported in Safari).
|
||||
// HTML5 sources - mp4, but not ogv, flv or webm (not supported in Safari).
|
||||
$this->assertContains('<source src="http://example.org/test.mp4"', $t);
|
||||
$this->assertNotContains('<source src="http://example.org/test.ogv"', $t);
|
||||
$this->assertNotContains('<source src="http://example.org/test.webm"', $t);
|
||||
$this->assertNotContains('<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('~core_media_flv_.*<video~s', $t));
|
||||
$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 = $renderer->embed_alternatives($urls);
|
||||
$t = $manager->embed_alternatives($urls);
|
||||
|
||||
// HTML5 sources - webm, not not flv or mp4 (not supported in Firefox).
|
||||
$this->assertNotContains('<source src="http://example.org/test.mp4"', $t);
|
||||
// HTML5 sources - mp4, ogv and webm, but not flv.
|
||||
$this->assertContains('<source src="http://example.org/test.mp4"', $t);
|
||||
$this->assertContains('<source src="http://example.org/test.ogv"', $t);
|
||||
$this->assertContains('<source src="http://example.org/test.webm"', $t);
|
||||
$this->assertNotContains('<source src="http://example.org/test.flv"', $t);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts moodle_url array into a single comma-separated string for
|
||||
* easier testing.
|
||||
*
|
||||
* @param array $urls Array of moodle_urls
|
||||
* @return string String containing those URLs, comma-separated
|
||||
*/
|
||||
public static function string_urls($urls) {
|
||||
$out = array();
|
||||
foreach ($urls as $url) {
|
||||
$out[] = $url->out(false);
|
||||
}
|
||||
return implode(',', $out);
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts associative array into a semicolon-separated string for easier
|
||||
* testing.
|
||||
*
|
||||
* @param array $options Associative array
|
||||
* @return string String of form 'a=b;c=d'
|
||||
*/
|
||||
public static function string_options($options) {
|
||||
$out = '';
|
||||
foreach ($options as $key => $value) {
|
||||
if ($out) {
|
||||
$out .= ';';
|
||||
}
|
||||
$out .= "$key=$value";
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Media player stub for testing purposes.
|
||||
*/
|
||||
class core_media_player_test extends core_media_player {
|
||||
class media_test_plugin extends core_media_player {
|
||||
/** @var array Array of supported extensions */
|
||||
public $ext;
|
||||
/** @var int Player rank */
|
||||
|
@ -641,15 +475,17 @@ class core_media_player_test extends core_media_player {
|
|||
* @param int $rank Player rank
|
||||
* @param array $ext Array of supported extensions
|
||||
*/
|
||||
public function __construct($num = 1, $rank = 13, $ext = array('tst', 'test')) {
|
||||
public function __construct($num = 1, $rank = 13, $ext = array('mp3', 'flv', 'f4v', 'mp4')) {
|
||||
$this->ext = $ext;
|
||||
$this->rank = $rank;
|
||||
$this->num = $num;
|
||||
}
|
||||
|
||||
public function embed($urls, $name, $width, $height, $options) {
|
||||
return $this->num . ':' . medialib_test::string_urls($urls) .
|
||||
",$name,$width,$height,<!--FALLBACK-->," . medialib_test::string_options($options);
|
||||
self::pick_video_size($width, $height);
|
||||
$contents = "\ntestsource=". join("\ntestsource=", $urls) .
|
||||
"\ntestname=$name\ntestwidth=$width\ntestheight=$height\n<!--FALLBACK-->\n";
|
||||
return html_writer::span($contents, 'mediaplugin mediaplugin_test');
|
||||
}
|
||||
|
||||
public function get_supported_extensions() {
|
||||
|
@ -657,14 +493,14 @@ class core_media_player_test extends core_media_player {
|
|||
}
|
||||
|
||||
public function get_rank() {
|
||||
return $this->rank;
|
||||
return 10;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Media renderer override for testing purposes.
|
||||
*/
|
||||
class core_media_renderer_test extends core_media_renderer {
|
||||
class core_media_manager_test extends core_media_manager {
|
||||
/**
|
||||
* Access list of players as string, shortening it by getting rid of
|
||||
* repeated text.
|
||||
|
@ -677,7 +513,7 @@ class core_media_renderer_test extends core_media_renderer {
|
|||
if ($out) {
|
||||
$out .= ', ';
|
||||
}
|
||||
$out .= str_replace('core_media_player_', '', get_class($player));
|
||||
$out .= str_replace('core_media_player_', '', preg_replace('/^media_(.*)_plugin$/', '$1', get_class($player)));
|
||||
}
|
||||
return $out;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue