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/Utils.php |  125 +++++++++++++++++++++++++++++++++++++----
 1 files changed, 112 insertions(+), 13 deletions(-)

diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php
index 082aaea..08e6414 100644
--- a/tests/Framework/Utils.php
+++ b/tests/Framework/Utils.php
@@ -29,6 +29,7 @@
             array('email@domain.name', '.name is valid Top Level Domain name'),
             array('email@domain.co.jp', 'Dot in Top Level Domain name also considered valid (use co.jp as example here)'),
             array('firstname-lastname@domain.com', 'Dash in address field is valid'),
+            array('test@xn--e1aaa0cbbbcacac.xn--p1ai', 'IDNA domain'),
         );
     }
 
@@ -94,6 +95,8 @@
             array('::1'),
             array('::1.2.3.4'),
             array('2001:2d12:c4fe:5afe::1'),
+            array('2001::'),
+            array('2001::1'),
         );
     }
 
@@ -109,7 +112,10 @@
             array('1.1.1.1.1'),
             array('::1.2.3.260'),
             array('::1.0'),
+            array(':::1'),
+            array('2001:::1'),
             array('2001::c4fe:5afe::1'),
+            array(':c4fe:5afe:1'),
         );
     }
 
@@ -240,7 +246,7 @@
         );
 
         foreach ($input as $idx => $value) {
-            $this->assertFalse(get_boolean($value), "Invalid result for $idx test item");
+            $this->assertFalse(rcube_utils::get_boolean($value), "Invalid result for $idx test item");
         }
 
         $input = array(
@@ -248,7 +254,7 @@
         );
 
         foreach ($input as $idx => $value) {
-            $this->assertTrue(get_boolean($value), "Invalid result for $idx test item");
+            $this->assertTrue(rcube_utils::get_boolean($value), "Invalid result for $idx test item");
         }
     }
 
@@ -274,17 +280,23 @@
      */
     function test_strtotime()
     {
+        // this test depends on system timezone if not set
+        date_default_timezone_set('UTC');
+
         $test = array(
             '1' => 1,
             '' => 0,
-            '2013-04-22' => 1366581600,
-            '2013/04/22' => 1366581600,
-            '2013.04.22' => 1366581600,
-            '22-04-2013' => 1366581600,
-            '22/04/2013' => 1366581600,
-            '22.04.2013' => 1366581600,
-            '22.4.2013'  => 1366581600,
-            '20130422'   => 1366581600,
+            'abc-555' => 0,
+            '2013-04-22' => 1366588800,
+            '2013/04/22' => 1366588800,
+            '2013.04.22' => 1366588800,
+            '22-04-2013' => 1366588800,
+            '22/04/2013' => 1366588800,
+            '22.04.2013' => 1366588800,
+            '22.4.2013'  => 1366588800,
+            '20130422'   => 1366588800,
+            '2013/06/21 12:00:00 UTC' => 1371816000,
+            '2013/06/21 12:00:00 Europe/Berlin' => 1371808800,
         );
 
         foreach ($test as $datetime => $ts) {
@@ -315,7 +327,46 @@
 
         foreach ($test as $datetime => $ts) {
             $result = rcube_utils::anytodatetime($datetime);
-            $this->assertSame($ts, $result ? $result->format('Y-m-d') : '', "Error parsing date: $datetime");
+            $this->assertSame($ts, $result ? $result->format('Y-m-d') : false, "Error parsing date: $datetime");
+        }
+    }
+
+    /**
+     * rcube:utils::anytodatetime()
+     */
+    function test_anytodatetime_timezone()
+    {
+        $tz = new DateTimeZone('Europe/Helsinki');
+        $test = array(
+            'Jan 1st 2014 +0800' => '2013-12-31 18:00',  // result in target timezone
+            'Jan 1st 14 45:42'   => '2014-01-01 00:00',  // force fallback to rcube_utils::strtotime()
+            'Jan 1st 2014 UK'    => '2014-01-01 00:00',
+            'Invalid date'       => false,
+        );
+
+        foreach ($test as $datetime => $ts) {
+            $result = rcube_utils::anytodatetime($datetime, $tz);
+            if ($result) $result->setTimezone($tz);  // move to target timezone for comparison
+            $this->assertSame($ts, $result ? $result->format('Y-m-d H:i') : false, "Error parsing date: $datetime");
+        }
+    }
+
+    /**
+     * rcube:utils::tokenize_string()
+     */
+    function test_tokenize_string()
+    {
+        $test = array(
+            ''        => array(),
+            'abc d'   => array('abc'),
+            'abc de'  => array('abc','de'),
+            'äàé;êöü-xyz' => array('äàé','êöü','xyz'),
+            '日期格式' => array('日期格式'),
+        );
+
+        foreach ($test as $input => $output) {
+            $result = rcube_utils::tokenize_string($input);
+            $this->assertSame($output, $result);
         }
     }
 
@@ -325,13 +376,49 @@
     function test_normalize_string()
     {
         $test = array(
-            '' => '',
+            ''        => '',
             'abc def' => 'abc def',
+            'ÇçäâàåæéêëèïîìÅÉöôòüûùÿøØáíóúñÑÁÂÀãÃÊËÈÍÎÏÓÔõÕÚÛÙýÝ' => 'ccaaaaaeeeeiiiaeooouuuyooaiounnaaaaaeeeiiioooouuuyy',
+            'ąáâäćçčéęëěíîłľĺńňóôöŕřśšşťţůúűüźžżýĄŚŻŹĆ' => 'aaaaccceeeeiilllnnooorrsssttuuuuzzzyaszzc',
+            'ßs'  => 'sss',
+            'Xae' => 'xa',
+            'Xoe' => 'xo',
+            'Xue' => 'xu',
+            '项目' => '项目',
         );
+
+        // this test fails on PHP 5.3.3
+        if (PHP_VERSION_ID > 50303) {
+            $test['ß']  = '';
+            $test['日'] = '';
+        }
 
         foreach ($test as $input => $output) {
             $result = rcube_utils::normalize_string($input);
-            $this->assertSame($output, $result);
+            $this->assertSame($output, $result, "Error normalizing '$input'");
+        }
+    }
+
+    /**
+     * rcube:utils::words_match()
+     */
+    function test_words_match()
+    {
+        $test = array(
+            array('', 'test', false),
+            array('test', 'test', true),
+            array('test', 'none', false),
+            array('test', 'test xyz', false),
+            array('test xyz', 'test xyz', true),
+            array('this is test', 'test', true),
+            // try some binary content
+            array('this is test ' . base64_decode('R0lGODlhDwAPAIAAAMDAwAAAACH5BAEAAAAALAAAAAAPAA8AQAINhI+py+0Po5y02otnAQA7'), 'test', true),
+            array('this is test ' . base64_decode('R0lGODlhDwAPAIAAAMDAwAAAACH5BAEAAAAALAAAAAAPAA8AQAINhI+py+0Po5y02otnAQA7'), 'none', false),
+        );
+
+        foreach ($test as $idx => $params) {
+            $result = rcube_utils::words_match($params[0], $params[1]);
+            $this->assertSame($params[2], $result, "words_match() at index $idx");
         }
     }
 
@@ -360,4 +447,16 @@
             $this->assertSame($output, $result);
         }
     }
+
+    /**
+     * rcube:utils::random_bytes()
+     */
+    function test_random_bytes()
+    {
+        $this->assertRegexp('/^[a-zA-Z0-9]{15}$/', rcube_utils::random_bytes(15));
+        $this->assertSame(15, strlen(rcube_utils::random_bytes(15, true)));
+        $this->assertSame(1, strlen(rcube_utils::random_bytes(1)));
+        $this->assertSame(0, strlen(rcube_utils::random_bytes(0)));
+        $this->assertSame(0, strlen(rcube_utils::random_bytes(-1)));
+    }
 }

--
Gitblit v1.9.1