diff --git a/htdocs/core/lib/functions.lib.php b/htdocs/core/lib/functions.lib.php index aa70c2680dd..5c3d78aa0ee 100644 --- a/htdocs/core/lib/functions.lib.php +++ b/htdocs/core/lib/functions.lib.php @@ -2243,12 +2243,12 @@ function dol_print_graph($htmlid,$width,$height,$data,$showlegend=0,$type='pie', * MAIN_DISABLE_TRUNC=1 can disable all truncings * * @param string $string String to truncate - * @param int $size Max string size visible. 0 for no limit. Final string size can be 1 more (if size was max+1) or 3 more (if we added ...) + * @param int $size Max string size visible (excluding ...). 0 for no limit. WARNING: Final string size can have 3 more chars (if we added ..., or if size was max+1 or max+2 or max+3 so it does not worse to replace with ...) * @param string $trunc Where to trunc: right, left, middle (size must be a 2 power), wrap * @param string $stringencoding Tell what is source string encoding * @param int $nodot Truncation do not add ... after truncation. So it's an exact truncation. * @param int $display Trunc is use to display and can be changed for small screen. TODO Remove this param (must be dealt with CSS) - * @return string Truncated string + * @return string Truncated string. WARNING: length is never higher than $size if $nodot is set, but can be 3 chars higher otherwise. */ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodot=0, $display=0) { @@ -2264,9 +2264,10 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodo if ($trunc == 'right') { $newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string; - if (dol_strlen($newstring,$stringencoding) > ($size+($nodot?0:1))) + if (dol_strlen($newstring,$stringencoding) > ($size+($nodot?0:3))) // If nodot is 0 and size is 1,2 or 3 chars more, we don't trunc and don't add ... return dol_substr($newstring,0,$size,$stringencoding).($nodot?'':'...'); else + //return 'u'.$size.'-'.$newstring.'-'.dol_strlen($newstring,$stringencoding).'-'.$string; return $string; } elseif ($trunc == 'middle') @@ -2284,7 +2285,7 @@ function dol_trunc($string,$size=40,$trunc='right',$stringencoding='UTF-8',$nodo elseif ($trunc == 'left') { $newstring=dol_textishtml($string)?dol_string_nohtmltag($string,1):$string; - if (dol_strlen($newstring,$stringencoding) > ($size+1)) + if (dol_strlen($newstring,$stringencoding) > ($size+($nodot?0:3))) // If nodot is 0 and size is 1,2 or 3 chars more, we don't trunc and don't add ... return '...'.dol_substr($newstring,dol_strlen($newstring,$stringencoding) - $size,$size,$stringencoding); else return $string; diff --git a/test/phpunit/FunctionsLibTest.php b/test/phpunit/FunctionsLibTest.php index 786970e2b3a..3345d780b7e 100644 --- a/test/phpunit/FunctionsLibTest.php +++ b/test/phpunit/FunctionsLibTest.php @@ -130,21 +130,21 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase /*$tmp=dol_buildpath('/google/oauth2callback.php', 0); var_dump($tmp); */ - + /*$tmp=dol_buildpath('/google/oauth2callback.php', 1); var_dump($tmp); */ - + $result=dol_buildpath('/google/oauth2callback.php', 2); print __METHOD__." result=".$result."\n"; $this->assertStringStartsWith('http', $result); - + $result=dol_buildpath('/google/oauth2callback.php', 3); print __METHOD__." result=".$result."\n"; $this->assertStringStartsWith('http', $result); } - - + + /** * testGetBrowserInfo * @@ -502,32 +502,48 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase // Default trunc (will add ... if truncation truncation or keep last char if only one char) $input="éeéeéeàa"; $after=dol_trunc($input,3); - $this->assertEquals("éeé...",$after); + $this->assertEquals("éeé...",$after,'Test A1'); $after=dol_trunc($input,2); - $this->assertEquals("ée...",$after); + $this->assertEquals("ée...",$after,'Test A2'); + $after=dol_trunc($input,1); + $this->assertEquals("é...",$after,'Test A3'); + $input="éeéeé"; + $after=dol_trunc($input,3); + $this->assertEquals("éeéeé",$after,'Test B1'); + $after=dol_trunc($input,2); + $this->assertEquals("éeéeé",$after,'Test B2'); + $after=dol_trunc($input,1); + $this->assertEquals("é...",$after,'Test B3'); + $input="éeée"; + $after=dol_trunc($input,3); + $this->assertEquals("éeée",$after,'Test C1'); + $after=dol_trunc($input,2); + $this->assertEquals("éeée",$after,'Test C2'); + $after=dol_trunc($input,1); + $this->assertEquals("éeée",$after,'Test C3'); $input="éeé"; $after=dol_trunc($input,3); - $this->assertEquals("éeé",$after); + $this->assertEquals("éeé",$after,'Test C'); $after=dol_trunc($input,2); - $this->assertEquals("éeé",$after); + $this->assertEquals("éeé",$after,'Test D'); $after=dol_trunc($input,1); - $this->assertEquals("é...",$after); + $this->assertEquals("éeé",$after,'Test E'); // Trunc with no ... $input="éeéeéeàa"; $after=dol_trunc($input,3,'right','UTF-8',1); - $this->assertEquals("éeé",$after); + $this->assertEquals("éeé",$after,'Test F'); $after=dol_trunc($input,2,'right','UTF-8',1); - $this->assertEquals("ée",$after); + $this->assertEquals("ée",$after,'Test G'); $input="éeé"; $after=dol_trunc($input,3,'right','UTF-8',1); - $this->assertEquals("éeé",$after); + $this->assertEquals("éeé",$after,'Test H'); $after=dol_trunc($input,2,'right','UTF-8',1); - $this->assertEquals("ée",$after); + $this->assertEquals("ée",$after,'Test I'); $after=dol_trunc($input,1,'right','UTF-8',1); - $this->assertEquals("é",$after); + $this->assertEquals("é",$after,'Test J'); $input="éeéeéeàa"; $after=dol_trunc($input,4,'middle'); - $this->assertEquals("ée...àa",$after); + $this->assertEquals("ée...àa",$after,'Test K'); return true; } @@ -658,7 +674,7 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase $this->assertEquals("21 jump street\nMyTown, MyState, 99999",$address); } - + /** * testDolFormatAddress * @@ -671,18 +687,18 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase $user=$this->savuser; $langs=$this->savlangs; $db=$this->savdb; - + $object=new Societe($db); $object->initAsSpecimen(); - + $object->country_code='FR'; $phone=dol_print_phone('1234567890', $object->country_code); $this->assertEquals('12 34 56 78 90', $phone, 'Phone for FR 1'); - + $object->country_code='FR'; $phone=dol_print_phone('1234567890', $object->country_code, 0, 0, 0, ''); $this->assertEquals('1234567890', $phone, 'Phone for FR 2'); - + $object->country_code='FR'; $phone=dol_print_phone('1234567890', $object->country_code, 0, 0, 0, ' '); $this->assertEquals('12 34 56 78 90', $phone, 'Phone for FR 3'); @@ -690,10 +706,10 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase $object->country_code='CA'; $phone=dol_print_phone('1234567890', $object->country_code, 0, 0, 0, ' '); $this->assertEquals('(123) 456-7890', $phone, 'Phone for CA 1'); - + } - - + + /** * testImgPicto * @@ -1043,5 +1059,5 @@ class FunctionsLibTest extends PHPUnit_Framework_TestCase return true; } - + }