Merge branch '4.3' into 4.4

* 4.3:
  Properly handle optional tag attributes for !tagged_iterator
  [Mime] rename Headers::getAll() to all()
  [Mailer] Fix phpdoc for variadic methods
  [HttpClient] fix debug output added to stderr at shutdown
This commit is contained in:
Nicolas Grekas 2019-07-18 22:39:44 +02:00
commit d3a50d6cef
14 changed files with 49 additions and 31 deletions

View File

@ -741,7 +741,7 @@ class YamlFileLoader extends FileLoader
throw new InvalidArgumentException(sprintf('"!%s" tag contains unsupported key "%s"; supported ones are "tag", "index_by" and "default_index_method".', $value->getTag(), implode('"", "', $diff))); throw new InvalidArgumentException(sprintf('"!%s" tag contains unsupported key "%s"; supported ones are "tag", "index_by" and "default_index_method".', $value->getTag(), implode('"", "', $diff)));
} }
$argument = new TaggedIteratorArgument($argument['tag'], $argument['index_by'], $argument['default_index_method'] ?? null, $forLocator); $argument = new TaggedIteratorArgument($argument['tag'], $argument['index_by'] ?? null, $argument['default_index_method'] ?? null, $forLocator);
if ($forLocator) { if ($forLocator) {
$argument = new ServiceLocatorArgument($argument); $argument = new ServiceLocatorArgument($argument);

View File

@ -0,0 +1,4 @@
services:
iterator_service:
class: FooClass
arguments: [!tagged_iterator {tag: test.tag}]

View File

@ -858,4 +858,18 @@ class YamlFileLoaderTest extends TestCase
$this->assertSame('overridden', $container->get('bar')->quz); $this->assertSame('overridden', $container->get('bar')->quz);
} }
/**
* When creating a tagged iterator using the array syntax, all optional parameters should be properly handled.
*/
public function testDefaultValueOfTagged()
{
$container = new ContainerBuilder();
$loader = new YamlFileLoader($container, new FileLocator(self::$fixturesPath.'/yaml'));
$loader->load('tagged_iterator_optional.yml');
$iteratorArgument = $container->getDefinition('iterator_service')->getArgument(0);
$this->assertInstanceOf(TaggedIteratorArgument::class, $iteratorArgument);
$this->assertNull($iteratorArgument->getIndexAttribute());
}
} }

View File

@ -84,7 +84,7 @@ class MandrillTransport extends AbstractApiTransport
} }
$headersToBypass = ['from', 'to', 'cc', 'bcc', 'subject', 'content-type']; $headersToBypass = ['from', 'to', 'cc', 'bcc', 'subject', 'content-type'];
foreach ($email->getHeaders()->getAll() as $name => $header) { foreach ($email->getHeaders()->all() as $name => $header) {
if (\in_array($name, $headersToBypass, true)) { if (\in_array($name, $headersToBypass, true)) {
continue; continue;
} }

View File

@ -45,7 +45,7 @@ class MailgunTransport extends AbstractApiTransport
{ {
$body = new FormDataPart($this->getPayload($email, $envelope)); $body = new FormDataPart($this->getPayload($email, $envelope));
$headers = []; $headers = [];
foreach ($body->getPreparedHeaders()->getAll() as $header) { foreach ($body->getPreparedHeaders()->all() as $header) {
$headers[] = $header->toString(); $headers[] = $header->toString();
} }
@ -98,7 +98,7 @@ class MailgunTransport extends AbstractApiTransport
} }
$headersToBypass = ['from', 'to', 'cc', 'bcc', 'subject', 'content-type']; $headersToBypass = ['from', 'to', 'cc', 'bcc', 'subject', 'content-type'];
foreach ($headers->getAll() as $name => $header) { foreach ($headers->all() as $name => $header) {
if (\in_array($name, $headersToBypass, true)) { if (\in_array($name, $headersToBypass, true)) {
continue; continue;
} }

View File

@ -47,7 +47,7 @@ class MailgunTransport extends AbstractHttpTransport
'message' => new DataPart($message->toString(), 'message.mime'), 'message' => new DataPart($message->toString(), 'message.mime'),
]); ]);
$headers = []; $headers = [];
foreach ($body->getPreparedHeaders()->getAll() as $header) { foreach ($body->getPreparedHeaders()->all() as $header) {
$headers[] = $header->toString(); $headers[] = $header->toString();
} }
$endpoint = str_replace(['%domain%', '%region_dot%'], [urlencode($this->domain), 'us' !== ($this->region ?: 'us') ? $this->region.'.' : ''], self::ENDPOINT); $endpoint = str_replace(['%domain%', '%region_dot%'], [urlencode($this->domain), 'us' !== ($this->region ?: 'us') ? $this->region.'.' : ''], self::ENDPOINT);

View File

@ -69,7 +69,7 @@ class PostmarkTransport extends AbstractApiTransport
]; ];
$headersToBypass = ['from', 'to', 'cc', 'bcc', 'subject', 'content-type', 'sender']; $headersToBypass = ['from', 'to', 'cc', 'bcc', 'subject', 'content-type', 'sender'];
foreach ($email->getHeaders()->getAll() as $name => $header) { foreach ($email->getHeaders()->all() as $name => $header) {
if (\in_array($name, $headersToBypass, true)) { if (\in_array($name, $headersToBypass, true)) {
continue; continue;
} }

View File

@ -83,7 +83,7 @@ class SendgridTransport extends AbstractApiTransport
// these headers can't be overwritten according to Sendgrid docs // these headers can't be overwritten according to Sendgrid docs
// see https://developers.pepipost.com/migration-api/new-subpage/email-send // see https://developers.pepipost.com/migration-api/new-subpage/email-send
$headersToBypass = ['x-sg-id', 'x-sg-eid', 'received', 'dkim-signature', 'content-transfer-encoding', 'from', 'to', 'cc', 'bcc', 'subject', 'content-type', 'reply-to']; $headersToBypass = ['x-sg-id', 'x-sg-eid', 'received', 'dkim-signature', 'content-transfer-encoding', 'from', 'to', 'cc', 'bcc', 'subject', 'content-type', 'reply-to'];
foreach ($email->getHeaders()->getAll() as $name => $header) { foreach ($email->getHeaders()->all() as $name => $header) {
if (\in_array($name, $headersToBypass, true)) { if (\in_array($name, $headersToBypass, true)) {
continue; continue;
} }

View File

@ -71,7 +71,7 @@ final class DelayedSmtpEnvelope extends SmtpEnvelope
{ {
$recipients = []; $recipients = [];
foreach (['to', 'cc', 'bcc'] as $name) { foreach (['to', 'cc', 'bcc'] as $name) {
foreach ($headers->getAll($name) as $header) { foreach ($headers->all($name) as $header) {
foreach ($header->getAddresses() as $address) { foreach ($header->getAddresses() as $address) {
$recipients[] = new Address($address->getAddress()); $recipients[] = new Address($address->getAddress());
} }

View File

@ -51,7 +51,7 @@ class MessageListener implements EventSubscriberInterface
} }
$headers = $message->getHeaders(); $headers = $message->getHeaders();
foreach ($this->headers->getAll() as $name => $header) { foreach ($this->headers->all() as $name => $header) {
if (!$headers->has($name)) { if (!$headers->has($name)) {
$headers->add($header); $headers->add($header);
} else { } else {

View File

@ -101,7 +101,7 @@ class Email extends Message
} }
/** /**
* @param Address|NamedAddress|string $addresses * @param Address|NamedAddress|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -111,7 +111,7 @@ class Email extends Message
} }
/** /**
* @param Address|NamedAddress|string $addresses * @param Address|NamedAddress|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -129,7 +129,7 @@ class Email extends Message
} }
/** /**
* @param Address|string $addresses * @param Address|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -139,7 +139,7 @@ class Email extends Message
} }
/** /**
* @param Address|string $addresses * @param Address|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -157,7 +157,7 @@ class Email extends Message
} }
/** /**
* @param Address|NamedAddress|string $addresses * @param Address|NamedAddress|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -167,7 +167,7 @@ class Email extends Message
} }
/** /**
* @param Address|NamedAddress|string $addresses * @param Address|NamedAddress|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -185,7 +185,7 @@ class Email extends Message
} }
/** /**
* @param Address|NamedAddress|string $addresses * @param Address|NamedAddress|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -195,7 +195,7 @@ class Email extends Message
} }
/** /**
* @param Address|string $addresses * @param Address|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -213,7 +213,7 @@ class Email extends Message
} }
/** /**
* @param Address|NamedAddress|string $addresses * @param Address|NamedAddress|string ...$addresses
* *
* @return $this * @return $this
*/ */
@ -223,7 +223,7 @@ class Email extends Message
} }
/** /**
* @param Address|string $addresses * @param Address|string ...$addresses
* *
* @return $this * @return $this
*/ */

View File

@ -49,7 +49,7 @@ final class Headers
public function setMaxLineLength(int $lineLength) public function setMaxLineLength(int $lineLength)
{ {
$this->lineLength = $lineLength; $this->lineLength = $lineLength;
foreach ($this->getAll() as $header) { foreach ($this->all() as $header) {
$header->setMaxLineLength($lineLength); $header->setMaxLineLength($lineLength);
} }
} }
@ -175,7 +175,7 @@ final class Headers
return array_shift($values); return array_shift($values);
} }
public function getAll(string $name = null): iterable public function all(string $name = null): iterable
{ {
if (null === $name) { if (null === $name) {
foreach ($this->headers as $name => $collection) { foreach ($this->headers as $name => $collection) {
@ -218,7 +218,7 @@ final class Headers
public function toArray(): array public function toArray(): array
{ {
$arr = []; $arr = [];
foreach ($this->getAll() as $header) { foreach ($this->all() as $header) {
if ('' !== $header->getBodyAsString()) { if ('' !== $header->getBodyAsString()) {
$arr[] = $header->toString(); $arr[] = $header->toString();
} }

View File

@ -141,7 +141,7 @@ class HeadersTest extends TestCase
$this->assertNull($headers->get('Message-ID')); $this->assertNull($headers->get('Message-ID'));
} }
public function testGetAllReturnsAllHeadersMatchingName() public function testAllReturnsAllHeadersMatchingName()
{ {
$header0 = new UnstructuredHeader('X-Test', 'some@id'); $header0 = new UnstructuredHeader('X-Test', 'some@id');
$header1 = new UnstructuredHeader('X-Test', 'other@id'); $header1 = new UnstructuredHeader('X-Test', 'other@id');
@ -150,10 +150,10 @@ class HeadersTest extends TestCase
$headers->addTextHeader('X-Test', 'some@id'); $headers->addTextHeader('X-Test', 'some@id');
$headers->addTextHeader('X-Test', 'other@id'); $headers->addTextHeader('X-Test', 'other@id');
$headers->addTextHeader('X-Test', 'more@id'); $headers->addTextHeader('X-Test', 'more@id');
$this->assertEquals([$header0, $header1, $header2], iterator_to_array($headers->getAll('X-Test'))); $this->assertEquals([$header0, $header1, $header2], iterator_to_array($headers->all('X-Test')));
} }
public function testGetAllReturnsAllHeadersIfNoArguments() public function testAllReturnsAllHeadersIfNoArguments()
{ {
$header0 = new IdentificationHeader('Message-ID', 'some@id'); $header0 = new IdentificationHeader('Message-ID', 'some@id');
$header1 = new UnstructuredHeader('Subject', 'thing'); $header1 = new UnstructuredHeader('Subject', 'thing');
@ -162,13 +162,13 @@ class HeadersTest extends TestCase
$headers->addIdHeader('Message-ID', 'some@id'); $headers->addIdHeader('Message-ID', 'some@id');
$headers->addTextHeader('Subject', 'thing'); $headers->addTextHeader('Subject', 'thing');
$headers->addMailboxListHeader('To', [new Address('person@example.org')]); $headers->addMailboxListHeader('To', [new Address('person@example.org')]);
$this->assertEquals(['message-id' => $header0, 'subject' => $header1, 'to' => $header2], iterator_to_array($headers->getAll())); $this->assertEquals(['message-id' => $header0, 'subject' => $header1, 'to' => $header2], iterator_to_array($headers->all()));
} }
public function testGetAllReturnsEmptyArrayIfNoneSet() public function testAllReturnsEmptyArrayIfNoneSet()
{ {
$headers = new Headers(); $headers = new Headers();
$this->assertEquals([], iterator_to_array($headers->getAll('Received'))); $this->assertEquals([], iterator_to_array($headers->all('Received')));
} }
public function testRemoveRemovesAllHeadersWithName() public function testRemoveRemovesAllHeadersWithName()
@ -199,12 +199,12 @@ class HeadersTest extends TestCase
$this->assertEquals($header, $headers->get('message-id')); $this->assertEquals($header, $headers->get('message-id'));
} }
public function testGetAllIsNotCaseSensitive() public function testAllIsNotCaseSensitive()
{ {
$header = new IdentificationHeader('Message-ID', 'some@id'); $header = new IdentificationHeader('Message-ID', 'some@id');
$headers = new Headers(); $headers = new Headers();
$headers->addIdHeader('Message-ID', 'some@id'); $headers->addIdHeader('Message-ID', 'some@id');
$this->assertEquals([$header], iterator_to_array($headers->getAll('message-id'))); $this->assertEquals([$header], iterator_to_array($headers->all('message-id')));
} }
public function testRemoveIsNotCaseSensitive() public function testRemoveIsNotCaseSensitive()

View File

@ -68,7 +68,7 @@ class MessageTest extends TestCase
$message = new Message(); $message = new Message();
$message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']); $message->getHeaders()->addMailboxListHeader('From', ['fabien@symfony.com']);
$h = $message->getPreparedHeaders(); $h = $message->getPreparedHeaders();
$this->assertCount(4, iterator_to_array($h->getAll())); $this->assertCount(4, iterator_to_array($h->all()));
$this->assertEquals(new MailboxListHeader('From', [new Address('fabien@symfony.com')]), $h->get('From')); $this->assertEquals(new MailboxListHeader('From', [new Address('fabien@symfony.com')]), $h->get('From'));
$this->assertEquals(new UnstructuredHeader('MIME-Version', '1.0'), $h->get('mime-version')); $this->assertEquals(new UnstructuredHeader('MIME-Version', '1.0'), $h->get('mime-version'));
$this->assertTrue($h->has('Message-Id')); $this->assertTrue($h->has('Message-Id'));