]> git.mxchange.org Git - friendica.git/commitdiff
get_tags tests corrected. They test for the right things now.
authorAlexander Kampmann <programmer@nurfuerspam.de>
Wed, 14 Mar 2012 11:30:52 +0000 (12:30 +0100)
committerAlexander Kampmann <programmer@nurfuerspam.de>
Wed, 14 Mar 2012 11:30:52 +0000 (12:30 +0100)
mod/item.php
tests/get_tags_test.php

index 0ff7f6a7c8f43e176d4eb93ec8a71cc8e761a1cd..e4336b974cbb3f6b7b85f1e8f9ec434f8f4952b2 100755 (executable)
@@ -425,7 +425,7 @@ function item_post(&$a) {
 
        if(count($tags)) {
                foreach($tags as $tag) {
-                       handle_tag($body, $inform, $str_tags, $profile_uid, $tag); 
+                       handle_tag($a, $body, $inform, $str_tags, $profile_uid, $tag); 
                }
        }
 
@@ -830,7 +830,7 @@ function item_content(&$a) {
  * @param unknown_type $profile_uid
  * @param unknown_type $tag the tag to replace
  */
-function handle_body(&$body, &$inform, &$str_tags, $profile_uid, $tag) {
+function handle_tag($a, &$body, &$inform, &$str_tags, $profile_uid, $tag) {
        //is it a hash tag? 
        if(strpos($tag,'#') === 0) {\r
                //if the tag is replaced...
@@ -851,7 +851,7 @@ function handle_body(&$body, &$inform, &$str_tags, $profile_uid, $tag) {
                                $str_tags .= ',';\r
                        $str_tags .= $newtag;\r
                }\r
-               continue;\r
+               return;\r
        }
        //is it a person tag? \r
        if(strpos($tag,'@') === 0) {\r
@@ -887,14 +887,15 @@ function handle_body(&$body, &$inform, &$str_tags, $profile_uid, $tag) {
                                //get the id
                                $tagcid = intval(substr($newname,strrpos($newname,'+') + 1));\r
                                //remove the next word from tag's name
-                               if(strpos($name,' '))\r
-                                       $name = substr($name,0,strpos($name,' '));\r
+                               if(strpos($name,' ')) {\r
+                                       $name = substr($name,0,strpos($name,' '));
+                               }\r
                        }
                        if($tagcid) { //if there was an id
                                //select contact with that id from the logged in user's contact list\r
                                $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1",\r
                                                intval($tagcid),\r
-                                               intval($profile_uid)\r
+                                               intval($profile_uid)
                                );\r
                        } elseif(strstr($name,'_') || strstr($name,' ')) { //no id
                                //get the real name\r
index ee2daced101d237c98f4dfe7ebb299fcb871f5b1..bde2db7d09e83306215a934b212759d471eb30b1 100644 (file)
@@ -1,14 +1,41 @@
 <?php
 /**
+ * This file contains the tests for get_tags and the tag handling in item.php
+ * 
  * @package test.util
  */
 
-require_once 'include/template_processor.php';\r
+/**
+ * required, because it contains the get_tags() function
+ */
 require_once 'include/text.php';
+/**
+ * required, because it contains the tag handling
+ */
 require_once 'mod/item.php';
 
+/**
+ * A class which can be used as replacement for an app if
+ * only get_baseurl is used. 
+ * 
+ * @author Alexander Kampmann
+ * @package test.util
+ */
+class MockApp {
+       function get_baseurl() {
+               return "baseurl"; 
+       }
+}; 
+
+/**
+ * the test should not rely on a database, 
+ * so this is a replacement for the database access method q. 
+ * 
+ * It simulates the user with uid 11 has one contact, named Mike Lastname. 
+ * 
+ * @param string $sql
+ */
 function q($sql) {
-       
        $result=array(array('id'=>15, 
                        'attag'=>'', 'network'=>'dfrn', 
                        'name'=>'Mike Lastname', 'alias'=>'Mike', 
@@ -16,48 +43,59 @@ function q($sql) {
        
        $args=func_get_args(); 
 
-       $str="";
-       foreach($args as $arg) {
-               $str.=", ".$arg; 
-       }
-       
        //last parameter is always (in this test) uid, so, it should be 11
        if($args[count($args)-1]!=11) {
-               throw new Exception("q from get_tags_test was used and uid was not 11. ")
+               return
        }
        
-       if(2==count($args)) {
+       
+       if(3==count($args)) {
                //first call in handle_body, id only
-               if($result[0]['id']===$args[1]) {
+               if($result[0]['id']==$args[1]) {
                        return $result; 
                }
-       throw new Exception($str); 
                //second call in handle_body, name
                if($result[0]['name']===$args[1]) {\r
                        return $result;\r
                }
        }
-       throw new Exception($str);
        //third call in handle_body, nick or attag
        if($result[0]['nick']===$args[2] || $result[0]['attag']===$args[1]) {\r
                return $result;\r
        }
-//     throw new Exception("Nothing fitted: ".$args[1].", ".$args[2]); 
 }
 
+/**
+ * replacement for dbesc. 
+ * I don't want to test dbesc here, so
+ * I just return the input. It won't be a problem, because 
+ * the test does not use a real database. 
+ * 
+ * DON'T USE HAT FUNCTION OUTSIDE A TEST!
+ * 
+ * @param string $str
+ * @return input
+ */
 function dbesc($str) {
        return $str; 
 }
 
-class GetTagsTest extends PHPUnit_Framework_TestCase {\r
-\r
+/**
+ * TestCase for tag handling. 
+ * 
+ * @author alexander
+ * @package test.util
+ */
+class GetTagsTest extends PHPUnit_Framework_TestCase {
+       /** the mock to use as app */
+       private $a; \r
+
+       /**
+        * initialize the test. That's a phpUnit function, 
+        * don't change its name.
+        */\r
        public function setUp() {\r
-               set_include_path(\r
-                               get_include_path() . PATH_SEPARATOR\r
-                               . 'include' . PATH_SEPARATOR\r
-                               . 'library' . PATH_SEPARATOR\r
-                               . 'library/phpsec' . PATH_SEPARATOR\r
-                               . '.' );\r
+               $this->a=new MockApp(); 
        }
 
        /**\r
@@ -70,10 +108,54 @@ class GetTagsTest extends PHPUnit_Framework_TestCase {
 
                $inform=''; 
                $str_tags='';
-               handle_body($text, $inform, $str_tags, 11, $tags[0]);
-\r
-               $this->assertEquals("@Mike", $tags[0]);
+               foreach($tags as $tag) {
+                       handle_tag($this->a, $text, $inform, $str_tags, 11, $tag);
+               }
+
+               //correct tags found?
+               $this->assertEquals(1, count($tags)); \r
+               $this->assertTrue(in_array("@Mike", $tags));
+               
+               //correct output from handle_tag?
+               $this->assertEquals("cid:15", $inform); 
+               $this->assertEquals("@[url=http://justatest.de]Mike Lastname[/url]", $str_tags);
                $this->assertEquals("hi @[url=http://justatest.de]Mike Lastname[/url]", $text);\r
+       }
+       
+       /**\r
+        * test with one Person tag. 
+        * There's a minor spelling mistake...\r
+        */\r
+       public function testGetTagsShortPersonSpelling() {\r
+               $text="hi @Mike.because";\r
+       \r
+               $tags=get_tags($text);\r
+       
+               //correct tags found?\r
+               $this->assertEquals(1, count($tags));\r
+               $this->assertTrue(in_array("@Mike.because", $tags));
+               \r
+               $inform='';\r
+               $str_tags='';\r
+               handle_tag($this->a, $text, $inform, $str_tags, 11, $tags[0]);\r
+       \r
+               $this->assertEquals("cid:15", $inform); 
+               $this->assertEquals("@[url=http://justatest.de]Mike Lastname[/url]", $str_tags);
+               $this->assertEquals("hi @[url=http://justatest.de]Mike Lastname[/url].because", $text);\r
+       }
+       
+       /**\r
+        * test with two Person tags. 
+        * There's a minor spelling mistake...\r
+        */\r
+       public function testGetTagsPerson2Spelling() {\r
+               $text="hi @Mike@campino@friendica.eu";\r
+       \r
+               $tags=get_tags($text);\r
+       
+               $this->assertEquals(2, count($tags)); \r
+               $this->assertTrue(in_array("@Mike", $tags));
+               $this->assertTrue(in_array("@campino@friendica.eu", $tags));\r
        }\r
 
        /**
@@ -83,8 +165,9 @@ class GetTagsTest extends PHPUnit_Framework_TestCase {
                $text="This is a #test_case";\r
 \r
                $tags=get_tags($text);\r
-\r
-               $this->assertEquals("#test_case", $tags[0]);\r
+
+               $this->assertEquals(1, count($tags));\r
+               $this->assertTrue(in_array("#test_case", $tags));\r
        }\r
 
        /**
@@ -95,13 +178,21 @@ class GetTagsTest extends PHPUnit_Framework_TestCase {
 \r
                $tags=get_tags($text);\r
 
-               $inform='';\r
-               $str_tags='';\r
-               handle_body($text, $inform, $str_tags, 11, $tags[0]);
-               
-               $this->assertEquals("hi @[url=http://justatest.de]Mike[/url] This is a #test_case", $text); \r
-               $this->assertEquals("@Mike", $tags[0]);\r
-               $this->assertEquals("#test_case", $tags[1]);\r
+               $this->assertEquals(3, count($tags));
+               $this->assertTrue(in_array("@Mike", $tags));
+               $this->assertTrue(in_array("@Mike This", $tags));\r
+               $this->assertTrue(in_array("#test_case", $tags));\r
+
+               $inform='';
+               $str_tags='';
+               foreach($tags as $tag) {
+                       handle_tag($this->a, $text, $inform, $str_tags, 11, $tag);
+               }
+               \r
+               $this->assertEquals("cid:15", $inform); 
+               $this->assertEquals("@[url=http://justatest.de]Mike Lastname[/url],#[url=baseurl/search?search=test%20case]test case[/url]", $str_tags);
+               $this->assertEquals("hi @[url=http://justatest.de]Mike Lastname[/url] This is a #[url=baseurl/search?search=test%20case]test case[/url]", $text); 
+               \r
        }\r
 
        /**
@@ -112,8 +203,9 @@ class GetTagsTest extends PHPUnit_Framework_TestCase {
 \r
                $tags=get_tags($text);\r
 \r
-               $this->assertEquals("@Mike", $tags[0]);\r
-               $this->assertEquals("#test_case", $tags[1]);\r
+               $this->assertEquals(2, count($tags));
+               $this->assertTrue(in_array("@Mike", $tags));
+               $this->assertTrue(in_array("#test_case", $tags));\r
        }\r
 
        /**
@@ -123,10 +215,45 @@ class GetTagsTest extends PHPUnit_Framework_TestCase {
                $text="@Test I saw the Theme Dev group was created.";\r
 \r
                $tags=get_tags($text);\r
-\r
-               $this->assertEquals("@Test", $tags[0]);\r
+
+               $this->assertEquals(2, count($tags));\r
+               $this->assertTrue(in_array("@Test I", $tags));
+               $this->assertTrue(in_array("@Test", $tags));\r
        }\r
 
+       /**
+        * this test demonstrates strange behaviour by intval. 
+        * It makes the next test fail. 
+        */
+       public function testIntval() {
+               $this->assertEquals(15, intval("15 it")); 
+       }
+       
+       /**
+        * test a tag with an id in it
+        */
+       public function testIdTag() {
+               $text="Test with @mike+15 id tag"; 
+               
+               $tags=get_tags($text); 
+               
+               $this->assertEquals(2, count($tags)); 
+               $this->assertTrue(in_array("@mike+15", $tags));
+               
+               //happens right now, but it shouldn't be necessary
+               $this->assertTrue(in_array("@mike+15 id", $tags));
+               
+               $inform='';\r
+               $str_tags='';
+               foreach($tags as $tag) {
+                       handle_tag($this->a, $text, $inform, $str_tags, 11, $tag);
+               }
+               
+               $this->assertEquals("Test with @[url=http://justatest.de]Mike Lastname[/url] id tag", $text);\r
+               $this->assertEquals("@[url=http://justatest.de]Mike Lastname[/url]", $str_tags);\r
+               $this->assertEquals("cid:15", $inform);
+       }
+       
        /**
         * test with two persons and one special tag.
         */\r
@@ -135,11 +262,13 @@ class GetTagsTest extends PHPUnit_Framework_TestCase {
                ." so @somebody@friendica.com may change #things.";\r
 \r
                $tags=get_tags($text);\r
-\r
-               $this->assertEquals("@Mike", $tags[0]);\r
-               $this->assertEquals("#test_cases", $tags[1]);\r
-               $this->assertEquals("@somebody@friendica.com", $tags[2]);\r
-               $this->assertEquals("#things", $tags[3]);\r
+
+               $this->assertEquals(5, count($tags));\r
+               $this->assertTrue(in_array("@Mike", $tags));\r
+               $this->assertTrue(in_array("#test_cases", $tags));
+               $this->assertTrue(in_array("@somebody@friendica.com", $tags));\r
+               $this->assertTrue(in_array("@somebody@friendica.com may", $tags));\r
+               $this->assertTrue(in_array("#things", $tags));\r
        }\r
 
        /**
@@ -156,19 +285,23 @@ class GetTagsTest extends PHPUnit_Framework_TestCase {
 \r
                $tags=get_tags($text);\r
 \r
-               $this->assertEquals("@Mike", $tags[0]);\r
-               $this->assertEquals("#test_cases", $tags[1]);\r
-               $this->assertEquals("@somebody@friendica.com", $tags[2]);\r
-               $this->assertEquals("#things", $tags[3]);\r
-               $this->assertEquals("#pitfalls", $tags[4]);\r
-               $this->assertEquals("#tags", $tags[5]);\r
-               $this->assertEquals("@comment", $tags[6]);\r
-               $this->assertEquals("@fullstops", $tags[7]);\r
-               $this->assertEquals("#things", $tags[8]);\r
-               $this->assertEquals("@Mike", $tags[9]);\r
-               $this->assertEquals("@campino@friendica.eu", $tags[10]);\r
-               $this->assertEquals("#nice", $tags[11]);\r
-               $this->assertEquals("@first_last", $tags[12]);\r
+               $this->assertTrue(in_array("@Mike", $tags));\r
+               $this->assertTrue(in_array("#test_cases", $tags));\r
+               $this->assertTrue(in_array("@somebody@friendica.com", $tags));\r
+               $this->assertTrue(in_array("#things", $tags));\r
+               $this->assertTrue(in_array("#pitfalls", $tags));\r
+               $this->assertTrue(in_array("#tags", $tags));\r
+               $this->assertTrue(in_array("@comment", $tags));\r
+               $this->assertTrue(in_array("@fullstops.because", $tags));\r
+               $this->assertTrue(in_array("#things", $tags));\r
+               $this->assertTrue(in_array("@Mike", $tags));\r
+               $this->assertTrue(in_array("#nice", $tags));\r
+               $this->assertTrue(in_array("@first_last", $tags));
+               
+               //right now, none of the is matched
+               $this->assertFalse(in_array("@Mike@campino@friendica.eu", $tags));\r
+               $this->assertTrue(in_array("@campino@friendica.eu", $tags));
+               $this->assertTrue(in_array("@campino@friendica.eu is", $tags));\r
        }\r
 
        /**