Skip to content

Commit

Permalink
Merge pull request #1293 from kunit/2.3-cakeemail-wrap
Browse files Browse the repository at this point in the history
Processing was simplified when a length of one line was smaller than CakeEmail::LINE_LENGTH_MUST
  • Loading branch information
markstory committed May 21, 2013
2 parents 82d57fb + 05473fe commit e2304d8
Show file tree
Hide file tree
Showing 2 changed files with 73 additions and 53 deletions.
6 changes: 5 additions & 1 deletion lib/Cake/Network/Email/CakeEmail.php
Expand Up @@ -1254,7 +1254,11 @@ protected function _wrap($message, $wrapLength = CakeEmail::LINE_LENGTH_MUST) {
$formatted[] = '';
continue;
}
if (!preg_match('/<[a-z]+.+>/i', $line)) {
if (strlen($line) < $wrapLength) {
$formatted[] = $line;
continue;
}
if (!preg_match('/<[a-z]+.*>/i', $line)) {
$formatted = array_merge(
$formatted,
explode("\n", wordwrap($line, $wrapLength, "\n"))
Expand Down
120 changes: 68 additions & 52 deletions lib/Cake/Test/Case/Network/Email/CakeEmailTest.php
Expand Up @@ -1622,58 +1622,6 @@ public function testHeaderEncoding() {
$this->assertContains('ってテーブルを作ってやってたらう', $result['message']);
}

public function testWrapLongLine() {
$message = '<a href="http://cakephp.org">' . str_repeat('x', CakeEmail::LINE_LENGTH_MUST) . "</a>";

$this->CakeEmail->reset();
$this->CakeEmail->transport('Debug');
$this->CakeEmail->from('cake@cakephp.org');
$this->CakeEmail->to('cake@cakephp.org');
$this->CakeEmail->subject('Wordwrap Test');
$this->CakeEmail->config(array('empty'));
$result = $this->CakeEmail->send($message);
$expected = "<a\r\n" . 'href="http://cakephp.org">' . str_repeat('x', CakeEmail::LINE_LENGTH_MUST) . "\r\n</a>\r\n\r\n";
$this->assertEquals($expected, $result['message']);
}

public function testWrapIncludeTag() {
$message = '<a href="http://cakephp.org">CakePHP</a>';

$this->CakeEmail->reset();
$this->CakeEmail->transport('Debug');
$this->CakeEmail->from('cake@cakephp.org');
$this->CakeEmail->to('cake@cakephp.org');
$this->CakeEmail->subject('Wordwrap Test');
$this->CakeEmail->config(array('empty'));
$result = $this->CakeEmail->send($message);
$expected = "{$message}\r\n\r\n";
$this->assertEquals($expected, $result['message']);

$message = 'foo<bar';

$result = $this->CakeEmail->send($message);
$expected = "{$message}\r\n\r\n";
$this->assertEquals($expected, $result['message']);
}

public function testWrapForJapaneseEncoding() {
$this->skipIf(!function_exists('mb_convert_encoding'));

$message = mb_convert_encoding('受け付けました', 'iso-2022-jp', 'UTF-8');

$this->CakeEmail->reset();
$this->CakeEmail->transport('Debug');
$this->CakeEmail->from('cake@cakephp.org');
$this->CakeEmail->to('cake@cakephp.org');
$this->CakeEmail->subject('Wordwrap Test');
$this->CakeEmail->config(array('empty'));
$this->CakeEmail->charset('iso-2022-jp');
$this->CakeEmail->headerCharset('iso-2022-jp');
$result = $this->CakeEmail->send($message);
$expected = "{$message}\r\n\r\n";
$this->assertEquals($expected, $result['message']);
}

/**
* Tests that the body is encoded using the configured charset
*
Expand Down Expand Up @@ -1918,4 +1866,72 @@ protected function _getEmailByNewStyleCharset($charset, $headerCharset) {
return $email;
}

public function testWrapLongLine() {
$message = '<a href="http://cakephp.org">' . str_repeat('x', CakeEmail::LINE_LENGTH_MUST) . "</a>";

$this->CakeEmail->reset();
$this->CakeEmail->transport('Debug');
$this->CakeEmail->from('cake@cakephp.org');
$this->CakeEmail->to('cake@cakephp.org');
$this->CakeEmail->subject('Wordwrap Test');
$this->CakeEmail->config(array('empty'));
$result = $this->CakeEmail->send($message);
$expected = "<a\r\n" . 'href="http://cakephp.org">' . str_repeat('x', CakeEmail::LINE_LENGTH_MUST) . "\r\n</a>\r\n\r\n";
$this->assertEquals($expected, $result['message']);

$str1 = "a ";
$str2 = " b";
$len = strlen($str1) + strlen($str2);
$message = $str1 . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len - 1) . $str2;

$result = $this->CakeEmail->send($message);
$expected = "{$message}\r\n\r\n";
$this->assertEquals($expected, $result['message']);

$message = $str1 . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len) . $str2;

$result = $this->CakeEmail->send($message);
$expected = "{$message}\r\n\r\n";
$this->assertEquals($expected, $result['message']);

$message = $str1 . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len + 1) . $str2;

$result = $this->CakeEmail->send($message);
$expected = $str1 . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len + 1) . sprintf("\r\n%s\r\n\r\n", trim($str2));
$this->assertEquals($expected, $result['message']);
}

public function testWrapIncludeLessThanSign() {
$str = 'foo<bar';
$len = strlen($str);
$message = $str . str_repeat('x', CakeEmail::LINE_LENGTH_MUST - $len + 1);

$this->CakeEmail->reset();
$this->CakeEmail->transport('Debug');
$this->CakeEmail->from('cake@cakephp.org');
$this->CakeEmail->to('cake@cakephp.org');
$this->CakeEmail->subject('Wordwrap Test');
$this->CakeEmail->config(array('empty'));
$result = $this->CakeEmail->send($message);
$expected = "{$message}\r\n\r\n";
$this->assertEquals($expected, $result['message']);
}

public function testWrapForJapaneseEncoding() {
$this->skipIf(!function_exists('mb_convert_encoding'));

$message = mb_convert_encoding('受け付けました', 'iso-2022-jp', 'UTF-8');

$this->CakeEmail->reset();
$this->CakeEmail->transport('Debug');
$this->CakeEmail->from('cake@cakephp.org');
$this->CakeEmail->to('cake@cakephp.org');
$this->CakeEmail->subject('Wordwrap Test');
$this->CakeEmail->config(array('empty'));
$this->CakeEmail->charset('iso-2022-jp');
$this->CakeEmail->headerCharset('iso-2022-jp');
$result = $this->CakeEmail->send($message);
$expected = "{$message}\r\n\r\n";
$this->assertEquals($expected, $result['message']);
}
}

0 comments on commit e2304d8

Please sign in to comment.