*/
class MediaTest extends ParserTestBase
{
function testInternal() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{img.gif}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia', ['img.gif', null, null, null, null, 'cache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testInternalLinkOnly() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{img.gif?linkonly}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia', ['img.gif', null, null, null, null, 'cache', 'linkonly']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testNotImage() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{foo.txt?10x10|Some File}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia', ['foo.txt', 'Some File', null, 10, 10, 'cache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testInternalLAlign() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{img.gif }} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia', ['img.gif', null, 'left', null, null, 'cache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testInternalRAlign() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{ img.gif}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia', ['img.gif', null, 'right', null, null, 'cache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testInternalCenter() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{ img.gif }} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia', ['img.gif', null, 'center', null, null, 'cache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testInternalParams() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{img.gif?50x100nocache}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia', ['img.gif', null, null, '50', '100', 'nocache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testInternalTitle() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{img.gif?50x100|Some Image}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia', ['img.gif', 'Some Image', null, '50', '100', 'cache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testExternal() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{http://www.google.com/img.gif}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['externalmedia', ['http://www.google.com/img.gif', null, null, null, null, 'cache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testExternalParams() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{http://www.google.com/img.gif?50x100nocache}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['externalmedia',
['http://www.google.com/img.gif', null, null, '50', '100', 'nocache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testExternalTitle() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{http://www.google.com/img.gif?50x100|Some Image}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['externalmedia',
['http://www.google.com/img.gif', 'Some Image', null, '50', '100', 'cache', 'details']],
['cdata', [' Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testNested() {
$this->P->addMode('media', new Media());
$this->P->parse('Foo {{img.gif|{{foo.gif|{{bar.gif|Bar}}}}}} Bar');
$calls = [
['document_start', []],
['p_open', []],
['cdata', ["\n" . 'Foo ']],
['internalmedia',
['img.gif', '{{foo.gif|{{bar.gif|Bar', null, null, null, 'cache', 'details']],
['cdata', ['}}}} Bar']],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $this->H->calls);
}
function testVideoOGVExternal() {
$file = 'http://some.where.far/away.ogv';
$parser_response = p_get_instructions('{{' . $file . '}}');
$calls = [
['document_start',[]],
['p_open',[]],
['externalmedia',[$file,null,null,null,null,'cache','details']],
['cdata',[null]],
['p_close',[]],
['document_end',[]],
];
$this->assertCalls($calls, $parser_response);
$Renderer = new Doku_Renderer_xhtml();
$url = $Renderer->externalmedia($file,null,null,null,null,'cache','details',true);
//print_r("url: " . $url);
$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 = [
['document_start', []],
['p_open', []],
['externalmedia', [$file, null, null, null, null, 'cache', 'details']],
['cdata', [null]],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $parser_response);
$Renderer = new Doku_Renderer_xhtml();
$url = $Renderer->externalmedia($file, null, null, null, null, 'cache', 'details', true);
// work around random token
$a_first_part = '';
$substr_start = 0;
$substr_len = strlen($a_first_part);
$this->assertEquals($a_first_part, substr($url, $substr_start, $substr_len));
$substr_start = strpos($url, '&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';
$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 = [
['document_start',[]],
['p_open',[]],
['internalmedia',[$file,null,null,null,null,'cache','details']],
['cdata',[null]],
['p_close',[]],
['document_end',[]],
];
$this->assertCalls($calls, $parser_response);
$Renderer = new Doku_Renderer_xhtml();
$url = $Renderer->externalmedia($file,null,null,null,null,'cache','details',true);
$video = ''."\n";
$substr_start = strlen($url) - strlen($rest);
$this->assertEquals($rest, substr($url, $substr_start));
}
function testVideoInternalTitle() {
$file = 'wiki:kind_zu_katze.ogv';
$title = 'Single quote: \' Ampersand: &';
$Renderer = new Doku_Renderer_xhtml();
$url = $Renderer->externalmedia($file, $title, null, null, null, 'cache', 'details', true);
// make sure the title is escaped just once
$this->assertEquals(hsc($title), substr($url, 28, 37));
}
function testSimpleLinkText() {
$file = 'wiki:dokuwiki-128.png';
$parser_response = p_get_instructions('{{' . $file . '|This is a simple text.}}');
$calls = [
['document_start',[]],
['p_open',[]],
['internalmedia',[$file,'This is a simple text.',null,null,null,'cache','details']],
['cdata',[null]],
['p_close',[]],
['document_end',[]],
];
$this->assertCalls($calls, $parser_response);
}
function testLinkTextWithWavedBrackets_1() {
$file = 'wiki:dokuwiki-128.png';
$parser_response = p_get_instructions('{{' . $file . '|We got a { here.}}');
$calls = [
['document_start',[]],
['p_open',[]],
['internalmedia',[$file,'We got a { here.',null,null,null,'cache','details']],
['cdata',[null]],
['p_close',[]],
['document_end',[]],
];
$this->assertCalls($calls, $parser_response);
}
function testLinkTextWithWavedBrackets_2() {
$file = 'wiki:dokuwiki-128.png';
$parser_response = p_get_instructions('{{' . $file . '|We got a } here.}}');
$calls = [
['document_start',[]],
['p_open',[]],
['internalmedia',[$file,'We got a } here.',null,null,null,'cache','details']],
['cdata',[null]],
['p_close',[]],
['document_end',[]],
];
$this->assertCalls($calls, $parser_response);
}
function testAlignFromWhitespace() {
// DW's historical whitespace-inside-braces alignment still works.
$file = 'wiki:image.png';
$parser_response = p_get_instructions('{{ ' . $file . '}}');
$calls = [
['document_start', []],
['p_open', []],
['internalmedia', [$file, null, 'right', null, null, 'cache', 'details']],
['cdata', [null]],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $parser_response);
}
function testAlignFromParameter() {
$file = 'wiki:image.png';
$parser_response = p_get_instructions('{{' . $file . '?left}}');
$calls = [
['document_start', []],
['p_open', []],
['internalmedia', [$file, null, 'left', null, null, 'cache', 'details']],
['cdata', [null]],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $parser_response);
}
function testAlignParameterBeatsWhitespace() {
// Explicit ?center wins over whitespace-derived 'left' (trailing space).
$file = 'wiki:image.png';
$parser_response = p_get_instructions('{{' . $file . '?center }}');
$calls = [
['document_start', []],
['p_open', []],
['internalmedia', [$file, null, 'center', null, null, 'cache', 'details']],
['cdata', [null]],
['p_close', []],
['document_end', []],
];
$this->assertCalls($calls, $parser_response);
}
function testLinkTextWithWavedBrackets_3() {
$file = 'wiki:dokuwiki-128.png';
$parser_response = p_get_instructions('{{' . $file . '|We got a { and a } here.}}');
$calls = [
['document_start',[]],
['p_open',[]],
['internalmedia',[$file,'We got a { and a } here.',null,null,null,'cache','details']],
['cdata',[null]],
['p_close',[]],
['document_end',[]],
];
$this->assertCalls($calls, $parser_response);
}
}