+ */
+class DeprecationErrorHandler
+{
+ private static $isRegistered = false;
+
+ public static function register($mode = false)
+ {
+ if (self::$isRegistered) {
+ return;
+ }
+ $deprecations = array(
+ 'remainingCount' => 0,
+ 'legacyCount' => 0,
+ 'otherCount' => 0,
+ 'remaining' => array(),
+ 'legacy' => array(),
+ 'other' => array(),
+ );
+ $deprecationHandler = function ($type, $msg, $file, $line, $context) use (&$deprecations, $mode) {
+ if (E_USER_DEPRECATED !== $type) {
+ return \PHPUnit_Util_ErrorHandler::handleError($type, $msg, $file, $line, $context);
+ }
+
+ $trace = debug_backtrace(PHP_VERSION_ID >= 50400 ? DEBUG_BACKTRACE_IGNORE_ARGS | DEBUG_BACKTRACE_PROVIDE_OBJECT : true);
+
+ $i = count($trace);
+ while (isset($trace[--$i]['class']) && ('ReflectionMethod' === $trace[$i]['class'] || 0 === strpos($trace[$i]['class'], 'PHPUnit_'))) {
+ // No-op
+ }
+
+ if (isset($trace[$i]['object']) || isset($trace[$i]['class'])) {
+ $class = isset($trace[$i]['object']) ? get_class($trace[$i]['object']) : $trace[$i]['class'];
+ $method = $trace[$i]['function'];
+
+ $group = 0 === strpos($method, 'testLegacy') || 0 === strpos($method, 'provideLegacy') || 0 === strpos($method, 'getLegacy') || strpos($class, '\Legacy') || in_array('legacy', \PHPUnit_Util_Test::getGroups($class, $method), true) ? 'legacy' : 'remaining';
+
+ if ('legacy' !== $group && 'weak' !== $mode) {
+ $ref =& $deprecations[$group][$msg]['count'];
+ ++$ref;
+ $ref =& $deprecations[$group][$msg][$class.'::'.$method];
+ ++$ref;
+ }
+ } else {
+ $group = 'other';
+ $ref =& $deprecations[$group][$msg]['count'];
+ ++$ref;
+ }
+ ++$deprecations[$group.'Count'];
+ };
+ $oldErrorHandler = set_error_handler($deprecationHandler);
+
+ if (null !== $oldErrorHandler) {
+ restore_error_handler();
+ if (array('PHPUnit_Util_ErrorHandler', 'handleError') === $oldErrorHandler) {
+ restore_error_handler();
+ self::register($mode);
+ }
+ } else {
+ self::$isRegistered = true;
+ if (self::hasColorSupport()) {
+ $colorize = function ($str, $red) {
+ $color = $red ? '41;37' : '43;30';
+
+ return "\x1B[{$color}m{$str}\x1B[0m";
+ };
+ } else {
+ $colorize = function ($str) {return $str;};
+ }
+ register_shutdown_function(function () use ($mode, &$deprecations, $deprecationHandler, $colorize) {
+ $currErrorHandler = set_error_handler('var_dump');
+ restore_error_handler();
+
+ if ($currErrorHandler !== $deprecationHandler) {
+ echo "\n", $colorize('THE ERROR HANDLER HAS CHANGED!', true), "\n";
+ }
+
+ $cmp = function ($a, $b) {
+ return $b['count'] - $a['count'];
+ };
+
+ foreach (array('remaining', 'legacy', 'other') as $group) {
+ if ($deprecations[$group.'Count']) {
+ echo "\n", $colorize(sprintf('%s deprecation notices (%d)', ucfirst($group), $deprecations[$group.'Count']), 'legacy' !== $group), "\n";
+
+ uasort($deprecations[$group], $cmp);
+
+ foreach ($deprecations[$group] as $msg => $notices) {
+ echo "\n", rtrim($msg, '.'), ': ', $notices['count'], "x\n";
+
+ arsort($notices);
+
+ foreach ($notices as $method => $count) {
+ if ('count' !== $method) {
+ echo ' ', $count, 'x in ', preg_replace('/(.*)\\\\(.*?::.*?)$/', '$2 from $1', $method), "\n";
+ }
+ }
+ }
+ }
+ }
+ if (!empty($notices)) {
+ echo "\n";
+ }
+ if ('weak' !== $mode && ($deprecations['remaining'] || $deprecations['other'])) {
+ exit(1);
+ }
+ });
+ }
+ }
+
+ private static function hasColorSupport()
+ {
+ if ('\\' === DIRECTORY_SEPARATOR) {
+ return false !== getenv('ANSICON') || 'ON' === getenv('ConEmuANSI');
+ }
+
+ return defined('STDOUT') && function_exists('posix_isatty') && @posix_isatty(STDOUT);
+ }
+}
diff --git a/core/vendor/symfony/phpunit-bridge/LICENSE b/core/vendor/symfony/phpunit-bridge/LICENSE
new file mode 100644
index 0000000..ef1cde9
--- /dev/null
+++ b/core/vendor/symfony/phpunit-bridge/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2014-2015 Fabien Potencier
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is furnished
+to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/core/vendor/symfony/phpunit-bridge/README.md b/core/vendor/symfony/phpunit-bridge/README.md
new file mode 100644
index 0000000..7d84a31
--- /dev/null
+++ b/core/vendor/symfony/phpunit-bridge/README.md
@@ -0,0 +1,43 @@
+PHPUnit Bridge
+==============
+
+Provides utilities for PHPUnit, especially user deprecation notices management.
+
+It comes with the following features:
+
+ * disable the garbage collector;
+ * auto-register `class_exists` to load Doctrine annotations;
+ * print a user deprecation notices summary at the end of the test suite.
+
+By default any non-legacy-tagged deprecation notice will make tests fail.
+This can be changed by setting the SYMFONY_DEPRECATIONS_HELPER environment
+variable to `weak`. This will make the bridge ignore deprecation notices and
+is useful to projects that must use deprecated interfaces for backward
+compatibility reasons.
+
+A summary of deprecation notices is displayed at the end of the test suite:
+
+ * **Legacy** deprecation notices denote tests that explicitly test some legacy
+ interfaces. There are four ways to mark a test as legacy:
+ - make its class start with the `Legacy` prefix;
+ - make its method start with `testLegacy`;
+ - make its data provider start with `provideLegacy` or `getLegacy`;
+ - add the `@group legacy` annotation to its class or method.
+ * **Remaining/Other** deprecation notices are all other (non-legacy)
+ notices, grouped by message, test class and method.
+
+Usage
+-----
+
+Add this bridge to the `require-dev` section of your composer.json file
+(not in `require`) with e.g. `composer require --dev "symfony/phpunit-bridge"`.
+
+When running `phpunit`, you will see a summary of deprecation notices at the end
+of the test suite.
+
+Deprecation notices in the **Remaining/Other** section need some thought.
+You have to decide either to:
+
+ * update your code to not use deprecated interfaces anymore, thus gaining better
+ forward compatibility;
+ * or move them to the **Legacy** section (by using one of the above way).
diff --git a/core/vendor/symfony/phpunit-bridge/bootstrap.php b/core/vendor/symfony/phpunit-bridge/bootstrap.php
new file mode 100644
index 0000000..1640895
--- /dev/null
+++ b/core/vendor/symfony/phpunit-bridge/bootstrap.php
@@ -0,0 +1,19 @@
+=5.5.9"
+ },
+ "suggest": {
+ "symfony/debug": "For tracking deprecated interfaces usages at runtime with DebugClassLoader"
+ },
+ "autoload": {
+ "files": [ "bootstrap.php" ],
+ "psr-4": { "Symfony\\Bridge\\PhpUnit\\": "" }
+ },
+ "minimum-stability": "dev",
+ "extra": {
+ "branch-alias": {
+ "dev-master": "3.0-dev"
+ }
+ }
+}
diff --git a/core/vendor/symfony/phpunit-bridge/phpunit.xml.dist b/core/vendor/symfony/phpunit-bridge/phpunit.xml.dist
new file mode 100644
index 0000000..7f631b2
--- /dev/null
+++ b/core/vendor/symfony/phpunit-bridge/phpunit.xml.dist
@@ -0,0 +1,28 @@
+
+
+