Skip to content
This repository has been archived by the owner on Jan 30, 2020. It is now read-only.

testcase for broken Header\AbstractAddressList::fromString #146

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 23 additions & 0 deletions test/HeadersTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,29 @@ public function testClone()
$this->assertFalse($headers2->has('Bcc'));
}

/**
* Problem:
* 1. GenericHeader loads the header in file, decodes it to utf-8
* 2. the Headers::get attempts to Lazy-Load "To" header class
* Lazyload does stringify and load in from string
* $encoding = $current->getEncoding();
* $headers = $class::fromString($current->toString());
* However, toString does not encode comma
* AND To header class does split on comma!
*
* @see \Zend\Mail\Header\AbstractAddressList::fromString
*/
public function testDogFood() {
$headers = new Mail\Headers();

$genericHeader = Mail\Header\GenericHeader::fromString('To: "=?iso-8859-1?Q?W=2C_bj=F8rn?=" <[email protected]>');
$this->assertEquals('"W, bjørn" <[email protected]>', $genericHeader->getFieldValue());

$headers->addHeader($genericHeader);
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This test case doesn't make sense given the assertions in your comments and the issue description.

You're making the case that AbstractAddressList::fromString() is splitting on a comma, but that toString() on such headers is not encoding it.

What I'm seeing here is quite different:

  • You're testing the behavior of a GenericHeader, not one that is based on AbstractAddressList.
  • Your assertion is that the expected behavior of toString() is NOT to encode the comma.

That's the crux of my confusion: the test is not setting up the conditions you describe, nor testing the expectation you describe.

Can you please clarify?

$toHeader = $headers->get('To');
$this->assertEquals('To: =?UTF-8?Q?W,=20bj=C3=B8rn?= <[email protected]>', $toHeader->toString());
}

/**
* @group ZF2015-04
*/
Expand Down