mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
49267dbbc4
BUGFIX HtmlEditorField not inserting shortcodes correctly (trac #6868)
113 lines
3.8 KiB
PHP
113 lines
3.8 KiB
PHP
<?php
|
|
/**
|
|
* @package sapphire
|
|
* @subpackage tests
|
|
*/
|
|
class ShortcodeParserTest extends SapphireTest {
|
|
|
|
protected $arguments, $contents, $tagName, $parser;
|
|
|
|
public function setUp() {
|
|
ShortcodeParser::get('test')->register('test_shortcode', array($this, 'shortcodeSaver'));
|
|
$this->parser = ShortcodeParser::get('test');
|
|
|
|
parent::setUp();
|
|
}
|
|
|
|
/**
|
|
* Tests that valid short codes that have not been registered are not replaced.
|
|
*/
|
|
public function testNotRegisteredShortcode() {
|
|
$this->assertEquals('[not_shortcode]', $this->parser->parse('[not_shortcode]'));
|
|
$this->assertEquals('[not_shortcode /]', $this->parser->parse('[not_shortcode /]'));
|
|
$this->assertEquals('[not_shortcode foo="bar"]', $this->parser->parse('[not_shortcode foo="bar"]'));
|
|
$this->assertEquals('[not_shortcode]a[/not_shortcode]', $this->parser->parse('[not_shortcode]a[/not_shortcode]'));
|
|
}
|
|
|
|
public function testSimpleTag() {
|
|
$tests = array('[test_shortcode]', '[test_shortcode ]', '[test_shortcode/]', '[test_shortcode /]');
|
|
|
|
foreach($tests as $test) {
|
|
$this->parser->parse($test);
|
|
|
|
$this->assertEquals(array(), $this->arguments, $test);
|
|
$this->assertEquals('', $this->contents, $test);
|
|
$this->assertEquals('test_shortcode', $this->tagName, $test);
|
|
}
|
|
}
|
|
|
|
public function testOneArgument() {
|
|
$tests = array (
|
|
'[test_shortcode foo="bar"]',
|
|
"[test_shortcode foo='bar']",
|
|
'[test_shortcode foo = "bar" /]'
|
|
);
|
|
|
|
foreach($tests as $test) {
|
|
$this->parser->parse($test);
|
|
|
|
$this->assertEquals(array('foo' => 'bar'), $this->arguments, $test);
|
|
$this->assertEquals('', $this->contents, $test);
|
|
$this->assertEquals('test_shortcode', $this->tagName, $test);
|
|
}
|
|
}
|
|
|
|
public function testMultipleArguments() {
|
|
$this->parser->parse('[test_shortcode foo = "bar" bar=\'foo\' baz="buz"]');
|
|
|
|
$this->assertEquals(array('foo' => 'bar', 'bar' => 'foo', 'baz' => 'buz'), $this->arguments);
|
|
$this->assertEquals('', $this->contents);
|
|
$this->assertEquals('test_shortcode', $this->tagName);
|
|
}
|
|
|
|
public function testEnclosing() {
|
|
$this->parser->parse('[test_shortcode]foo[/test_shortcode]');
|
|
|
|
$this->assertEquals(array(), $this->arguments);
|
|
$this->assertEquals('foo', $this->contents);
|
|
$this->assertEquals('test_shortcode', $this->tagName);
|
|
}
|
|
|
|
public function testEnclosingWithArguments() {
|
|
$this->parser->parse('[test_shortcode foo = "bar" bar=\'foo\' baz="buz"]foo[/test_shortcode]');
|
|
|
|
$this->assertEquals(array('foo' => 'bar', 'bar' => 'foo', 'baz' => 'buz'), $this->arguments);
|
|
$this->assertEquals('foo', $this->contents);
|
|
$this->assertEquals('test_shortcode', $this->tagName);
|
|
}
|
|
|
|
public function testShortcodeEscaping() {
|
|
$this->assertEquals('[test_shortcode]', $this->parser->parse('[[test_shortcode]]'));
|
|
$this->assertEquals('[test_shortcode]content[/test_shortcode]', $this->parser->parse('[[test_shortcode]content[/test_shortcode]]'));
|
|
}
|
|
|
|
public function testUnquotedArguments() {
|
|
$this->assertEquals('', $this->parser->parse('[test_shortcode,foo=bar,baz = buz]'));
|
|
$this->assertEquals(array('foo' => 'bar', 'baz' => 'buz'), $this->arguments);
|
|
}
|
|
|
|
public function testSelfClosingTag() {
|
|
$this->assertEquals (
|
|
'morecontent',
|
|
$this->parser->parse('[test_shortcode,id="1"/]more[test_shortcode,id="2"]content[/test_shortcode]'),
|
|
'Assert that self-closing tags are respected during parsing.'
|
|
);
|
|
|
|
$this->assertEquals(2, $this->arguments['id']);
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------------------------------------------
|
|
|
|
/**
|
|
* Stores the result of a shortcode parse in object properties for easy testing access.
|
|
*/
|
|
public function shortcodeSaver($arguments, $content = null, $parser, $tagName = null) {
|
|
$this->arguments = $arguments;
|
|
$this->contents = $content;
|
|
$this->tagName = $tagName;
|
|
|
|
return $content;
|
|
}
|
|
|
|
}
|