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 |   71 +++++++++++++++++++++++++++++++++++
 1 files changed, 71 insertions(+), 0 deletions(-)

diff --git a/tests/Framework/Mime.php b/tests/Framework/Mime.php
index 61123dd..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) {
@@ -144,6 +156,21 @@
     }
 
     /**
+     * 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()
@@ -185,6 +212,18 @@
                 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) {
@@ -192,4 +231,36 @@
         }
     }
 
+    /**
+     * 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