9 Commits
Author SHA1 Message Date
Jeremy Mikola cc3257181c Handle preg_quote changes for PHP 7.3 (#14)
* Add PHP 7.3 to Travis

* Prepare preg_replace() replacements by PHP version

PHP 7.3+ requires the pattern to expect preg_quote() to escape `#` characters in the event pattern.
2019-02-12 11:00:06 -05:00
Jeremy Mikola 544fca2b55 Merge pull request #11 2018-04-12 09:45:06 -04:00
Jeremy Mikola f32bd8592f Disable xdebug for Travis CI builds 2018-04-12 09:37:27 -04:00
Jeremy Mikola 392eff7dc6 Add Composer directories to Travis CI cache 2018-04-12 09:34:50 -04:00
Jeremy Mikola bcb29ff342 Add PHP 7.1 and 7.2 test environments 2018-04-12 09:34:50 -04:00
Jeremy Mikola 8733d7382b Add PHPUnit dev dependency and remove HHVM test env 2018-04-12 09:34:50 -04:00
Casey McLaughlin fe0da3a28b Fixed travis.yml for PHP5.3 and PHP7 2018-04-11 14:56:53 -04:00
Casey McLaughlin 5ed48b24cb Added support for Symfony event-dispatcher v4 2018-04-11 14:08:00 -04:00
Jeremy Mikola 65d13be38c Removed unused environment variable 2016-09-22 19:31:47 -04:00
7 changed files with 75 additions and 34 deletions
+18 -15
View File
@@ -1,27 +1,30 @@
language: php
dist: trusty
sudo: false
php:
- 5.3
- 5.4
- 5.5
- 5.6
- 7.0
- hhvm
- 7.1
- 7.2
- 7.3
cache:
directories:
- ${HOME}/.composer/cache/files
matrix:
fast_finish: true
allow_failures:
- php: hhvm
- env: SYMFONY_VERSION=3.0.*
fast_finish: true
include:
- php: 5.3
dist: precise
env: COMPOSER_FLAGS="--prefer-lowest"
include:
- php: 5.3
env: COMPOSER_FLAGS="--prefer-lowest"
before_script:
- phpenv config-rm xdebug.ini
- composer update --no-interaction --no-progress --no-suggest ${COMPOSER_FLAGS}
before_install:
- travis_retry composer self-update
install:
- composer update ${COMPOSER_FLAGS} --no-interaction
script:
- vendor/bin/phpunit -v
+4 -1
View File
@@ -10,7 +10,10 @@
],
"require": {
"php": ">=5.3.2",
"symfony/event-dispatcher": "^2.3 || ^3.0"
"symfony/event-dispatcher": "^2.3 || ^3.0 || ^4.0"
},
"require-dev": {
"phpunit/phpunit": "^4.8.36 || ^6.4"
},
"autoload": {
"psr-0": { "Jmikola": "src/" }
@@ -12,18 +12,7 @@ class ListenerPattern
protected $priority;
protected $regex;
private static $replacements = array(
// Trailing single-wildcard with separator prefix
'/\\\\\.\\\\\*$/' => '(?:\.\w+)?',
// Single-wildcard with separator prefix
'/\\\\\.\\\\\*/' => '(?:\.\w+)',
// Single-wildcard without separator prefix
'/(?<!\\\\\.)\\\\\*/' => '(?:\w+)',
// Multi-wildcard with separator prefix
'/\\\\\.#/' => '(?:\.\w+)*',
// Multi-wildcard without separator prefix
'/(?<!\\\\\.)#/' => '(?:|\w+(?:\.\w+)*)',
);
private static $replacements;
/**
* Constructor.
@@ -110,10 +99,52 @@ class ListenerPattern
*/
private function createRegex($eventPattern)
{
$replacements = self::getReplacements();
return sprintf('/^%s$/', preg_replace(
array_keys(self::$replacements),
array_values(self::$replacements),
array_keys($replacements),
array_values($replacements),
preg_quote($eventPattern, '/')
));
}
/**
* Returns preg_replace() replacements for preparing the event pattern.
*
* @return array
*/
private static function getReplacements()
{
if (null !== self::$replacements) {
return self::$replacements;
}
self::$replacements = array(
// Trailing single-wildcard with separator prefix
'/\\\\\.\\\\\*$/' => '(?:\.\w+)?',
// Single-wildcard with separator prefix
'/\\\\\.\\\\\*/' => '(?:\.\w+)',
// Single-wildcard without separator prefix
'/(?<!\\\\\.)\\\\\*/' => '(?:\w+)',
);
// preg_quote() escapes `#` in PHP 7.3+
if (PHP_VERSION_ID >= 70300) {
self::$replacements += array(
// Multi-wildcard with separator prefix
'/\\\\\.\\\\\#/' => '(?:\.\w+)*',
// Multi-wildcard without separator prefix
'/(?<!\\\\\.)\\\\\#/' => '(?:|\w+(?:\.\w+)*)',
);
} else {
self::$replacements += array(
// Multi-wildcard with separator prefix
'/\\\\\.#/' => '(?:\.\w+)*',
// Multi-wildcard without separator prefix
'/(?<!\\\\\.)#/' => '(?:|\w+(?:\.\w+)*)',
);
}
return self::$replacements;
}
}
@@ -3,8 +3,9 @@
namespace Jmikola\Tests\WildcardEventDispatcher;
use Jmikola\WildcardEventDispatcher\LazyListenerPattern;
use PHPUnit\Framework\TestCase;
class LazyListenerPatternTest extends \PHPUnit_Framework_TestCase
class LazyListenerPatternTest extends TestCase
{
/**
* @expectedException InvalidArgumentException
@@ -3,8 +3,9 @@
namespace Jmikola\Tests\WildcardEventDispatcher;
use Jmikola\WildcardEventDispatcher\ListenerPattern;
use PHPUnit\Framework\TestCase;
class ListenerPatternTest extends \PHPUnit_Framework_TestCase
class ListenerPatternTest extends TestCase
{
/**
* @dataProvider providePatternsAndMatches
@@ -4,8 +4,9 @@ namespace Jmikola\Tests\WildcardEventDispatcher;
use Jmikola\WildcardEventDispatcher\WildcardEventDispatcher;
use Symfony\Component\EventDispatcher\Event;
use PHPUnit\Framework\TestCase;
class WildcardEventDispatcherFunctionalTest extends \PHPUnit_Framework_TestCase
class WildcardEventDispatcherFunctionalTest extends TestCase
{
const coreRequest = 'core.request';
const coreException = 'core.exception';
@@ -4,8 +4,9 @@ namespace Jmikola\Tests\WildcardEventDispatcher;
use Jmikola\WildcardEventDispatcher\WildcardEventDispatcher;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use PHPUnit\Framework\TestCase;
class EventDispatcherTest extends \PHPUnit_Framework_TestCase
class EventDispatcherTest extends TestCase
{
private $dispatcher;
private $innerDispatcher;