| | |
| | | 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'), |
| | | ); |
| | | } |
| | | |
| | |
| | | array('::1'), |
| | | array('::1.2.3.4'), |
| | | array('2001:2d12:c4fe:5afe::1'), |
| | | array('2001::'), |
| | | array('2001::1'), |
| | | ); |
| | | } |
| | | |
| | |
| | | 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'), |
| | | ); |
| | | } |
| | | |
| | |
| | | $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'); |
| | | } |
| | | |
| | | /** |
| | |
| | | ); |
| | | |
| | | 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( |
| | |
| | | ); |
| | | |
| | | 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"); |
| | | } |
| | | } |
| | | |
| | |
| | | */ |
| | | 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); |
| | | $this->assertSame($ts, $result, "Error parsing date: $datetime"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * rcube:utils::normalize _string() |
| | | * 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::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"); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 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->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))); |
| | | } |
| | | } |