From 46f7b7096450939fe03c95aa81ce06ae4bfca89d Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Mon, 28 Mar 2016 06:51:43 -0400 Subject: [PATCH] Enable reply/reply-all/forward buttons also in preview frame of message/rfc822 --- tests/Framework/Mime.php | 143 +++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 143 insertions(+), 0 deletions(-) diff --git a/tests/Framework/Mime.php b/tests/Framework/Mime.php index dcd5599..f3f0d0b 100644 --- a/tests/Framework/Mime.php +++ b/tests/Framework/Mime.php @@ -39,6 +39,13 @@ 19 => 'Test <"test test"@domain.tld>', 20 => '<"test test"@domain.tld>', 21 => '"test test"@domain.tld', + // invalid (#1489092) + 22 => '"John Doe @ SomeBusinessName" <MAILER-DAEMON>', + 23 => '=?UTF-8?B?IlRlc3QsVGVzdCI=?= <test@domain.tld>', + // invalid, but we do our best to parse correctly + 24 => '"email@test.com" <>', + // valid with redundant quoting (#1490040) + 25 => '"user"@"domain.tld"', ); $results = array( @@ -64,6 +71,11 @@ 19 => array(1, 'Test', '"test test"@domain.tld'), 20 => array(1, '', '"test test"@domain.tld'), 21 => array(1, '', '"test test"@domain.tld'), + // invalid (#1489092) + 22 => array(1, 'John Doe @ SomeBusinessName', 'MAILER-DAEMON'), + 23 => array(1, 'Test,Test', 'test@domain.tld'), + 24 => array(1, '', 'email@test.com'), + 25 => array(1, '', 'user@domain.tld'), ); foreach ($headers as $idx => $header) { @@ -120,4 +132,135 @@ $this->assertEquals($item['out'], $res, "Header decoding for: " . $idx); } } + + /** + * Test format=flowed unfolding + */ + function test_format_flowed() + { + $raw = file_get_contents(TESTS_DIR . 'src/format-flowed-unfolded.txt'); + $flowed = file_get_contents(TESTS_DIR . 'src/format-flowed.txt'); + + $this->assertEquals($flowed, rcube_mime::format_flowed($raw, 80), "Test correct folding and space-stuffing"); + } + + /** + * Test format=flowed unfolding + */ + function test_unfold_flowed() + { + $flowed = file_get_contents(TESTS_DIR . 'src/format-flowed.txt'); + $unfolded = file_get_contents(TESTS_DIR . 'src/format-flowed-unfolded.txt'); + + $this->assertEquals($unfolded, rcube_mime::unfold_flowed($flowed), "Test correct unfolding of quoted lines"); + } + + /** + * Test format=flowed unfolding (#1490284) + */ + function test_unfold_flowed2() + { + $flowed = "> culpa qui officia deserunt mollit anim id est laborum.\r\n" + ."> \r\n" + ."Sed ut perspiciatis unde omnis iste natus error \r\nsit voluptatem"; + $unfolded = "> culpa qui officia deserunt mollit anim id est laborum.\r\n" + ."> \r\n" + ."Sed ut perspiciatis unde omnis iste natus error sit voluptatem"; + + $this->assertEquals($unfolded, rcube_mime::unfold_flowed($flowed), "Test correct unfolding of quoted lines [2]"); + } + + /** + * Test wordwrap() + */ + function test_wordwrap() + { + $samples = array( + array( + array("aaaa aaaa\n aaaa"), + "aaaa aaaa\n aaaa", + ), + array( + array("123456789 123456789 123456789 123", 29), + "123456789 123456789 123456789\n123", + ), + array( + array("123456789 3456789 123456789", 29), + "123456789 3456789 123456789", + ), + array( + array("123456789 123456789 123456789 123", 29), + "123456789 123456789 123456789\n 123", + ), + array( + array("abc", 1, "\n", true), + "a\nb\nc", + ), + array( + array("ąść", 1, "\n", true, 'UTF-8'), + "ą\nś\nć", + ), + array( + array(">abc\n>def", 2, "\n", true), + ">abc\n>def", + ), + array( + array("abc def", 3, "-"), + "abc-def", + ), + array( + array("----------------------------------------------------------------------------------------\nabc def123456789012345", 76), + "----------------------------------------------------------------------------------------\nabc def123456789012345", + ), + array( + array("-------\nabc def", 5), + "-------\nabc\ndef", + ), + array( + array("http://xx.xxx.xx.xxx:8080/addressbooks/roundcubexxxxx%40xxxxxxxxxxxxxxxxxxxxxxx.xx.xx/testing/", 70), + "http://xx.xxx.xx.xxx:8080/addressbooks/roundcubexxxxx%40xxxxxxxxxxxxxxxxxxxxxxx.xx.xx/testing/", + ), + array( + array("this-is-just-some-blabla-to-make-this-more-than-seventy-five-characters-in-a-row -- this line should be wrapped", 20, "\n"), + "this-is-just-some-blabla-to-make-this-more-than-seventy-five-characters-in-a-row\n-- this line should\nbe wrapped", + ), + ); + + foreach ($samples as $sample) { + $this->assertEquals($sample[1], call_user_func_array(array('rcube_mime', 'wordwrap'), $sample[0]), "Test text wrapping"); + } + } + + /** + * Test parse_message() + */ + function test_parse_message() + { + $file = file_get_contents(__DIR__ . '/../src/html.msg'); + $result = rcube_mime::parse_message($file); + + $this->assertInstanceOf('rcube_message_part', $result); + $this->assertSame('multipart/alternative', $result->mimetype); + $this->assertSame('1.0', $result->headers['mime-version']); + $this->assertSame('=_68eeaf4ab95b5312965e45c33362338e', $result->ctype_parameters['boundary']); + $this->assertSame('1', $result->parts[0]->mime_id); + $this->assertSame(12, $result->parts[0]->size); + $this->assertSame('text/plain', $result->parts[0]->mimetype); + $this->assertSame("this is test", $result->parts[0]->body); + $this->assertSame('2', $result->parts[1]->mime_id); + $this->assertSame(0, $result->parts[1]->size); + $this->assertSame('multipart/related', $result->parts[1]->mimetype); + $this->assertCount(2, $result->parts[1]->parts); + $this->assertSame('2.1', $result->parts[1]->parts[0]->mime_id); + $this->assertSame(257, $result->parts[1]->parts[0]->size); + $this->assertSame('text/html', $result->parts[1]->parts[0]->mimetype); + $this->assertSame('UTF-8', $result->parts[1]->parts[0]->charset); + $this->assertRegExp('/<html>/', $result->parts[1]->parts[0]->body); + $this->assertSame('2.2', $result->parts[1]->parts[1]->mime_id); + $this->assertSame(793, $result->parts[1]->parts[1]->size); + $this->assertSame('image/jpeg', $result->parts[1]->parts[1]->mimetype); + $this->assertSame('base64', $result->parts[1]->parts[1]->encoding); + $this->assertSame('inline', $result->parts[1]->parts[1]->disposition); + $this->assertSame('photo-mini.jpg', $result->parts[1]->parts[1]->filename); + } } -- Gitblit v1.9.1