radarrplexorganizrnginxsonarrdashboardserverhomepagesabnzbdheimdallembycouchpotatonzbgetbookmarkapplication-dashboardmuximuxlandingpagestartpagelandinghtpc
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
179 lines
5.6 KiB
179 lines
5.6 KiB
<?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\Mime\Tests\Header;
|
|
|
|
use PHPUnit\Framework\TestCase;
|
|
use Symfony\Component\Mime\Header\IdentificationHeader;
|
|
|
|
class IdentificationHeaderTest extends TestCase
|
|
{
|
|
public function testValueMatchesMsgIdSpec()
|
|
{
|
|
/* -- RFC 2822, 3.6.4.
|
|
message-id = "Message-ID:" msg-id CRLF
|
|
|
|
in-reply-to = "In-Reply-To:" 1*msg-id CRLF
|
|
|
|
references = "References:" 1*msg-id CRLF
|
|
|
|
msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS]
|
|
|
|
id-left = dot-atom-text / no-fold-quote / obs-id-left
|
|
|
|
id-right = dot-atom-text / no-fold-literal / obs-id-right
|
|
|
|
no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE
|
|
|
|
no-fold-literal = "[" *(dtext / quoted-pair) "]"
|
|
*/
|
|
|
|
$header = new IdentificationHeader('Message-ID', 'id-left@id-right');
|
|
$this->assertEquals('<id-left@id-right>', $header->getBodyAsString());
|
|
}
|
|
|
|
public function testIdCanBeRetrievedVerbatim()
|
|
{
|
|
$header = new IdentificationHeader('Message-ID', 'id-left@id-right');
|
|
$this->assertEquals('id-left@id-right', $header->getId());
|
|
}
|
|
|
|
public function testMultipleIdsCanBeSet()
|
|
{
|
|
$header = new IdentificationHeader('References', 'c@d');
|
|
$header->setIds(['a@b', 'x@y']);
|
|
$this->assertEquals(['a@b', 'x@y'], $header->getIds());
|
|
}
|
|
|
|
public function testSettingMultipleIdsProducesAListValue()
|
|
{
|
|
/* -- RFC 2822, 3.6.4.
|
|
The "References:" and "In-Reply-To:" field each contain one or more
|
|
unique message identifiers, optionally separated by CFWS.
|
|
|
|
.. SNIP ..
|
|
|
|
in-reply-to = "In-Reply-To:" 1*msg-id CRLF
|
|
|
|
references = "References:" 1*msg-id CRLF
|
|
*/
|
|
|
|
$header = new IdentificationHeader('References', ['a@b', 'x@y']);
|
|
$this->assertEquals('<a@b> <x@y>', $header->getBodyAsString());
|
|
}
|
|
|
|
public function testIdLeftCanBeQuoted()
|
|
{
|
|
/* -- RFC 2822, 3.6.4.
|
|
id-left = dot-atom-text / no-fold-quote / obs-id-left
|
|
*/
|
|
|
|
$header = new IdentificationHeader('References', '"ab"@c');
|
|
$this->assertEquals('"ab"@c', $header->getId());
|
|
$this->assertEquals('<"ab"@c>', $header->getBodyAsString());
|
|
}
|
|
|
|
public function testIdLeftCanContainAnglesAsQuotedPairs()
|
|
{
|
|
/* -- RFC 2822, 3.6.4.
|
|
no-fold-quote = DQUOTE *(qtext / quoted-pair) DQUOTE
|
|
*/
|
|
|
|
$header = new IdentificationHeader('References', '"a\\<\\>b"@c');
|
|
$this->assertEquals('"a\\<\\>b"@c', $header->getId());
|
|
$this->assertEquals('<"a\\<\\>b"@c>', $header->getBodyAsString());
|
|
}
|
|
|
|
public function testIdLeftCanBeDotAtom()
|
|
{
|
|
$header = new IdentificationHeader('References', 'a.b+&%$.c@d');
|
|
$this->assertEquals('a.b+&%$.c@d', $header->getId());
|
|
$this->assertEquals('<a.b+&%$.c@d>', $header->getBodyAsString());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \Exception
|
|
* @expectedMessageException "a b c" is not valid id-left
|
|
*/
|
|
public function testInvalidIdLeftThrowsException()
|
|
{
|
|
$header = new IdentificationHeader('References', 'a b c@d');
|
|
}
|
|
|
|
public function testIdRightCanBeDotAtom()
|
|
{
|
|
/* -- RFC 2822, 3.6.4.
|
|
id-right = dot-atom-text / no-fold-literal / obs-id-right
|
|
*/
|
|
|
|
$header = new IdentificationHeader('References', 'a@b.c+&%$.d');
|
|
$this->assertEquals('a@b.c+&%$.d', $header->getId());
|
|
$this->assertEquals('<a@b.c+&%$.d>', $header->getBodyAsString());
|
|
}
|
|
|
|
public function testIdRightCanBeLiteral()
|
|
{
|
|
/* -- RFC 2822, 3.6.4.
|
|
no-fold-literal = "[" *(dtext / quoted-pair) "]"
|
|
*/
|
|
|
|
$header = new IdentificationHeader('References', 'a@[1.2.3.4]');
|
|
$this->assertEquals('a@[1.2.3.4]', $header->getId());
|
|
$this->assertEquals('<a@[1.2.3.4]>', $header->getBodyAsString());
|
|
}
|
|
|
|
public function testIdRigthIsIdnEncoded()
|
|
{
|
|
$header = new IdentificationHeader('References', 'a@ä');
|
|
$this->assertEquals('a@ä', $header->getId());
|
|
$this->assertEquals('<a@xn--4ca>', $header->getBodyAsString());
|
|
}
|
|
|
|
/**
|
|
* @expectedException \Exception
|
|
* @expectedMessageException "b c d" is not valid id-right
|
|
*/
|
|
public function testInvalidIdRightThrowsException()
|
|
{
|
|
$header = new IdentificationHeader('References', 'a@b c d');
|
|
}
|
|
|
|
/**
|
|
* @expectedException \Exception
|
|
* @expectedMessageException "abc" is does not contain @
|
|
*/
|
|
public function testMissingAtSignThrowsException()
|
|
{
|
|
/* -- RFC 2822, 3.6.4.
|
|
msg-id = [CFWS] "<" id-left "@" id-right ">" [CFWS]
|
|
*/
|
|
$header = new IdentificationHeader('References', 'abc');
|
|
}
|
|
|
|
public function testSetBody()
|
|
{
|
|
$header = new IdentificationHeader('Message-ID', 'c@d');
|
|
$header->setBody('a@b');
|
|
$this->assertEquals(['a@b'], $header->getIds());
|
|
}
|
|
|
|
public function testGetBody()
|
|
{
|
|
$header = new IdentificationHeader('Message-ID', 'a@b');
|
|
$this->assertEquals(['a@b'], $header->getBody());
|
|
}
|
|
|
|
public function testStringValue()
|
|
{
|
|
$header = new IdentificationHeader('References', ['a@b', 'x@y']);
|
|
$this->assertEquals('References: <a@b> <x@y>', $header->toString());
|
|
}
|
|
}
|
|
|