Introduce safe preg_split

Removes the need for extra assertions which makes the code
more readable, and reduces the overhead of an is_array check.
This commit is contained in:
Jaapio
2020-08-15 14:06:55 +02:00
parent 1ac416df3f
commit 690d9cd45f
14 changed files with 229 additions and 34 deletions
@@ -0,0 +1,66 @@
<?php
declare(strict_types=1);
namespace phpDocumentor\Reflection\Exception;
use PHPUnit\Framework\TestCase;
use const PREG_BACKTRACK_LIMIT_ERROR;
use const PREG_BAD_UTF8_ERROR;
use const PREG_BAD_UTF8_OFFSET_ERROR;
use const PREG_INTERNAL_ERROR;
use const PREG_JIT_STACKLIMIT_ERROR;
use const PREG_NO_ERROR;
use const PREG_RECURSION_LIMIT_ERROR;
/**
* @coversDefaultClass \phpDocumentor\Reflection\Exception\PcreException
*/
final class PcreExceptionTest extends TestCase
{
/**
* @covers ::createFromPhpError
* @dataProvider errorCodeProvider
*/
public function testErrorConversion(int $errorCode, string $message) : void
{
$this->assertSame($message, PcreException::createFromPhpError($errorCode)->getMessage());
}
/**
* @return array<int, (string|int)[]>
*/
public function errorCodeProvider() : array
{
return [
[
PREG_BACKTRACK_LIMIT_ERROR,
'Backtrack limit error',
],
[
PREG_RECURSION_LIMIT_ERROR,
'Recursion limit error',
],
[
PREG_BAD_UTF8_ERROR,
'Bad UTF8 error',
],
[
PREG_BAD_UTF8_OFFSET_ERROR,
'Bad UTF8 offset error',
],
[
PREG_JIT_STACKLIMIT_ERROR,
'Jit stacklimit error',
],
[
PREG_NO_ERROR,
'Unknown Pcre error',
],
[
PREG_INTERNAL_ERROR,
'Unknown Pcre error',
],
];
}
}
+48
View File
@@ -0,0 +1,48 @@
<?php
declare(strict_types=1);
namespace phpDocumentor\Reflection;
use phpDocumentor\Reflection\Exception\PcreException;
use PHPUnit\Framework\TestCase;
use function set_error_handler;
use const E_WARNING;
final class PregSplitTest extends TestCase
{
/** @var callable|null */
private $errorHandler = null;
protected function tearDown() : void
{
if ($this->errorHandler === null) {
return;
}
set_error_handler($this->errorHandler, E_WARNING);
}
/**
* @covers \phpDocumentor\Reflection\Utils::pregSplit
*/
public function testSimplePregSplit() : void
{
$result = Utils::pregSplit('/\s/', 'word split');
$this->assertSame(['word', 'split'], $result);
}
/**
* @covers \phpDocumentor\Reflection\Utils::pregSplit
*/
public function testPregSplitThrowsOnError() : void
{
//We need to disable the error handler for phpunit... because we expect some errors here
$this->errorHandler = set_error_handler(static function () : void {
}, E_WARNING);
$this->expectException(PcreException::class);
Utils::pregSplit('~InvalidRegular)Expression~', 'some word');
}
}