MDL-66625 forumreport_summary: Adding behat
[moodle.git] / media / player / html5audio / tests / player_test.php
1 <?php
2 // This file is part of Moodle - http://moodle.org/
3 //
4 // Moodle is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 //
9 // Moodle is distributed in the hope that it will be useful,
10 // but WITHOUT ANY WARRANTY; without even the implied warranty of
11 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 // GNU General Public License for more details.
13 //
14 // You should have received a copy of the GNU General Public License
15 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
17 /**
18  * Test classes for handling embedded media.
19  *
20  * @package media_html5audio
21  * @copyright 2016 Marina Glancy
22  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
25 defined('MOODLE_INTERNAL') || die();
27 /**
28  * Test script for media embedding.
29  *
30  * @package media_html5audio
31  * @copyright 2016 Marina Glancy
32  * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
33  */
34 class media_html5audio_testcase extends advanced_testcase {
36     /**
37      * Pre-test setup. Preserves $CFG.
38      */
39     public function setUp() {
40         parent::setUp();
42         // Reset $CFG and $SERVER.
43         $this->resetAfterTest();
45         // Consistent initial setup: all players disabled.
46         \core\plugininfo\media::set_enabled_plugins('html5audio');
48         // Pretend to be using Firefox browser (must support ogg for tests to work).
49         core_useragent::instance(true, 'Mozilla/5.0 (X11; Linux x86_64; rv:46.0) Gecko/20100101 Firefox/46.0 ');
50     }
52     /**
53      * Test that plugin is returned as enabled media plugin.
54      */
55     public function test_is_installed() {
56         $sortorder = \core\plugininfo\media::get_enabled_plugins();
57         $this->assertEquals(['html5audio' => 'html5audio'], $sortorder);
58     }
60     /**
61      * Test method get_supported_extensions()
62      */
63     public function test_supported_extensions() {
64         global $CFG;
65         require_once($CFG->libdir . '/filelib.php');
67         $nativeextensions = file_get_typegroup('extension', 'html_audio');
69         // Make sure that the list of extensions from the setting is exactly the same as html_audio group.
70         $player = new media_html5audio_plugin();
71         $this->assertEmpty(array_diff($player->get_supported_extensions(), $nativeextensions));
72         $this->assertEmpty(array_diff($nativeextensions, $player->get_supported_extensions()));
73     }
75     /**
76      * Test embedding without media filter (for example for displaying file resorce).
77      */
78     public function test_embed_url() {
79         global $CFG;
81         $url = new moodle_url('http://example.org/1.wav');
83         $manager = core_media_manager::instance();
84         $embedoptions = array(
85             core_media_manager::OPTION_TRUSTED => true,
86             core_media_manager::OPTION_BLOCK => true,
87         );
89         $this->assertTrue($manager->can_embed_url($url, $embedoptions));
90         $content = $manager->embed_url($url, 'Test & file', 0, 0, $embedoptions);
92         $this->assertRegExp('~mediaplugin_html5audio~', $content);
93         $this->assertRegExp('~</audio>~', $content);
94         $this->assertRegExp('~title="Test &amp; file"~', $content);
95         // Do not set default width/height (it's an audio after all).
96         $this->assertNotRegExp('~width=~', $content);
97         $this->assertNotRegExp('~height=~', $content);
99         // This plugin ignores size settings.
100         $this->assertNotRegExp('~width=~', $content);
101         $this->assertNotRegExp('~height=~', $content);
102     }
104     /**
105      * Test that mediaplugin filter replaces a link to the supported file with media tag.
106      *
107      * filter_mediaplugin is enabled by default.
108      */
109     public function test_embed_link() {
110         $url = new moodle_url('http://example.org/some_filename.wav');
111         $text = html_writer::link($url, 'Watch this one');
112         $content = format_text($text, FORMAT_HTML);
114         $this->assertRegExp('~mediaplugin_html5audio~', $content);
115         $this->assertRegExp('~</audio>~', $content);
116         $this->assertRegExp('~title="Watch this one"~', $content);
117         $this->assertNotRegExp('~<track\b~i', $content);
118     }
120     /**
121      * Test that mediaplugin filter does not work on <audio> tags.
122      */
123     public function test_embed_media() {
124         $url = new moodle_url('http://example.org/some_filename.wav');
125         $trackurl = new moodle_url('http://example.org/some_filename.vtt');
126         $text = '<audio controls="true"><source src="'.$url.'"/><source src="somethinginvalid"/>' .
127             '<track src="'.$trackurl.'">Unsupported text</audio>';
128         $content = format_text($text, FORMAT_HTML);
130         $this->assertNotRegExp('~mediaplugin_html5audio~', $content);
131         $this->assertEquals(clean_text($text, FORMAT_HTML), $content);
132     }