From 8447bae77c19a2350bd48b0f0c5b3a56a35c7af9 Mon Sep 17 00:00:00 2001 From: Aleksander Machniak <alec@alec.pl> Date: Sun, 28 Jun 2015 06:27:48 -0400 Subject: [PATCH] Require Mbstring and OpenSSL extensions (#1490415) - remove redundant code --- tests/Framework/Utils.php | 206 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 204 insertions(+), 2 deletions(-) diff --git a/tests/Framework/Utils.php b/tests/Framework/Utils.php index 7c1e92a..d5b853d 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'), ); } @@ -171,6 +172,12 @@ $this->assertRegExp('/#rcmbody h1\s\{/', $mod, "Prefix tag styles (single)"); $this->assertRegExp('/#rcmbody h1, #rcmbody h2, #rcmbody h3, #rcmbody textarea\s+\{/', $mod, "Prefix tag styles (multiple)"); $this->assertRegExp('/#rcmbody \.noscript\s+\{/', $mod, "Prefix class styles"); + + $css = file_get_contents(TESTS_DIR . 'src/media.css'); + $mod = rcube_utils::mod_css_styles($css, 'rcmbody'); + + $this->assertContains('#rcmbody table[class=w600]', $mod, 'Replace styles nested in @media block'); + $this->assertContains('#rcmbody {width:600px', $mod, 'Replace body selector nested in @media block'); } /** @@ -192,6 +199,23 @@ $mod = rcube_utils::mod_css_styles("background:\\0075\\0072\\006c( javascript:alert('xss') )", 'rcmbody'); $this->assertEquals("/* evil! */", $mod, "Don't allow encoding quirks (2)"); + } + + /** + * Check rcube_utils::explode_quoted_string() + */ + function test_explode_quoted_string() + { + $data = array( + '"a,b"' => array('"a,b"'), + '"a,b","c,d"' => array('"a,b"','"c,d"'), + '"a,\\"b",d' => array('"a,\\"b"', 'd'), + ); + + foreach ($data as $text => $res) { + $result = rcube_utils::explode_quoted_string(',', $text); + $this->assertSame($res, $result); + } } /** @@ -217,7 +241,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( @@ -225,8 +249,186 @@ ); 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"); } } + /** + * rcube:utils::file2class() + */ + function test_file2class() + { + $test = array( + array('', '', 'unknown'), + array('text', 'text', 'text'), + array('image/png', 'image.png', 'image png'), + ); + + foreach ($test as $v) { + $result = rcube_utils::file2class($v[0], $v[1]); + $this->assertSame($v[2], $result); + } + } + + /** + * rcube:utils::strtotime() + */ + function test_strtotime() + { + // this test depends on system timezone if not set + date_default_timezone_set('UTC'); + + $test = array( + '1' => 1, + '' => 0, + '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) { + $result = rcube_utils::strtotime($datetime); + $this->assertSame($ts, $result, "Error parsing date: $datetime"); + } + } + + /** + * rcube:utils::anytodatetime() + */ + function test_anytodatetime() + { + $test = array( + '2013-04-22' => '2013-04-22', + '2013/04/22' => '2013-04-22', + '2013.04.22' => '2013-04-22', + '22-04-2013' => '2013-04-22', + '22/04/2013' => '2013-04-22', + '22.04.2013' => '2013-04-22', + '04/22/2013' => '2013-04-22', + '22.4.2013' => '2013-04-22', + '20130422' => '2013-04-22', + '1900-10-10' => '1900-10-10', + '01-01-1900' => '1900-01-01', + '01/30/1960' => '1960-01-30' + ); + + foreach ($test as $datetime => $ts) { + $result = rcube_utils::anytodatetime($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); + } + } + + /** + * rcube:utils::normalize_string() + */ + 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, "Error normalizing '$input'"); + } + } + + /** + * rcube:utils::is_absolute_path() + */ + function test_is_absolute_path() + { + if (strtoupper(substr(PHP_OS, 0, 3)) == 'WIN') { + $test = array( + '' => false, + "C:\\" => true, + 'some/path' => false, + ); + } + else { + $test = array( + '' => false, + '/path' => true, + 'some/path' => false, + ); + } + + foreach ($test as $input => $output) { + $result = rcube_utils::is_absolute_path($input); + $this->assertSame($output, $result); + } + } + + /** + * rcube:utils::random_bytes() + */ + function test_random_bytes() + { + $this->assertSame(15, strlen(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