Update to Drupal 8.0.0 beta 14. For more information, see https://drupal.org/node/2544542
This commit is contained in:
parent
3b2511d96d
commit
81ccda77eb
2155 changed files with 54307 additions and 46870 deletions
3
core/vendor/symfony/http-foundation/.gitignore
vendored
Normal file
3
core/vendor/symfony/http-foundation/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
vendor/
|
||||
composer.lock
|
||||
phpunit.xml
|
|
@ -67,6 +67,14 @@ class MimeTypeGuesser implements MimeTypeGuesserInterface
|
|||
return self::$instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resets the singleton instance.
|
||||
*/
|
||||
public static function reset()
|
||||
{
|
||||
self::$instance = null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers all natively provided mime type guessers.
|
||||
*/
|
||||
|
|
|
@ -26,7 +26,10 @@ class JsonResponse extends Response
|
|||
{
|
||||
protected $data;
|
||||
protected $callback;
|
||||
protected $encodingOptions;
|
||||
|
||||
// Encode <, >, ', &, and " for RFC4627-compliant JSON, which may also be embedded into HTML.
|
||||
// 15 === JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT
|
||||
protected $encodingOptions = 15;
|
||||
|
||||
/**
|
||||
* Constructor.
|
||||
|
@ -43,9 +46,6 @@ class JsonResponse extends Response
|
|||
$data = new \ArrayObject();
|
||||
}
|
||||
|
||||
// Encode <, >, ', &, and " for RFC4627-compliant JSON, which may also be embedded into HTML.
|
||||
$this->encodingOptions = JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_AMP | JSON_HEX_QUOT;
|
||||
|
||||
$this->setData($data);
|
||||
}
|
||||
|
||||
|
@ -95,34 +95,58 @@ class JsonResponse extends Response
|
|||
*/
|
||||
public function setData($data = array())
|
||||
{
|
||||
$errorHandler = null;
|
||||
$errorHandler = set_error_handler(function () use (&$errorHandler) {
|
||||
if (JSON_ERROR_NONE !== json_last_error()) {
|
||||
return;
|
||||
if (defined('HHVM_VERSION')) {
|
||||
// HHVM does not trigger any warnings and let exceptions
|
||||
// thrown from a JsonSerializable object pass through.
|
||||
// If only PHP did the same...
|
||||
$data = json_encode($data, $this->encodingOptions);
|
||||
} else {
|
||||
try {
|
||||
if (PHP_VERSION_ID < 50400) {
|
||||
// PHP 5.3 triggers annoying warnings for some
|
||||
// types that can't be serialized as JSON (INF, resources, etc.)
|
||||
// but doesn't provide the JsonSerializable interface.
|
||||
set_error_handler('var_dump', 0);
|
||||
$data = @json_encode($data, $this->encodingOptions);
|
||||
} else {
|
||||
// PHP 5.4 and up wrap exceptions thrown by JsonSerializable
|
||||
// objects in a new exception that needs to be removed.
|
||||
// Fortunately, PHP 5.5 and up do not trigger any warning anymore.
|
||||
if (PHP_VERSION_ID < 50500) {
|
||||
// Clear json_last_error()
|
||||
json_encode(null);
|
||||
$errorHandler = set_error_handler('var_dump');
|
||||
restore_error_handler();
|
||||
set_error_handler(function () use ($errorHandler) {
|
||||
if (JSON_ERROR_NONE === json_last_error()) {
|
||||
return $errorHandler && false !== call_user_func_array($errorHandler, func_get_args());
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$data = json_encode($data, $this->encodingOptions);
|
||||
}
|
||||
|
||||
if (PHP_VERSION_ID < 50500) {
|
||||
restore_error_handler();
|
||||
}
|
||||
} catch (\Exception $e) {
|
||||
if (PHP_VERSION_ID < 50500) {
|
||||
restore_error_handler();
|
||||
}
|
||||
if (PHP_VERSION_ID >= 50400 && 'Exception' === get_class($e) && 0 === strpos($e->getMessage(), 'Failed calling ')) {
|
||||
throw $e->getPrevious() ?: $e;
|
||||
}
|
||||
throw $e;
|
||||
}
|
||||
|
||||
if ($errorHandler) {
|
||||
call_user_func_array($errorHandler, func_get_args());
|
||||
}
|
||||
});
|
||||
|
||||
try {
|
||||
// Clear json_last_error()
|
||||
json_encode(null);
|
||||
|
||||
$this->data = json_encode($data, $this->encodingOptions);
|
||||
|
||||
restore_error_handler();
|
||||
} catch (\Exception $exception) {
|
||||
restore_error_handler();
|
||||
|
||||
throw $exception;
|
||||
}
|
||||
|
||||
if (JSON_ERROR_NONE !== json_last_error()) {
|
||||
throw new \InvalidArgumentException($this->transformJsonError());
|
||||
}
|
||||
|
||||
$this->data = $data;
|
||||
|
||||
return $this->update();
|
||||
}
|
||||
|
||||
|
|
12
core/vendor/symfony/http-foundation/Request.php
vendored
12
core/vendor/symfony/http-foundation/Request.php
vendored
|
@ -517,10 +517,16 @@ class Request
|
|||
*/
|
||||
public function __toString()
|
||||
{
|
||||
try {
|
||||
$content = $this->getContent();
|
||||
} catch (\LogicException $e) {
|
||||
return trigger_error($e, E_USER_ERROR);
|
||||
}
|
||||
|
||||
return
|
||||
sprintf('%s %s %s', $this->getMethod(), $this->getRequestUri(), $this->server->get('SERVER_PROTOCOL'))."\r\n".
|
||||
$this->headers."\r\n".
|
||||
$this->getContent();
|
||||
$content;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1557,8 +1563,8 @@ class Request
|
|||
*/
|
||||
public function getContent($asResource = false)
|
||||
{
|
||||
if (false === $this->content || (true === $asResource && null !== $this->content)) {
|
||||
throw new \LogicException('getContent() can only be called once when using the resource return type.');
|
||||
if (PHP_VERSION_ID < 50600 && (false === $this->content || (true === $asResource && null !== $this->content))) {
|
||||
throw new \LogicException('getContent() can only be called once when using the resource return type and PHP below 5.6.');
|
||||
}
|
||||
|
||||
if (true === $asResource) {
|
||||
|
|
12
core/vendor/symfony/http-foundation/Response.php
vendored
12
core/vendor/symfony/http-foundation/Response.php
vendored
|
@ -1080,7 +1080,7 @@ class Response
|
|||
$lastModified = $this->headers->get('Last-Modified');
|
||||
$modifiedSince = $request->headers->get('If-Modified-Since');
|
||||
|
||||
if ($etags = $request->getEtags()) {
|
||||
if ($etags = $request->getETags()) {
|
||||
$notModified = in_array($this->getEtag(), $etags) || in_array('*', $etags);
|
||||
}
|
||||
|
||||
|
@ -1242,15 +1242,9 @@ class Response
|
|||
{
|
||||
$status = ob_get_status(true);
|
||||
$level = count($status);
|
||||
$flags = PHP_VERSION_ID >= 50400 ? PHP_OUTPUT_HANDLER_REMOVABLE | ($flush ? PHP_OUTPUT_HANDLER_FLUSHABLE : PHP_OUTPUT_HANDLER_CLEANABLE) : -1;
|
||||
|
||||
while ($level-- > $targetLevel
|
||||
&& (!empty($status[$level]['del'])
|
||||
|| (isset($status[$level]['flags'])
|
||||
&& ($status[$level]['flags'] & PHP_OUTPUT_HANDLER_REMOVABLE)
|
||||
&& ($status[$level]['flags'] & ($flush ? PHP_OUTPUT_HANDLER_FLUSHABLE : PHP_OUTPUT_HANDLER_CLEANABLE))
|
||||
)
|
||||
)
|
||||
) {
|
||||
while ($level-- > $targetLevel && ($s = $status[$level]) && (!isset($s['del']) ? !isset($s['flags']) || $flags === ($s['flags'] & $flags) : $s['del'])) {
|
||||
if ($flush) {
|
||||
ob_end_flush();
|
||||
} else {
|
||||
|
|
|
@ -175,7 +175,7 @@ class FlashBag implements FlashBagInterface, \IteratorAggregate
|
|||
*/
|
||||
public function getIterator()
|
||||
{
|
||||
trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
|
||||
@trigger_error('The '.__METHOD__.' method is deprecated since version 2.4 and will be removed in 3.0.', E_USER_DEPRECATED);
|
||||
|
||||
return new \ArrayIterator($this->all());
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@
|
|||
|
||||
namespace Symfony\Component\HttpFoundation\Session\Storage\Handler;
|
||||
|
||||
trigger_error('The '.__NAMESPACE__.'\LegacyPdoSessionHandler class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler class instead.', E_USER_DEPRECATED);
|
||||
@trigger_error('The '.__NAMESPACE__.'\LegacyPdoSessionHandler class is deprecated since version 2.6 and will be removed in 3.0. Use the Symfony\Component\HttpFoundation\Session\Storage\Handler\PdoSessionHandler class instead.', E_USER_DEPRECATED);
|
||||
|
||||
/**
|
||||
* Session handler using a PDO connection to read and write data.
|
||||
|
|
|
@ -126,7 +126,7 @@ class PdoSessionHandler implements \SessionHandlerInterface
|
|||
private $lockMode = self::LOCK_TRANSACTIONAL;
|
||||
|
||||
/**
|
||||
* It's an array to support multiple reads before closing which is manual, non-standard usage
|
||||
* It's an array to support multiple reads before closing which is manual, non-standard usage.
|
||||
*
|
||||
* @var \PDOStatement[] An array of statements to release advisory locks
|
||||
*/
|
||||
|
@ -483,7 +483,7 @@ class PdoSessionHandler implements \SessionHandlerInterface
|
|||
if ('sqlite' === $this->driver) {
|
||||
$this->pdo->exec('ROLLBACK');
|
||||
} else {
|
||||
$this->pdo->rollback();
|
||||
$this->pdo->rollBack();
|
||||
}
|
||||
$this->inTransaction = false;
|
||||
}
|
||||
|
@ -680,7 +680,7 @@ class PdoSessionHandler implements \SessionHandlerInterface
|
|||
}
|
||||
|
||||
/**
|
||||
* Return a PDO instance
|
||||
* Return a PDO instance.
|
||||
*
|
||||
* @return \PDO
|
||||
*/
|
||||
|
|
|
@ -249,7 +249,7 @@ class MockArraySessionStorage implements SessionStorageInterface
|
|||
*/
|
||||
protected function generateId()
|
||||
{
|
||||
return hash('sha256', uniqid(mt_rand()));
|
||||
return hash('sha256', uniqid('ss_mock_', true));
|
||||
}
|
||||
|
||||
protected function loadSession()
|
||||
|
|
|
@ -203,7 +203,13 @@ class NativeSessionStorage implements SessionStorageInterface
|
|||
$this->metadataBag->stampNew();
|
||||
}
|
||||
|
||||
return session_regenerate_id($destroy);
|
||||
$isRegenerated = session_regenerate_id($destroy);
|
||||
|
||||
// The reference to $_SESSION in session bags is lost in PHP7 and we need to re-create it.
|
||||
// @see https://bugs.php.net/bug.php?id=70013
|
||||
$this->loadSession();
|
||||
|
||||
return $isRegenerated;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -179,7 +179,7 @@ class BinaryFileResponseTest extends ResponseTestCase
|
|||
|
||||
$file = new FakeFile($realpath, __DIR__.'/File/Fixtures/test');
|
||||
|
||||
BinaryFileResponse::trustXSendFileTypeHeader();
|
||||
BinaryFileResponse::trustXSendfileTypeHeader();
|
||||
$response = new BinaryFileResponse($file);
|
||||
$reflection = new \ReflectionObject($response);
|
||||
$property = $reflection->getProperty('file');
|
||||
|
|
24
core/vendor/symfony/http-foundation/Tests/ClockMock.php
vendored
Normal file
24
core/vendor/symfony/http-foundation/Tests/ClockMock.php
vendored
Normal file
|
@ -0,0 +1,24 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\HttpFoundation;
|
||||
|
||||
function time($asFloat = false)
|
||||
{
|
||||
return Tests\time();
|
||||
}
|
||||
|
||||
namespace Symfony\Component\HttpFoundation\Tests;
|
||||
|
||||
function time()
|
||||
{
|
||||
return $_SERVER['REQUEST_TIME'];
|
||||
}
|
|
@ -13,6 +13,8 @@ namespace Symfony\Component\HttpFoundation\Tests;
|
|||
|
||||
use Symfony\Component\HttpFoundation\Cookie;
|
||||
|
||||
require_once __DIR__.'/ClockMock.php';
|
||||
|
||||
/**
|
||||
* CookieTest.
|
||||
*
|
||||
|
|
|
@ -45,6 +45,19 @@ class FileTest extends \PHPUnit_Framework_TestCase
|
|||
$this->assertEquals('gif', $file->guessExtension());
|
||||
}
|
||||
|
||||
public function testGuessExtensionWithReset()
|
||||
{
|
||||
$file = new File(__DIR__.'/Fixtures/other-file.example');
|
||||
$guesser = $this->createMockGuesser($file->getPathname(), 'image/gif');
|
||||
MimeTypeGuesser::getInstance()->register($guesser);
|
||||
|
||||
$this->assertEquals('gif', $file->guessExtension());
|
||||
|
||||
MimeTypeGuesser::reset();
|
||||
|
||||
$this->assertNull($file->guessExtension());
|
||||
}
|
||||
|
||||
public function testConstructWhenFileNotExists()
|
||||
{
|
||||
$this->setExpectedException('Symfony\Component\HttpFoundation\File\Exception\FileNotFoundException');
|
||||
|
|
0
core/vendor/symfony/http-foundation/Tests/File/Fixtures/other-file.example
vendored
Normal file
0
core/vendor/symfony/http-foundation/Tests/File/Fixtures/other-file.example
vendored
Normal file
|
@ -203,9 +203,8 @@ class JsonResponseTest extends \PHPUnit_Framework_TestCase
|
|||
}
|
||||
|
||||
/**
|
||||
* @expectedException Exception
|
||||
* @expectedExceptionMessage Failed calling Symfony\Component\HttpFoundation\Tests\JsonSerializableObject::jsonSerialize()
|
||||
* @link http://php.net/manual/en/jsonserializable.jsonserialize.php#114688
|
||||
* @expectedException \Exception
|
||||
* @expectedExceptionMessage This error is expected
|
||||
*/
|
||||
public function testSetContentJsonSerializeError()
|
||||
{
|
||||
|
@ -224,9 +223,7 @@ if (interface_exists('JsonSerializable')) {
|
|||
{
|
||||
public function jsonSerialize()
|
||||
{
|
||||
trigger_error('This error is expected', E_USER_WARNING);
|
||||
|
||||
return array();
|
||||
throw new \Exception('This error is expected');
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -975,11 +975,39 @@ class RequestTest extends \PHPUnit_Framework_TestCase
|
|||
*/
|
||||
public function testGetContentCantBeCalledTwiceWithResources($first, $second)
|
||||
{
|
||||
if (PHP_VERSION_ID >= 50600) {
|
||||
$this->markTestSkipped('PHP >= 5.6 allows to open php://input several times.');
|
||||
}
|
||||
|
||||
$req = new Request();
|
||||
$req->getContent($first);
|
||||
$req->getContent($second);
|
||||
}
|
||||
|
||||
/**
|
||||
* @dataProvider getContentCantBeCalledTwiceWithResourcesProvider
|
||||
*/
|
||||
public function testGetContentCanBeCalledTwiceWithResources($first, $second)
|
||||
{
|
||||
if (PHP_VERSION_ID < 50600) {
|
||||
$this->markTestSkipped('PHP < 5.6 does not allow to open php://input several times.');
|
||||
}
|
||||
|
||||
$req = new Request();
|
||||
$a = $req->getContent($first);
|
||||
$b = $req->getContent($second);
|
||||
|
||||
if ($first) {
|
||||
$a = stream_get_contents($a);
|
||||
}
|
||||
|
||||
if ($second) {
|
||||
$b = stream_get_contents($b);
|
||||
}
|
||||
|
||||
$this->assertEquals($a, $b);
|
||||
}
|
||||
|
||||
public function getContentCantBeCalledTwiceWithResourcesProvider()
|
||||
{
|
||||
return array(
|
||||
|
|
|
@ -14,6 +14,8 @@ namespace Symfony\Component\HttpFoundation\Tests;
|
|||
use Symfony\Component\HttpFoundation\ResponseHeaderBag;
|
||||
use Symfony\Component\HttpFoundation\Cookie;
|
||||
|
||||
require_once __DIR__.'/ClockMock.php';
|
||||
|
||||
class ResponseHeaderBagTest extends \PHPUnit_Framework_TestCase
|
||||
{
|
||||
/**
|
||||
|
@ -118,7 +120,7 @@ class ResponseHeaderBagTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$bag->clearCookie('foo');
|
||||
|
||||
$this->assertContains('Set-Cookie: foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; path=/; httponly', explode("\r\n", $bag->__toString()));
|
||||
$this->assertRegExp('#^Set-Cookie: foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; path=/; httponly#m', $bag->__toString());
|
||||
}
|
||||
|
||||
public function testClearCookieSecureNotHttpOnly()
|
||||
|
@ -127,7 +129,7 @@ class ResponseHeaderBagTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$bag->clearCookie('foo', '/', null, true, false);
|
||||
|
||||
$this->assertContains("Set-Cookie: foo=deleted; expires=".gmdate("D, d-M-Y H:i:s T", time() - 31536001)."; path=/; secure", explode("\r\n", $bag->__toString()));
|
||||
$this->assertRegExp('#^Set-Cookie: foo=deleted; expires='.gmdate('D, d-M-Y H:i:s T', time() - 31536001).'; path=/; secure#m', $bag->__toString());
|
||||
}
|
||||
|
||||
public function testReplace()
|
||||
|
|
|
@ -138,8 +138,6 @@ class FlashBagTest extends \PHPUnit_Framework_TestCase
|
|||
*/
|
||||
public function testLegacyGetIterator()
|
||||
{
|
||||
$this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
|
||||
|
||||
$flashes = array('hello' => 'world', 'beep' => 'boop', 'notice' => 'nope');
|
||||
foreach ($flashes as $key => $val) {
|
||||
$this->bag->set($key, $val);
|
||||
|
|
|
@ -22,8 +22,6 @@ class LegacyPdoSessionHandlerTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
protected function setUp()
|
||||
{
|
||||
$this->iniSet('error_reporting', -1 & ~E_USER_DEPRECATED);
|
||||
|
||||
if (!class_exists('PDO') || !in_array('sqlite', \PDO::getAvailableDrivers())) {
|
||||
$this->markTestSkipped('This test requires SQLite support in your environment');
|
||||
}
|
||||
|
|
|
@ -119,6 +119,17 @@ class NativeSessionStorageTest extends \PHPUnit_Framework_TestCase
|
|||
$this->assertEquals(11, $storage->getBag('attributes')->get('legs'));
|
||||
}
|
||||
|
||||
public function testSessionGlobalIsUpToDateAfterIdRegeneration()
|
||||
{
|
||||
$storage = $this->getStorage();
|
||||
$storage->start();
|
||||
$storage->getBag('attributes')->set('lucky', 7);
|
||||
$storage->regenerate();
|
||||
$storage->getBag('attributes')->set('lucky', 42);
|
||||
|
||||
$this->assertEquals(42, $_SESSION['_sf2_attributes']['lucky']);
|
||||
}
|
||||
|
||||
public function testDefaultSessionCacheLimiter()
|
||||
{
|
||||
$this->iniSet('session.cache_limiter', 'nocache');
|
||||
|
@ -216,7 +227,6 @@ class NativeSessionStorageTest extends \PHPUnit_Framework_TestCase
|
|||
{
|
||||
$storage = $this->getStorage();
|
||||
|
||||
$this->assertFalse(isset($_SESSION));
|
||||
$this->assertFalse($storage->getSaveHandler()->isActive());
|
||||
$this->assertFalse($storage->isStarted());
|
||||
|
||||
|
|
|
@ -91,7 +91,6 @@ class PhpBridgeSessionStorageTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
$storage = $this->getStorage();
|
||||
|
||||
$this->assertFalse(isset($_SESSION));
|
||||
$this->assertFalse($storage->getSaveHandler()->isActive());
|
||||
$this->assertFalse($storage->isStarted());
|
||||
|
||||
|
|
Reference in a new issue