summaryrefslogtreecommitdiff
path: root/_test/tests/inc/parser/parser_media.test.php
blob: abbcfe2130ddb3cfc0ca5e5b69f7ed524c054d0a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
<?php
require_once 'parser.inc.php';

/**
 * Tests for the implementation of audio and video files
 *
 * @author  Michael Große <grosse@cosmocode.de>
*/
class TestOfDoku_Parser_Media extends TestOfDoku_Parser {

    function testVideoOGVExternal() {
        $file = 'http://some.where.far/away.ogv';
        $parser_response = p_get_instructions('{{' . $file . '}}');

        $calls = array (
            array('document_start',array()),
            array('p_open',array()),
            array('externalmedia',array($file,null,null,null,null,'cache','details')),
            array('cdata',array(null)),
            array('p_close',array()),
            array('document_end',array()),
        );
        $this->assertEquals(array_map('stripbyteindex',$parser_response),$calls);

        $Renderer = new Doku_Renderer_xhtml();
        $url = $Renderer->externalmedia($file,null,null,null,null,'cache','details',true);
        //print_r("url: " . $url);
        $video = '<video class="media" width="320" height="240" controls="controls">';
        $this->assertEquals(substr($url,0,66),$video);
        $source = '<source src="http://some.where.far/away.ogv" type="video/ogg" />';
        $this->assertEquals(substr($url,67,64),$source);
        // work around random token
        $a_first_part = '<a href="' . DOKU_BASE . 'lib/exe/fetch.php?cache=&amp;tok=';
        $a_second_part = '&amp;media=http%3A%2F%2Fsome.where.far%2Faway.ogv" class="media mediafile mf_ogv" title="http://some.where.far/away.ogv">';

        $substr_start = 132;
        $substr_len = strlen($a_first_part);
        $this->assertEquals($a_first_part, substr($url, $substr_start, $substr_len));

        $substr_start = strpos($url, '&amp;media', $substr_start + $substr_len);
        $this->assertNotSame(false, $substr_start, 'Substring not found.');
        $substr_len = strlen($a_second_part);
        $this->assertEquals($a_second_part, substr($url, $substr_start, $substr_len));

        $rest = 'away.ogv</a></video>'."\n";
        $substr_start = strlen($url) - strlen($rest);
        $this->assertEquals($rest, substr($url, $substr_start));
    }

    /**
     * unknown extension of external media file
     */
    function testVideoVIDExternal() {
        $file = 'http://some.where.far/away.vid';
        $parser_response = p_get_instructions('{{' . $file . '}}');

        $calls = array(
            array('document_start', array()),
            array('p_open', array()),
            array('externalmedia', array($file, null, null, null, null, 'cache', 'details')),
            array('cdata', array(null)),
            array('p_close', array()),
            array('document_end', array()),
        );
        $this->assertEquals(array_map('stripbyteindex', $parser_response), $calls);

        $Renderer = new Doku_Renderer_xhtml();
        $url = $Renderer->externalmedia($file, null, null, null, null, 'cache', 'details', true);
        // work around random token
        $a_first_part = '<a href="' . DOKU_BASE . 'lib/exe/fetch.php?tok=';
        $a_second_part = '&amp;media=http%3A%2F%2Fsome.where.far%2Faway.vid" class="media mediafile mf_vid" title="http://some.where.far/away.vid">';

        $substr_start = 0;
        $substr_len = strlen($a_first_part);
        $this->assertEquals($a_first_part, substr($url, $substr_start, $substr_len));

        $substr_start = strpos($url, '&amp;media', $substr_start + $substr_len);
        $this->assertNotSame(false, $substr_start, 'Substring not found.');
        $substr_len = strlen($a_second_part);
        $this->assertEquals($a_second_part, substr($url, $substr_start, $substr_len));

        $rest = 'away.vid</a>';
        $substr_start = strlen($url) - strlen($rest);
        $this->assertEquals($rest, substr($url, $substr_start));
    }


    function testVideoOGVInternal() {
        $file = 'wiki:kind_zu_katze.ogv';
        $parser_response = p_get_instructions('{{' . $file . '}}');

        $calls = array (
            array('document_start',array()),
            array('p_open',array()),
            array('internalmedia',array($file,null,null,null,null,'cache','details')),
            array('cdata',array(null)),
            array('p_close',array()),
            array('document_end',array()),
        );
        $this->assertEquals(array_map('stripbyteindex',$parser_response),$calls);

        $Renderer = new Doku_Renderer_xhtml();
        $url = $Renderer->externalmedia($file,null,null,null,null,'cache','details',true);

        $video = '<video class="media" width="320" height="240" controls="controls" poster="' . DOKU_BASE . 'lib/exe/fetch.php?media=wiki:kind_zu_katze.png">';
        $substr_start = 0;
        $substr_len = strlen($video);
        $this->assertEquals($video, substr($url, $substr_start, $substr_len));

        // find $source_webm in $url
        $source_webm = '<source src="' . DOKU_BASE . 'lib/exe/fetch.php?media=wiki:kind_zu_katze.webm" type="video/webm" />';
        $substr_start = strpos($url, $source_webm, $substr_start + $substr_len);
        $this->assertNotSame(false, $substr_start, 'Substring not found.');

        // find $source_ogv in $url
        $source_ogv = '<source src="' . DOKU_BASE . 'lib/exe/fetch.php?media=wiki:kind_zu_katze.ogv" type="video/ogg" />';
        $substr_start = strpos($url, $source_ogv, $substr_start + strlen($source_webm));
        $this->assertNotSame(false, $substr_start, 'Substring not found.');

        // find $a_webm in $url
        $a_webm = '<a href="' . DOKU_BASE . 'lib/exe/fetch.php?id=&amp;cache=&amp;media=wiki:kind_zu_katze.webm" class="media mediafile mf_webm" title="wiki:kind_zu_katze.webm (99.1 KB)">kind_zu_katze.webm</a>';
        $substr_start = strpos($url, $a_webm, $substr_start + strlen($source_ogv));
        $this->assertNotSame(false, $substr_start, 'Substring not found.');

        // find $a_webm in $url
        $a_ogv = '<a href="' . DOKU_BASE . 'lib/exe/fetch.php?id=&amp;cache=&amp;media=wiki:kind_zu_katze.ogv" class="media mediafile mf_ogv" title="wiki:kind_zu_katze.ogv (44.8 KB)">kind_zu_katze.ogv</a>';
        $substr_start = strpos($url, $a_ogv, $substr_start + strlen($a_webm));
        $this->assertNotSame(false, $substr_start, 'Substring not found.');

        $rest = '</video>'."\n";
        $substr_start = strlen($url) - strlen($rest);
        $this->assertEquals($rest, substr($url, $substr_start));
    }
}