From e6278ee7b7968b5ff2aa1b7959b5522d12ac7081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Frank=20Bru=CC=88ckner?= Date: Tue, 8 Aug 2017 10:32:01 +0200 Subject: [PATCH 1/9] Fixes link to documentation in readme file --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 82c0a78c..9bacfc22 100644 --- a/README.md +++ b/README.md @@ -10,4 +10,4 @@ transport. Of course, you can also implement your own transport by implementing the `Mail\Transport\TransportInterface`. - File issues at https://github.com/zendframework/zend-mail/issues -- Documentation is at https://zendframework.github.io/zend-mail/ +- Documentation is at https://docs.zendframework.com/zend-mail/ From 8fe0204ed5c5a7d5a3d84425f5273feca735c3db Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 17 Dec 2017 18:09:35 +0100 Subject: [PATCH 2/9] Replaced ussage of HeaderLoader in Headers class by a constant array map --- src/Headers.php | 37 +++++++++++++++++++++++++++++++++++-- test/HeadersTest.php | 5 +---- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/src/Headers.php b/src/Headers.php index 593d1358..4759ba0c 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -28,6 +28,30 @@ class Headers implements Countable, Iterator /** @var string Start of Line when folding */ const FOLDING = "\r\n "; + const HEADERS_MAP = [ + 'bcc' => Header\Bcc::class, + 'cc' => Header\Cc::class, + 'contenttype' => Header\ContentType::class, + 'content_type' => Header\ContentType::class, + 'content-type' => Header\ContentType::class, + 'contenttransferencoding' => Header\ContentTransferEncoding::class, + 'content_transfer_encoding' => Header\ContentTransferEncoding::class, + 'content-transfer-encoding' => Header\ContentTransferEncoding::class, + 'date' => Header\Date::class, + 'from' => Header\From::class, + 'message-id' => Header\MessageId::class, + 'mimeversion' => Header\MimeVersion::class, + 'mime_version' => Header\MimeVersion::class, + 'mime-version' => Header\MimeVersion::class, + 'received' => Header\Received::class, + 'replyto' => Header\ReplyTo::class, + 'reply_to' => Header\ReplyTo::class, + 'reply-to' => Header\ReplyTo::class, + 'sender' => Header\Sender::class, + 'subject' => Header\Subject::class, + 'to' => Header\To::class, + ]; + /** * @var \Zend\Loader\PluginClassLoader */ @@ -478,7 +502,7 @@ public function forceLoading() public function loadHeader($headerLine) { list($name, ) = Header\GenericHeader::splitHeaderLine($headerLine); - $class = $this->getPluginClassLoader()->load($name) ?: Header\GenericHeader::class; + $class = $this->resolveHeaderClass($name); return $class::fromString($headerLine); } @@ -491,7 +515,7 @@ protected function lazyLoadHeader($index) $current = $this->headers[$index]; $key = $this->headersKeys[$index]; - $class = ($this->getPluginClassLoader()->load($key)) ?: 'Zend\Mail\Header\GenericHeader'; + $class = $this->resolveHeaderClass($key); $encoding = $current->getEncoding(); $headers = $class::fromString($current->toString()); @@ -523,4 +547,13 @@ protected function normalizeFieldName($fieldName) { return str_replace(['-', '_', ' ', '.'], '', strtolower($fieldName)); } + + /** + * @param string $key + * @return string + */ + private function resolveHeaderClass($key) + { + return isset(self::HEADERS_MAP[$key]) ? self::HEADERS_MAP[$key] : Header\GenericHeader::class; + } } diff --git a/test/HeadersTest.php b/test/HeadersTest.php index 367ec6c2..8e7e9240 100644 --- a/test/HeadersTest.php +++ b/test/HeadersTest.php @@ -99,10 +99,7 @@ public function testHeadersFromStringFactoryCreatesMultipleObjects() public function testHeadersFromStringMultiHeaderWillAggregateLazyLoadedHeaders() { $headers = new Mail\Headers(); - /* @var $pcl \Zend\Loader\PluginClassLoader */ - $pcl = $headers->getPluginClassLoader(); - $pcl->registerPlugin('foo', 'Zend\Mail\Header\GenericMultiHeader'); - $headers->addHeaderLine('foo: bar1,bar2,bar3'); + $headers->addHeaderLine('foo', ['bar1@domain.com', 'bar2@domain.com', 'bar3@domain.com']); $headers->forceLoading(); $this->assertEquals(3, $headers->count()); } From 0e0218d333d3bca75b3411a703a5a65dc2fc07de Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 17 Dec 2017 18:13:00 +0100 Subject: [PATCH 3/9] Dropped ussage of HeaderLoader inside Headers class --- src/Header/HeaderLoader.php | 45 ------------------------------------- src/Headers.php | 31 ------------------------- test/HeadersTest.php | 7 ++---- 3 files changed, 2 insertions(+), 81 deletions(-) delete mode 100644 src/Header/HeaderLoader.php diff --git a/src/Header/HeaderLoader.php b/src/Header/HeaderLoader.php deleted file mode 100644 index fc93f8cd..00000000 --- a/src/Header/HeaderLoader.php +++ /dev/null @@ -1,45 +0,0 @@ - 'Zend\Mail\Header\Bcc', - 'cc' => 'Zend\Mail\Header\Cc', - 'contenttype' => 'Zend\Mail\Header\ContentType', - 'content_type' => 'Zend\Mail\Header\ContentType', - 'content-type' => 'Zend\Mail\Header\ContentType', - 'contenttransferencoding' => 'Zend\Mail\Header\ContentTransferEncoding', - 'content_transfer_encoding' => 'Zend\Mail\Header\ContentTransferEncoding', - 'content-transfer-encoding' => 'Zend\Mail\Header\ContentTransferEncoding', - 'date' => 'Zend\Mail\Header\Date', - 'from' => 'Zend\Mail\Header\From', - 'message-id' => 'Zend\Mail\Header\MessageId', - 'mimeversion' => 'Zend\Mail\Header\MimeVersion', - 'mime_version' => 'Zend\Mail\Header\MimeVersion', - 'mime-version' => 'Zend\Mail\Header\MimeVersion', - 'received' => 'Zend\Mail\Header\Received', - 'replyto' => 'Zend\Mail\Header\ReplyTo', - 'reply_to' => 'Zend\Mail\Header\ReplyTo', - 'reply-to' => 'Zend\Mail\Header\ReplyTo', - 'sender' => 'Zend\Mail\Header\Sender', - 'subject' => 'Zend\Mail\Header\Subject', - 'to' => 'Zend\Mail\Header\To', - ]; -} diff --git a/src/Headers.php b/src/Headers.php index 4759ba0c..991b8a02 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -13,7 +13,6 @@ use Countable; use Iterator; use Traversable; -use Zend\Loader\PluginClassLocator; /** * Basic mail headers collection functionality @@ -52,11 +51,6 @@ class Headers implements Countable, Iterator 'to' => Header\To::class, ]; - /** - * @var \Zend\Loader\PluginClassLoader - */ - protected $pluginClassLoader = null; - /** * @var array key names for $headers array */ @@ -141,31 +135,6 @@ public static function fromString($string, $EOL = self::EOL) return $headers; } - /** - * Set an alternate implementation for the PluginClassLoader - * - * @param PluginClassLocator $pluginClassLoader - * @return Headers - */ - public function setPluginClassLoader(PluginClassLocator $pluginClassLoader) - { - $this->pluginClassLoader = $pluginClassLoader; - return $this; - } - - /** - * Return an instance of a PluginClassLocator, lazyload and inject map if necessary - * - * @return PluginClassLocator - */ - public function getPluginClassLoader() - { - if ($this->pluginClassLoader === null) { - $this->pluginClassLoader = new Header\HeaderLoader(); - } - return $this->pluginClassLoader; - } - /** * Set the header encoding * diff --git a/test/HeadersTest.php b/test/HeadersTest.php index 8e7e9240..07d0f0d4 100644 --- a/test/HeadersTest.php +++ b/test/HeadersTest.php @@ -379,12 +379,9 @@ public static function expectedHeaders() /** * @dataProvider expectedHeaders */ - public function testDefaultPluginLoaderIsSeededWithHeaders($plugin, $class) + public function testHeadersMapResolvesProperHeader($plugin, $class) { - $headers = new Mail\Headers(); - $loader = $headers->getPluginClassLoader(); - $test = $loader->load($plugin); - $this->assertEquals($class, $test); + $this->assertEquals(Mail\Headers::HEADERS_MAP[$plugin], $class); } public function testClone() From 935586ec853d1f715e4d15b7349320cb171a8499 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sun, 17 Dec 2017 18:16:58 +0100 Subject: [PATCH 4/9] Removed zend-loader as a required dependency --- composer.json | 1 - composer.lock | 46 +--------------------------------------------- 2 files changed, 1 insertion(+), 46 deletions(-) diff --git a/composer.json b/composer.json index dbfca538..7aa4ad6e 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,6 @@ "require": { "php": "^7.0 || ^5.6", "ext-iconv": "*", - "zendframework/zend-loader": "^2.5", "zendframework/zend-mime": "^2.5", "zendframework/zend-stdlib": "^2.7 || ^3.0", "zendframework/zend-validator": "^2.6" diff --git a/composer.lock b/composer.lock index c6bde4c0..41499a3e 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "99fb0a39466ee5de4118b1ae973dda77", + "content-hash": "b1dc608c725b365f256e461addf28785", "packages": [ { "name": "container-interop/container-interop", @@ -86,50 +86,6 @@ ], "time": "2017-02-14T16:28:37+00:00" }, - { - "name": "zendframework/zend-loader", - "version": "2.5.1", - "source": { - "type": "git", - "url": "https://github.com/zendframework/zend-loader.git", - "reference": "c5fd2f071bde071f4363def7dea8dec7393e135c" - }, - "dist": { - "type": "zip", - "url": "https://api.github.com/repos/zendframework/zend-loader/zipball/c5fd2f071bde071f4363def7dea8dec7393e135c", - "reference": "c5fd2f071bde071f4363def7dea8dec7393e135c", - "shasum": "" - }, - "require": { - "php": ">=5.3.23" - }, - "require-dev": { - "fabpot/php-cs-fixer": "1.7.*", - "phpunit/phpunit": "~4.0" - }, - "type": "library", - "extra": { - "branch-alias": { - "dev-master": "2.5-dev", - "dev-develop": "2.6-dev" - } - }, - "autoload": { - "psr-4": { - "Zend\\Loader\\": "src/" - } - }, - "notification-url": "https://packagist.org/downloads/", - "license": [ - "BSD-3-Clause" - ], - "homepage": "https://github.com/zendframework/zend-loader", - "keywords": [ - "loader", - "zf2" - ], - "time": "2015-06-03T14:05:47+00:00" - }, { "name": "zendframework/zend-mime", "version": "2.6.1", From b6e8b679b09e844b85a0ea26860e72d425d5f4ee Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 21 Dec 2017 15:49:23 +0100 Subject: [PATCH 5/9] Ensured header key is lowered before trying to find the corresponding class --- src/Headers.php | 1 + 1 file changed, 1 insertion(+) diff --git a/src/Headers.php b/src/Headers.php index 991b8a02..edba6b0c 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -523,6 +523,7 @@ protected function normalizeFieldName($fieldName) */ private function resolveHeaderClass($key) { + $key = strtolower($key); return isset(self::HEADERS_MAP[$key]) ? self::HEADERS_MAP[$key] : Header\GenericHeader::class; } } From 1ee4037afe5075ec1622e24117eece0553e1c0cf Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 21 Dec 2017 15:49:46 +0100 Subject: [PATCH 6/9] Renamed HEADERS_MAP to HEADERS_CLASS_MAP --- src/Headers.php | 4 ++-- test/HeadersTest.php | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Headers.php b/src/Headers.php index edba6b0c..edac649c 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -27,7 +27,7 @@ class Headers implements Countable, Iterator /** @var string Start of Line when folding */ const FOLDING = "\r\n "; - const HEADERS_MAP = [ + const HEADERS_CLASS_MAP = [ 'bcc' => Header\Bcc::class, 'cc' => Header\Cc::class, 'contenttype' => Header\ContentType::class, @@ -524,6 +524,6 @@ protected function normalizeFieldName($fieldName) private function resolveHeaderClass($key) { $key = strtolower($key); - return isset(self::HEADERS_MAP[$key]) ? self::HEADERS_MAP[$key] : Header\GenericHeader::class; + return isset(self::HEADERS_CLASS_MAP[$key]) ? self::HEADERS_CLASS_MAP[$key] : Header\GenericHeader::class; } } diff --git a/test/HeadersTest.php b/test/HeadersTest.php index 07d0f0d4..6668de91 100644 --- a/test/HeadersTest.php +++ b/test/HeadersTest.php @@ -381,7 +381,7 @@ public static function expectedHeaders() */ public function testHeadersMapResolvesProperHeader($plugin, $class) { - $this->assertEquals(Mail\Headers::HEADERS_MAP[$plugin], $class); + $this->assertEquals(Mail\Headers::HEADERS_CLASS_MAP[$plugin], $class); } public function testClone() From dcb362c6aa45b30c8b4d16f2e289f6974ccb566d Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Thu, 21 Dec 2017 16:07:48 +0100 Subject: [PATCH 7/9] Fixed invalid PHP 5.6 expression --- src/Headers.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/Headers.php b/src/Headers.php index edac649c..7956ad5c 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -524,6 +524,7 @@ protected function normalizeFieldName($fieldName) private function resolveHeaderClass($key) { $key = strtolower($key); - return isset(self::HEADERS_CLASS_MAP[$key]) ? self::HEADERS_CLASS_MAP[$key] : Header\GenericHeader::class; + $headerExists = array_key_exists($key, self::HEADERS_CLASS_MAP); + return $headerExists ? self::HEADERS_CLASS_MAP[$key] : Header\GenericHeader::class; } } From a467860b36a61b36185fbde255789338fb3e1f11 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sat, 23 Dec 2017 10:34:18 +0100 Subject: [PATCH 8/9] Created new HeaderLoader that does not depend on zend-loader --- src/Header/HeaderLoader.php | 75 ++++++++++++++++++++++++++++++++ test/Header/HeaderLoaderTest.php | 70 +++++++++++++++++++++++++++++ 2 files changed, 145 insertions(+) create mode 100644 src/Header/HeaderLoader.php create mode 100644 test/Header/HeaderLoaderTest.php diff --git a/src/Header/HeaderLoader.php b/src/Header/HeaderLoader.php new file mode 100644 index 00000000..4b057484 --- /dev/null +++ b/src/Header/HeaderLoader.php @@ -0,0 +1,75 @@ + Bcc::class, + 'cc' => Cc::class, + 'contenttype' => ContentType::class, + 'content_type' => ContentType::class, + 'content-type' => ContentType::class, + 'contenttransferencoding' => ContentTransferEncoding::class, + 'content_transfer_encoding' => ContentTransferEncoding::class, + 'content-transfer-encoding' => ContentTransferEncoding::class, + 'date' => Date::class, + 'from' => From::class, + 'message-id' => MessageId::class, + 'mimeversion' => MimeVersion::class, + 'mime_version' => MimeVersion::class, + 'mime-version' => MimeVersion::class, + 'received' => Received::class, + 'replyto' => ReplyTo::class, + 'reply_to' => ReplyTo::class, + 'reply-to' => ReplyTo::class, + 'sender' => Sender::class, + 'subject' => Subject::class, + 'to' => To::class, + ]; + + /** + * @param string $name + * @param string|null $default + * @return string|null + */ + public function get($name, $default = null) + { + $name = $this->normalizeName($name); + return isset($this->headerClassMap[$name]) ? $this->headerClassMap[$name] : $default; + } + + /** + * @param string $name + * @return bool + */ + public function has($name) + { + return isset($this->headerClassMap[$this->normalizeName($name)]); + } + + public function add($name, $class) + { + $this->headerClassMap[$this->normalizeName($name)] = $class; + } + + public function remove($name) + { + unset($this->headerClassMap[$this->normalizeName($name)]); + } + + private function normalizeName($name) + { + return strtolower($name); + } +} diff --git a/test/Header/HeaderLoaderTest.php b/test/Header/HeaderLoaderTest.php new file mode 100644 index 00000000..7697f719 --- /dev/null +++ b/test/Header/HeaderLoaderTest.php @@ -0,0 +1,70 @@ +headerLoader = new Header\HeaderLoader(); + } + + /** + * @param $name + * @param $expected + * @param $default + * @dataProvider provideHeaderNames + */ + public function testHeaderIsProperlyLoaded($name, $expected, $default = null) + { + $this->assertEquals($expected, $this->headerLoader->get($name, $default)); + } + + public function provideHeaderNames() + { + return [ + 'with existing name' => ['to', Header\To::class], + 'with non-existent name' => ['foo', null], + 'with default value' => ['foo', Header\GenericHeader::class, Header\GenericHeader::class], + ]; + } + + public function testHeaderExistenceIsProperlyChecked() + { + $this->assertTrue($this->headerLoader->has('to')); + $this->assertTrue($this->headerLoader->has('To')); + $this->assertTrue($this->headerLoader->has('Reply_to')); + $this->assertTrue($this->headerLoader->has('SUBJECT')); + $this->assertFalse($this->headerLoader->has('foo')); + $this->assertFalse($this->headerLoader->has('bar')); + } + + public function testHeaderCanBeAdded() + { + $this->assertFalse($this->headerLoader->has('foo')); + $this->headerLoader->add('foo', Header\GenericHeader::class); + $this->assertTrue($this->headerLoader->has('foo')); + } + + public function testHeaderCanBeRemoved() + { + $this->assertTrue($this->headerLoader->has('to')); + $this->headerLoader->remove('to'); + $this->assertFalse($this->headerLoader->has('to')); + } +} From c7076ecbc7d4e8fbc7aa9b006fd64154e3436be2 Mon Sep 17 00:00:00 2001 From: Alejandro Celaya Date: Sat, 23 Dec 2017 10:39:23 +0100 Subject: [PATCH 9/9] Replaced hardcoded class map in Headers class by the use of a header loader --- src/Headers.php | 35 ++++++---------------- test/Header/HeaderLoaderTest.php | 51 ++++++++++++++++++++++++++------ test/HeadersTest.php | 31 ------------------- 3 files changed, 51 insertions(+), 66 deletions(-) diff --git a/src/Headers.php b/src/Headers.php index 7956ad5c..1c22d183 100644 --- a/src/Headers.php +++ b/src/Headers.php @@ -27,29 +27,10 @@ class Headers implements Countable, Iterator /** @var string Start of Line when folding */ const FOLDING = "\r\n "; - const HEADERS_CLASS_MAP = [ - 'bcc' => Header\Bcc::class, - 'cc' => Header\Cc::class, - 'contenttype' => Header\ContentType::class, - 'content_type' => Header\ContentType::class, - 'content-type' => Header\ContentType::class, - 'contenttransferencoding' => Header\ContentTransferEncoding::class, - 'content_transfer_encoding' => Header\ContentTransferEncoding::class, - 'content-transfer-encoding' => Header\ContentTransferEncoding::class, - 'date' => Header\Date::class, - 'from' => Header\From::class, - 'message-id' => Header\MessageId::class, - 'mimeversion' => Header\MimeVersion::class, - 'mime_version' => Header\MimeVersion::class, - 'mime-version' => Header\MimeVersion::class, - 'received' => Header\Received::class, - 'replyto' => Header\ReplyTo::class, - 'reply_to' => Header\ReplyTo::class, - 'reply-to' => Header\ReplyTo::class, - 'sender' => Header\Sender::class, - 'subject' => Header\Subject::class, - 'to' => Header\To::class, - ]; + /** + * @var Header\HeaderLoader + */ + protected $headerLoader; /** * @var array key names for $headers array @@ -523,8 +504,10 @@ protected function normalizeFieldName($fieldName) */ private function resolveHeaderClass($key) { - $key = strtolower($key); - $headerExists = array_key_exists($key, self::HEADERS_CLASS_MAP); - return $headerExists ? self::HEADERS_CLASS_MAP[$key] : Header\GenericHeader::class; + if ($this->headerLoader === null) { + $this->headerLoader = new Header\HeaderLoader(); + } + + return $this->headerLoader->get($key, Header\GenericHeader::class); } } diff --git a/test/Header/HeaderLoaderTest.php b/test/Header/HeaderLoaderTest.php index 7697f719..a0a8a832 100644 --- a/test/Header/HeaderLoaderTest.php +++ b/test/Header/HeaderLoaderTest.php @@ -24,6 +24,15 @@ public function setUp() $this->headerLoader = new Header\HeaderLoader(); } + public function provideHeaderNames() + { + return [ + 'with existing name' => ['to', Header\To::class], + 'with non-existent name' => ['foo', null], + 'with default value' => ['foo', Header\GenericHeader::class, Header\GenericHeader::class], + ]; + } + /** * @param $name * @param $expected @@ -35,15 +44,6 @@ public function testHeaderIsProperlyLoaded($name, $expected, $default = null) $this->assertEquals($expected, $this->headerLoader->get($name, $default)); } - public function provideHeaderNames() - { - return [ - 'with existing name' => ['to', Header\To::class], - 'with non-existent name' => ['foo', null], - 'with default value' => ['foo', Header\GenericHeader::class, Header\GenericHeader::class], - ]; - } - public function testHeaderExistenceIsProperlyChecked() { $this->assertTrue($this->headerLoader->has('to')); @@ -67,4 +67,37 @@ public function testHeaderCanBeRemoved() $this->headerLoader->remove('to'); $this->assertFalse($this->headerLoader->has('to')); } + + public static function expectedHeaders() + { + return [ + ['bcc', Header\Bcc::class], + ['cc', Header\Cc::class], + ['contenttype', Header\ContentType::class], + ['content_type', Header\ContentType::class], + ['content-type', Header\ContentType::class], + ['date', Header\Date::class], + ['from', Header\From::class], + ['mimeversion', Header\MimeVersion::class], + ['mime_version', Header\MimeVersion::class], + ['mime-version', Header\MimeVersion::class], + ['received', Header\Received::class], + ['replyto', Header\ReplyTo::class], + ['reply_to', Header\ReplyTo::class], + ['reply-to', Header\ReplyTo::class], + ['sender', Header\Sender::class], + ['subject', Header\Subject::class], + ['to', Header\To::class], + ]; + } + + /** + * @dataProvider expectedHeaders + * @param $name + * @param $class + */ + public function testDefaultHeadersMapResolvesProperHeader($name, $class) + { + $this->assertEquals($class, $this->headerLoader->get($name)); + } } diff --git a/test/HeadersTest.php b/test/HeadersTest.php index 6668de91..c43cab4b 100644 --- a/test/HeadersTest.php +++ b/test/HeadersTest.php @@ -353,37 +353,6 @@ public function testToArrayFormatEncoded() $this->assertEquals($expected, $array); } - public static function expectedHeaders() - { - return [ - ['bcc', 'Zend\Mail\Header\Bcc'], - ['cc', 'Zend\Mail\Header\Cc'], - ['contenttype', 'Zend\Mail\Header\ContentType'], - ['content_type', 'Zend\Mail\Header\ContentType'], - ['content-type', 'Zend\Mail\Header\ContentType'], - ['date', 'Zend\Mail\Header\Date'], - ['from', 'Zend\Mail\Header\From'], - ['mimeversion', 'Zend\Mail\Header\MimeVersion'], - ['mime_version', 'Zend\Mail\Header\MimeVersion'], - ['mime-version', 'Zend\Mail\Header\MimeVersion'], - ['received', 'Zend\Mail\Header\Received'], - ['replyto', 'Zend\Mail\Header\ReplyTo'], - ['reply_to', 'Zend\Mail\Header\ReplyTo'], - ['reply-to', 'Zend\Mail\Header\ReplyTo'], - ['sender', 'Zend\Mail\Header\Sender'], - ['subject', 'Zend\Mail\Header\Subject'], - ['to', 'Zend\Mail\Header\To'], - ]; - } - - /** - * @dataProvider expectedHeaders - */ - public function testHeadersMapResolvesProperHeader($plugin, $class) - { - $this->assertEquals(Mail\Headers::HEADERS_CLASS_MAP[$plugin], $class); - } - public function testClone() { $headers = new Mail\Headers();