]> git.immae.eu Git - github/shaarli/Shaarli.git/blobdiff - tests/UtilsTest.php
URL encode links when a redirector is set.
[github/shaarli/Shaarli.git] / tests / UtilsTest.php
index e39ce6be096d10f692b98b1c66d3f6d5ef287f6d..02eecda216f8c03adafe50f57bcb32bdf7ace787 100644 (file)
@@ -4,12 +4,28 @@
  */
 
 require_once 'application/Utils.php';
+require_once 'tests/utils/ReferenceSessionIdHashes.php';
+
+// Initialize reference data before PHPUnit starts a session
+ReferenceSessionIdHashes::genAllHashes();
+
 
 /**
  * Unitary tests for Shaarli utilities
  */
 class UtilsTest extends PHPUnit_Framework_TestCase
 {
+    // Session ID hashes
+    protected static $sidHashes = null;
+
+    /**
+     * Assign reference data
+     */
+    public static function setUpBeforeClass()
+    {
+        self::$sidHashes = ReferenceSessionIdHashes::getHashes();
+    }
+
     /**
      * Represent a link by its hash
      */
@@ -102,6 +118,8 @@ class UtilsTest extends PHPUnit_Framework_TestCase
         $this->assertEquals($ref, generateLocation($ref, 'localhost'));
         $ref = 'http://localhost:8080/?test';
         $this->assertEquals($ref, generateLocation($ref, 'localhost:8080'));
+        $ref = '?localreferer#hash';
+        $this->assertEquals($ref, generateLocation($ref, 'localhost:8080'));
     }
 
     /**
@@ -121,42 +139,41 @@ class UtilsTest extends PHPUnit_Framework_TestCase
     }
 
     /**
-     * Check supported PHP versions
+     * Test is_session_id_valid with a valid ID - TEST ALL THE HASHES!
+     *
+     * This tests extensively covers all hash algorithms / bit representations
      */
-    public function testCheckSupportedPHPVersion()
+    public function testIsAnyHashSessionIdValid()
     {
-        $minVersion = '5.3';
-        checkPHPVersion($minVersion, '5.4.32');
-        checkPHPVersion($minVersion, '5.5');
-        checkPHPVersion($minVersion, '5.6.10');
+        foreach (self::$sidHashes as $algo => $bpcs) {
+            foreach ($bpcs as $bpc => $hash) {
+                $this->assertTrue(is_session_id_valid($hash));
+            }
+        }
     }
 
     /**
-     * Check a unsupported PHP version
-     * @expectedException              Exception
-     * @expectedExceptionMessageRegExp /Your PHP version is obsolete/
+     * Test is_session_id_valid with a valid ID - SHA-1 hashes
      */
-    public function testCheckSupportedPHPVersion51()
+    public function testIsSha1SessionIdValid()
     {
-        checkPHPVersion('5.3', '5.1.0');
+        $this->assertTrue(is_session_id_valid(sha1('shaarli')));
     }
 
     /**
-     * Check another unsupported PHP version
-     * @expectedException              Exception
-     * @expectedExceptionMessageRegExp /Your PHP version is obsolete/
+     * Test is_session_id_valid with a valid ID - SHA-256 hashes
      */
-    public function testCheckSupportedPHPVersion52()
+    public function testIsSha256SessionIdValid()
     {
-        checkPHPVersion('5.3', '5.2');
+        $this->assertTrue(is_session_id_valid(hash('sha256', 'shaarli')));
     }
 
     /**
-     * Test is_session_id_valid with a valid ID.
+     * Test is_session_id_valid with a valid ID - SHA-512 hashes
      */
-    public function testIsSessionIdValid()
+    public function testIsSha512SessionIdValid()
     {
-        $this->assertTrue(is_session_id_valid('123456789012345678901234567890az'));
+        $this->assertTrue(is_session_id_valid(hash('sha512', 'shaarli')));
     }
 
     /**
@@ -166,6 +183,45 @@ class UtilsTest extends PHPUnit_Framework_TestCase
     {
         $this->assertFalse(is_session_id_valid(''));
         $this->assertFalse(is_session_id_valid(array()));
-        $this->assertFalse(is_session_id_valid('c0ZqcWF3VFE2NmJBdm1HMVQ0ZHJ3UmZPbTFsNGhkNHI='));
+        $this->assertFalse(
+            is_session_id_valid('c0ZqcWF3VFE2NmJBdm1HMVQ0ZHJ3UmZPbTFsNGhkNHI=')
+        );
+    }
+
+    /**
+     * Test text2clickable without a redirector being set.
+     */
+    public function testText2clickableWithoutRedirector()
+    {
+        $text = 'stuff http://hello.there/is=someone#here otherstuff';
+        $expectedText = 'stuff <a href="http://hello.there/is=someone#here">http://hello.there/is=someone#here</a> otherstuff';
+        $processedText = text2clickable($text, '');
+        $this->assertEquals($expectedText, $processedText);
+    }
+
+    /**
+     * Test text2clickable a redirector set.
+     */
+    public function testText2clickableWithRedirector()
+    {
+        $text = 'stuff http://hello.there/is=someone#here otherstuff';
+        $redirector = 'http://redirector.to';
+        $expectedText = 'stuff <a href="'.
+            $redirector .
+            urlencode('http://hello.there/is=someone#here') .
+            '">http://hello.there/is=someone#here</a> otherstuff';
+        $processedText = text2clickable($text, $redirector);
+        $this->assertEquals($expectedText, $processedText);
+    }
+
+    /**
+     * Test testSpace2nbsp.
+     */
+    public function testSpace2nbsp()
+    {
+        $text = '  Are you   thrilled  by flags   ?'. PHP_EOL .' Really?';
+        $expectedText = '&nbsp; Are you &nbsp; thrilled &nbsp;by flags &nbsp; ?'. PHP_EOL .'&nbsp;Really?';
+        $processedText = space2nbsp($text);
+        $this->assertEquals($expectedText, $processedText);
     }
 }