177 lines
4.4 KiB
PHP
177 lines
4.4 KiB
PHP
<?php
|
|||
|
|
|
||
|
|
namespace Jasny\Twig;
|
||
|
|
|
||
|
|
use Jasny\Twig\PcreExtension;
|
||
|
|
use Jasny\Twig\TestHelper;
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @covers Jasny\Twig\PcreExtension
|
||
|
|
*/
|
||
|
|
class PcreExtensionTest extends \PHPUnit_Framework_TestCase
|
||
|
|
{
|
||
|
|
use TestHelper;
|
||
|
|
|
||
|
|
protected function getExtension()
|
||
|
|
{
|
||
|
|
return new PcreExtension();
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function testGetName()
|
||
|
|
{
|
||
|
|
$this->assertEquals('jasny/pcre', $this->getExtension()->getName());
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function testQuote()
|
||
|
|
{
|
||
|
|
$this->assertRender('foo\(\)', '{{ "foo()"|preg_quote }}');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testQuoteDelimiter()
|
||
|
|
{
|
||
|
|
$this->assertRender('foo\@bar', '{{ "foo@bar"|preg_quote("@") }}');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testPregMatch()
|
||
|
|
{
|
||
|
|
$this->assertRender('YES', '{% if "foo"|preg_match("/oo/") %}YES{% else %}NO{% endif %}');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testPregMatchNo()
|
||
|
|
{
|
||
|
|
$this->assertRender('NO', '{% if "fod"|preg_match("/oo/") %}YES{% else %}NO{% endif %}');
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @expectedException \Twig_Error_Runtime
|
||
|
|
*/
|
||
|
|
public function testPregMatchError()
|
||
|
|
{
|
||
|
|
$this->render('{% if "fod"|preg_match("/o//o/") %}YES{% else %}NO{% endif %}');
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function testPregGet()
|
||
|
|
{
|
||
|
|
$this->assertRender('d', '{{ "food"|preg_get("/oo(.)/", 1) }}');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testPregGetDefault()
|
||
|
|
{
|
||
|
|
$this->assertRender('ood', '{{ "food"|preg_get("/oo(.)/") }}');
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function testPregGetAll()
|
||
|
|
{
|
||
|
|
$this->assertRender('d|t|m', '{{ "food woot should doom"|preg_get_all("/oo(.)/", 1)|join("|") }}');
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testPregGetAllDefault()
|
||
|
|
{
|
||
|
|
$this->assertRender('ood|oot|oom', '{{ "food woot doom"|preg_get_all("/oo(.)/")|join("|") }}');
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function testPregGrep()
|
||
|
|
{
|
||
|
|
$this->assertRender(
|
||
|
|
'world|how|you',
|
||
|
|
'{{ ["hello", "sweet", "world", "how", "are", "you"]|preg_grep("/o./")|join("|") }}'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testPregGrepInvert()
|
||
|
|
{
|
||
|
|
$this->assertRender(
|
||
|
|
'hello|sweet|are',
|
||
|
|
'{{ ["hello", "sweet", "world", "how", "are", "you"]|preg_grep("/o./", "invert")|join("|") }}'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function testReplace()
|
||
|
|
{
|
||
|
|
$this->assertRender(
|
||
|
|
'the quick brawen faxe jumped aveer the lazy dage',
|
||
|
|
'{{ "the quick brown fox jumped over the lazy dog"|preg_replace("/o(\\\\w)/", "a$1e") }}'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testReplaceLimit()
|
||
|
|
{
|
||
|
|
$this->assertRender(
|
||
|
|
'the quick brawen faxe jumped over the lazy dog',
|
||
|
|
'{{ "the quick brown fox jumped over the lazy dog"|preg_replace("/o(\\\\w)/", "a$1e", 2) }}'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
public function testReplaceWithArray()
|
||
|
|
{
|
||
|
|
$this->assertRender(
|
||
|
|
'hello|sweet|wareld|hawe|are|yaue',
|
||
|
|
'{{ ["hello", "sweet", "world", "how", "are", "you"]|preg_replace("/o(.)/", "a$1e")|join("|") }}'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @expectedException Twig_Error_Runtime
|
||
|
|
*/
|
||
|
|
public function testReplaceAssertNoEval()
|
||
|
|
{
|
||
|
|
$this->render('{{ "foo"|preg_replace("/o/ei", "strtoupper") }}');
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function testFilter()
|
||
|
|
{
|
||
|
|
$this->assertRender(
|
||
|
|
'wareld|hawe|yaue',
|
||
|
|
'{{ ["hello", "sweet", "world", "how", "are", "you"]|preg_filter("/o(.)/", "a$1e")|join("|") }}'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @expectedException Twig_Error_Runtime
|
||
|
|
*/
|
||
|
|
public function testFilterAssertNoEval()
|
||
|
|
{
|
||
|
|
$this->render('{{ "foo"|preg_filter("/o/ei", "strtoupper") }}');
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function testSplit()
|
||
|
|
{
|
||
|
|
$this->assertRender(
|
||
|
|
'the quick br|n f| jumped |er the lazy d|',
|
||
|
|
'{{ "the quick brown fox jumped over the lazy dog"|preg_split("/o(\\\\w)/", "a$1e")|join("|") }}'
|
||
|
|
);
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
public function filterProvider()
|
||
|
|
{
|
||
|
|
return [
|
||
|
|
['preg_quote'],
|
||
|
|
['preg_match'],
|
||
|
|
['preg_get'],
|
||
|
|
['preg_get_all'],
|
||
|
|
['preg_grep'],
|
||
|
|
['preg_replace'],
|
||
|
|
['preg_filter'],
|
||
|
|
['preg_split']
|
||
|
|
];
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* @dataProvider filterProvider
|
||
|
|
*
|
||
|
|
* @param string $filter
|
||
|
|
*/
|
||
|
|
public function testWithNull($filter)
|
||
|
|
{
|
||
|
|
$this->assertRender('-', '{{ null|' . $filter . '("//")|default("-") }}');
|
||
|
|
}
|
||
|
|
}
|