X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=tests%2FUtilsTest.php;h=3d1aa6538918f8ad48dc5436b91dd03253a3eadd;hb=be9ddff2fb8706ce575e95e8cd64458411895dbe;hp=869a9695be1b2075eac0e6f0e9eadcdc170ed5b7;hpb=1abe655597da7b3c5b59146c4351eef59f69514c;p=github%2Fshaarli%2FShaarli.git diff --git a/tests/UtilsTest.php b/tests/UtilsTest.php index 869a9695..3d1aa653 100644 --- a/tests/UtilsTest.php +++ b/tests/UtilsTest.php @@ -4,6 +4,7 @@ */ require_once 'application/Utils.php'; +require_once 'application/Languages.php'; require_once 'tests/utils/ReferenceSessionIdHashes.php'; // Initialize reference data before PHPUnit starts a session @@ -22,8 +23,13 @@ class UtilsTest extends PHPUnit_Framework_TestCase protected static $testLogFile = 'tests.log'; // Expected log date format - protected static $dateFormat = 'Y/m/d_H:i:s'; - + protected static $dateFormat = 'Y/m/d H:i:s'; + + /** + * @var string Save the current timezone. + */ + protected static $defaultTimeZone; + /** * Assign reference data @@ -31,6 +37,17 @@ class UtilsTest extends PHPUnit_Framework_TestCase public static function setUpBeforeClass() { self::$sidHashes = ReferenceSessionIdHashes::getHashes(); + self::$defaultTimeZone = date_default_timezone_get(); + // Timezone without DST for test consistency + date_default_timezone_set('Africa/Nairobi'); + } + + /** + * Reset the timezone + */ + public static function tearDownAfterClass() + { + date_default_timezone_set(self::$defaultTimeZone); } /** @@ -51,7 +68,7 @@ class UtilsTest extends PHPUnit_Framework_TestCase protected function getLastLogEntry() { $logFile = file(self::$testLogFile); - return explode(' - ', trim(array_pop($logFile), '\n')); + return explode(' - ', trim(array_pop($logFile), PHP_EOL)); } /** @@ -253,41 +270,263 @@ class UtilsTest extends PHPUnit_Framework_TestCase is_session_id_valid('c0ZqcWF3VFE2NmJBdm1HMVQ0ZHJ3UmZPbTFsNGhkNHI=') ); } + + /** + * Test generateSecretApi. + */ + public function testGenerateSecretApi() + { + $this->assertEquals(12, strlen(generate_api_secret('foo', 'bar'))); + } + + /** + * Test generateSecretApi with invalid parameters. + */ + public function testGenerateSecretApiInvalid() + { + $this->assertFalse(generate_api_secret('', '')); + $this->assertFalse(generate_api_secret(false, false)); + } + + /** + * Test normalize_spaces. + */ + public function testNormalizeSpace() + { + $str = ' foo bar is important '; + $this->assertEquals('foo bar is important', normalize_spaces($str)); + $this->assertEquals('foo', normalize_spaces('foo')); + $this->assertEquals('', normalize_spaces('')); + $this->assertEquals(null, normalize_spaces(null)); + } + + /** + * Test arrays_combine + */ + public function testCartesianProductGenerator() + { + $arr = [['ab', 'cd'], ['ef', 'gh'], ['ij', 'kl'], ['m']]; + $expected = [ + ['ab', 'ef', 'ij', 'm'], + ['ab', 'ef', 'kl', 'm'], + ['ab', 'gh', 'ij', 'm'], + ['ab', 'gh', 'kl', 'm'], + ['cd', 'ef', 'ij', 'm'], + ['cd', 'ef', 'kl', 'm'], + ['cd', 'gh', 'ij', 'm'], + ['cd', 'gh', 'kl', 'm'], + ]; + $this->assertEquals($expected, iterator_to_array(cartesian_product_generator($arr))); + } + + /** + * Test date_format() with invalid parameter. + */ + public function testDateFormatInvalid() + { + $this->assertFalse(format_date([])); + $this->assertFalse(format_date(null)); + } + + /** + * Test is_integer_mixed with valid values + */ + public function testIsIntegerMixedValid() + { + $this->assertTrue(is_integer_mixed(12)); + $this->assertTrue(is_integer_mixed('12')); + $this->assertTrue(is_integer_mixed(-12)); + $this->assertTrue(is_integer_mixed('-12')); + $this->assertTrue(is_integer_mixed(0)); + $this->assertTrue(is_integer_mixed('0')); + $this->assertTrue(is_integer_mixed(0x0a)); + } + + /** + * Test is_integer_mixed with invalid values + */ + public function testIsIntegerMixedInvalid() + { + $this->assertFalse(is_integer_mixed(true)); + $this->assertFalse(is_integer_mixed(false)); + $this->assertFalse(is_integer_mixed([])); + $this->assertFalse(is_integer_mixed(['test'])); + $this->assertFalse(is_integer_mixed([12])); + $this->assertFalse(is_integer_mixed(new DateTime())); + $this->assertFalse(is_integer_mixed('0x0a')); + $this->assertFalse(is_integer_mixed('12k')); + $this->assertFalse(is_integer_mixed('k12')); + $this->assertFalse(is_integer_mixed('')); + } + + /** + * Test return_bytes + */ + public function testReturnBytes() + { + $this->assertEquals(2 * 1024, return_bytes('2k')); + $this->assertEquals(2 * 1024, return_bytes('2K')); + $this->assertEquals(2 * (pow(1024, 2)), return_bytes('2m')); + $this->assertEquals(2 * (pow(1024, 2)), return_bytes('2M')); + $this->assertEquals(2 * (pow(1024, 3)), return_bytes('2g')); + $this->assertEquals(2 * (pow(1024, 3)), return_bytes('2G')); + $this->assertEquals(374, return_bytes('374')); + $this->assertEquals(374, return_bytes(374)); + $this->assertEquals(0, return_bytes('0')); + $this->assertEquals(0, return_bytes(0)); + $this->assertEquals(-1, return_bytes('-1')); + $this->assertEquals(-1, return_bytes(-1)); + $this->assertEquals('', return_bytes('')); + } + + /** + * Test human_bytes + */ + public function testHumanBytes() + { + $this->assertEquals('2kiB', human_bytes(2 * 1024)); + $this->assertEquals('2kiB', human_bytes(strval(2 * 1024))); + $this->assertEquals('2MiB', human_bytes(2 * (pow(1024, 2)))); + $this->assertEquals('2MiB', human_bytes(strval(2 * (pow(1024, 2))))); + $this->assertEquals('2GiB', human_bytes(2 * (pow(1024, 3)))); + $this->assertEquals('2GiB', human_bytes(strval(2 * (pow(1024, 3))))); + $this->assertEquals('374B', human_bytes(374)); + $this->assertEquals('374B', human_bytes('374')); + $this->assertEquals('232kiB', human_bytes(237481)); + $this->assertEquals('Unlimited', human_bytes('0')); + $this->assertEquals('Unlimited', human_bytes(0)); + $this->assertEquals('Setting not set', human_bytes('')); + } + + /** + * Test get_max_upload_size with formatting + */ + public function testGetMaxUploadSize() + { + $this->assertEquals('1MiB', get_max_upload_size(2097152, '1024k')); + $this->assertEquals('1MiB', get_max_upload_size('1m', '2m')); + $this->assertEquals('100B', get_max_upload_size(100, 100)); + } + + /** + * Test get_max_upload_size without formatting + */ + public function testGetMaxUploadSizeRaw() + { + $this->assertEquals('1048576', get_max_upload_size(2097152, '1024k', false)); + $this->assertEquals('1048576', get_max_upload_size('1m', '2m', false)); + $this->assertEquals('100', get_max_upload_size(100, 100, false)); + } + + /** + * Test alphabetical_sort by value, not reversed, with php-intl. + */ + public function testAlphabeticalSortByValue() + { + $arr = [ + 'zZz', + 'éee', + 'éae', + 'eee', + 'A', + 'a', + 'zzz', + ]; + $expected = [ + 'a', + 'A', + 'éae', + 'eee', + 'éee', + 'zzz', + 'zZz', + ]; + + alphabetical_sort($arr); + $this->assertEquals($expected, $arr); + } /** - * Test text2clickable without a redirector being set. + * Test alphabetical_sort by value, reversed, with php-intl. */ - public function testText2clickableWithoutRedirector() + public function testAlphabeticalSortByValueReversed() { - $text = 'stuff http://hello.there/is=someone#here otherstuff'; - $expectedText = 'stuff http://hello.there/is=someone#here otherstuff'; - $processedText = text2clickable($text, ''); - $this->assertEquals($expectedText, $processedText); + $arr = [ + 'zZz', + 'éee', + 'éae', + 'eee', + 'A', + 'a', + 'zzz', + ]; + $expected = [ + 'zZz', + 'zzz', + 'éee', + 'eee', + 'éae', + 'A', + 'a', + ]; + + alphabetical_sort($arr, true); + $this->assertEquals($expected, $arr); } /** - * Test text2clickable a redirector set. + * Test alphabetical_sort by keys, not reversed, with php-intl. */ - public function testText2clickableWithRedirector() + public function testAlphabeticalSortByKeys() { - $text = 'stuff http://hello.there/is=someone#here otherstuff'; - $redirector = 'http://redirector.to'; - $expectedText = 'stuff http://hello.there/is=someone#here otherstuff'; - $processedText = text2clickable($text, $redirector); - $this->assertEquals($expectedText, $processedText); + $arr = [ + 'zZz' => true, + 'éee' => true, + 'éae' => true, + 'eee' => true, + 'A' => true, + 'a' => true, + 'zzz' => true, + ]; + $expected = [ + 'a' => true, + 'A' => true, + 'éae' => true, + 'eee' => true, + 'éee' => true, + 'zzz' => true, + 'zZz' => true, + ]; + + alphabetical_sort($arr, true, true); + $this->assertEquals($expected, $arr); } /** - * Test testSpace2nbsp. + * Test alphabetical_sort by keys, reversed, with php-intl. */ - public function testSpace2nbsp() + public function testAlphabeticalSortByKeysReversed() { - $text = ' Are you thrilled by flags ?'. PHP_EOL .' Really?'; - $expectedText = '  Are you   thrilled  by flags   ?'. PHP_EOL .' Really?'; - $processedText = space2nbsp($text); - $this->assertEquals($expectedText, $processedText); + $arr = [ + 'zZz' => true, + 'éee' => true, + 'éae' => true, + 'eee' => true, + 'A' => true, + 'a' => true, + 'zzz' => true, + ]; + $expected = [ + 'zZz' => true, + 'zzz' => true, + 'éee' => true, + 'eee' => true, + 'éae' => true, + 'A' => true, + 'a' => true, + ]; + + alphabetical_sort($arr, true, true); + $this->assertEquals($expected, $arr); } }