2011-05-01 11:28:46 +02:00
< ? php
/* Copyright ( C ) 2010 Laurent Destailleur < eldy @ users . sourceforge . net >
*
2012-03-25 14:25:32 +02:00
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 2 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
2011-12-17 21:58:44 +01:00
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
* or see http :// www . gnu . org /
2012-03-25 14:25:32 +02:00
*/
2011-05-01 11:28:46 +02:00
/**
2012-01-11 13:07:02 +01:00
* \file test / phpunit / FunctionsTest . php
2011-05-01 11:28:46 +02:00
* \ingroup test
* \brief PHPUnit test
* \remarks To run this script as CLI : phpunit filename . php
*/
global $conf , $user , $langs , $db ;
//define('TEST_DB_FORCE_TYPE','mysql'); // This is to force using mysql driver
2011-09-16 18:16:39 +02:00
require_once 'PHPUnit/Autoload.php' ;
2011-05-01 11:28:46 +02:00
require_once dirname ( __FILE__ ) . '/../../htdocs/master.inc.php' ;
2012-02-05 15:13:31 +01:00
require_once dirname ( __FILE__ ) . '/../../htdocs/core/lib/date.lib.php' ;
2012-03-26 08:21:40 +02:00
require_once dirname ( __FILE__ ) . '/../../htdocs/core/lib/json.lib.php' ;
2011-05-01 11:28:46 +02:00
if ( ! defined ( 'NOREQUIREUSER' )) define ( 'NOREQUIREUSER' , '1' );
if ( ! defined ( 'NOREQUIREDB' )) define ( 'NOREQUIREDB' , '1' );
if ( ! defined ( 'NOREQUIRESOC' )) define ( 'NOREQUIRESOC' , '1' );
if ( ! defined ( 'NOREQUIRETRAN' )) define ( 'NOREQUIRETRAN' , '1' );
if ( ! defined ( 'NOCSRFCHECK' )) define ( 'NOCSRFCHECK' , '1' );
if ( ! defined ( 'NOTOKENRENEWAL' )) define ( 'NOTOKENRENEWAL' , '1' );
if ( ! defined ( 'NOREQUIREMENU' )) define ( 'NOREQUIREMENU' , '1' ); // If there is no menu to show
if ( ! defined ( 'NOREQUIREHTML' )) define ( 'NOREQUIREHTML' , '1' ); // If we don't need to load the html.form.class.php
if ( ! defined ( 'NOREQUIREAJAX' )) define ( 'NOREQUIREAJAX' , '1' );
if ( ! defined ( " NOLOGIN " )) define ( " NOLOGIN " , '1' ); // If this page is public (can be called outside logged session)
/**
2011-09-23 14:21:00 +02:00
* Class for PHPUnit tests
2011-09-10 14:28:00 +02:00
*
2011-05-01 11:28:46 +02:00
* @ backupGlobals disabled
* @ backupStaticAttributes enabled
* @ remarks backupGlobals must be disabled to have db , conf , user and lang not erased .
*/
class FunctionsTest extends PHPUnit_Framework_TestCase
{
2011-12-17 16:44:48 +01:00
protected $savconf ;
protected $savuser ;
protected $savlangs ;
protected $savdb ;
/**
* Constructor
* We save global variables into local variables
*
* @ return CoreTest
*/
function FunctionsTest ()
{
//$this->sharedFixture
global $conf , $user , $langs , $db ;
$this -> savconf = $conf ;
$this -> savuser = $user ;
$this -> savlangs = $langs ;
$this -> savdb = $db ;
print __METHOD__ . " db->type= " . $db -> type . " user->id= " . $user -> id ;
//print " - db ".$db->db;
print " \n " ;
}
// Static methods
public static function setUpBeforeClass ()
2011-05-01 11:28:46 +02:00
{
2011-12-17 16:44:48 +01:00
global $conf , $user , $langs , $db ;
//$db->begin(); // This is to have all actions inside a transaction even if test launched without suite.
2011-05-01 11:28:46 +02:00
2011-12-17 16:44:48 +01:00
print __METHOD__ . " \n " ;
2011-05-01 11:28:46 +02:00
}
public static function tearDownAfterClass ()
{
2011-12-17 16:44:48 +01:00
global $conf , $user , $langs , $db ;
//$db->rollback();
2011-05-01 11:28:46 +02:00
2011-12-17 16:44:48 +01:00
print __METHOD__ . " \n " ;
2011-05-01 11:28:46 +02:00
}
2012-02-06 00:07:48 +01:00
/**
* Init phpunit tests
*
* @ return void
*/
2011-05-01 11:28:46 +02:00
protected function setUp ()
{
2011-12-17 16:44:48 +01:00
global $conf , $user , $langs , $db ;
$conf = $this -> savconf ;
$user = $this -> savuser ;
$langs = $this -> savlangs ;
$db = $this -> savdb ;
2011-05-01 11:28:46 +02:00
2011-12-17 16:44:48 +01:00
print __METHOD__ . " \n " ;
2011-05-01 11:28:46 +02:00
}
2012-02-06 00:07:48 +01:00
/**
* End phpunit tests
*
* @ return void
*/
2011-05-01 11:28:46 +02:00
protected function tearDown ()
{
2011-12-17 16:44:48 +01:00
print __METHOD__ . " \n " ;
2011-05-01 11:28:46 +02:00
}
2012-02-29 19:41:12 +01:00
/**
* testDolHtmlCleanLastBr
*
* @ return void
*/
public function testGetBrowserVersion ()
{
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt; KITV4 Wanadoo; KITV5 Wanadoo)' ; // MSIE 5.0
$tmp = getBrowserInfo ();
$this -> assertEquals ( 'ie' , $tmp [ 'browsername' ]);
$this -> assertEquals ( '5.0' , $tmp [ 'browserversion' ]);
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.5a) Gecko/20030728 Mozilla Firefox/0.9.1' ; // Firefox 0.9.1
$tmp = getBrowserInfo ();
$this -> assertEquals ( 'firefox' , $tmp [ 'browsername' ]);
$this -> assertEquals ( '0.9.1' , $tmp [ 'browserversion' ]);
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Mozilla/3.0 (Windows 98; U) Opera 6.03 [en]' ;
$tmp = getBrowserInfo ();
$this -> assertEquals ( 'opera' , $tmp [ 'browsername' ]);
$this -> assertEquals ( '6.03' , $tmp [ 'browserversion' ]);
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.21 (KHTML, like Gecko) Chrome/19.0.1042.0 Safari/535.21' ;
$tmp = getBrowserInfo ();
$this -> assertEquals ( 'chrome' , $tmp [ 'browsername' ]);
$this -> assertEquals ( '19.0.1042.0' , $tmp [ 'browserversion' ]);
2012-02-29 20:51:44 +01:00
$_SERVER [ 'HTTP_USER_AGENT' ] = 'chrome (Mozilla/5.0 (X11; Linux i686) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11)' ;
$tmp = getBrowserInfo ();
$this -> assertEquals ( 'chrome' , $tmp [ 'browsername' ]);
$this -> assertEquals ( '17.0.963.56' , $tmp [ 'browserversion' ]);
2012-02-29 19:41:12 +01:00
$_SERVER [ 'HTTP_USER_AGENT' ] = 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_8; de-at) AppleWebKit/533.21.1 (KHTML, like Gecko) Version/5.0.5 Safari/533.21.1' ;
$tmp = getBrowserInfo ();
$this -> assertEquals ( 'safari' , $tmp [ 'browsername' ]);
$this -> assertEquals ( '533.21.1' , $tmp [ 'browserversion' ]);
}
2011-05-01 11:28:46 +02:00
/**
2012-02-12 16:41:43 +01:00
* testDolHtmlCleanLastBr
*
* @ return boolean
2011-05-01 11:28:46 +02:00
*/
2011-12-17 16:53:36 +01:00
public function testDolHtmlCleanLastBr ()
2011-05-01 11:28:46 +02:00
{
$input = " A string<br> " ;
$after = dol_htmlcleanlastbr ( $input );
2011-05-01 12:24:46 +02:00
$this -> assertEquals ( " A string " , $after );
2011-05-01 11:28:46 +02:00
$input = " A string first<br> \n A string second<br> " ;
$after = dol_htmlcleanlastbr ( $input );
2011-05-01 12:24:46 +02:00
$this -> assertEquals ( " A string first<br> \n A string second " , $after );
2011-05-01 11:38:38 +02:00
$input = " A string \n <br type= \" _moz \" /> \n " ;
2011-05-01 11:28:46 +02:00
$after = dol_htmlcleanlastbr ( $input );
2011-05-01 12:24:46 +02:00
$this -> assertEquals ( " A string " , $after );
2011-05-01 11:28:46 +02:00
$input = " A string \n <br><br /> \n \n " ;
$after = dol_htmlcleanlastbr ( $input );
2011-05-01 12:24:46 +02:00
$this -> assertEquals ( " A string " , $after );
2011-05-01 11:28:46 +02:00
return true ;
}
2011-05-01 12:24:46 +02:00
/**
2012-02-12 16:41:43 +01:00
* testDolHtmlEntitiesBr
*
* @ return boolean
2011-05-01 12:24:46 +02:00
*/
2011-12-17 16:53:36 +01:00
public function testDolHtmlEntitiesBr ()
2011-05-01 12:24:46 +02:00
{
$input = " A string \n with a é, &, < and >. " ; // Text not already HTML
$after = dol_htmlentitiesbr ( $input , 0 ); // Add <br> before \n
$this -> assertEquals ( " A string<br> \n with a é, &, < and >. " , $after );
$input = " A string \n with a é, &, < and >. " ; // Text not already HTML
$after = dol_htmlentitiesbr ( $input , 1 ); // Replace \n with <br>
$this -> assertEquals ( " A string<br>with a é, &, < and >. " , $after );
$input = " A string<br> \n with a é, &, < and >. " ; // Text already HTML, so &,<,> should not be converted
$after = dol_htmlentitiesbr ( $input );
$this -> assertEquals ( " A string<br> \n with a é, &, < and >. " , $after );
$input = " <li> \n A string with a é, &, < and >.</li> \n Another string " ; // Text already HTML, so &,<,> should not be converted
$after = dol_htmlentitiesbr ( $input );
$this -> assertEquals ( " <li> \n A string with a é, &, < and >.</li> \n Another string " , $after );
return true ;
}
2011-12-17 16:53:36 +01:00
/**
2012-02-12 16:41:43 +01:00
* testDolTextIsHtml
*
* @ return void
2011-12-17 16:53:36 +01:00
*/
public function testDolTextIsHtml ()
{
// True
$input = '<html>xxx</html>' ;
$after = dol_textishtml ( $input );
$this -> assertTrue ( $after );
$input = '<body>xxx</body>' ;
$after = dol_textishtml ( $input );
$this -> assertTrue ( $after );
$input = 'xxx <b>yyy</b> zzz' ;
$after = dol_textishtml ( $input );
$this -> assertTrue ( $after );
$input = 'xxx<br>' ;
$after = dol_textishtml ( $input );
$this -> assertTrue ( $after );
$input = 'text with <div>some div</div>' ;
$after = dol_textishtml ( $input );
$this -> assertTrue ( $after );
$input = 'text with HTML entities' ;
$after = dol_textishtml ( $input );
$this -> assertTrue ( $after );
// False
$input = 'xxx < br>' ;
$after = dol_textishtml ( $input );
$this -> assertFalse ( $after );
}
2011-12-17 16:44:48 +01:00
/**
2012-02-12 16:41:43 +01:00
* testDolTextIsHtml
*
* @ return void
*/
public function testDolUtf8Check ()
{
// True
$result = utf8_check ( 'azerty' );
$this -> assertTrue ( $result );
$file = dirname ( __FILE__ ) . '/textutf8.txt' ;
$filecontent = file_get_contents ( $file );
$result = utf8_check ( $filecontent );
$this -> assertTrue ( $result );
$file = dirname ( __FILE__ ) . '/textiso.txt' ;
$filecontent = file_get_contents ( $file );
$result = utf8_check ( $filecontent );
$this -> assertFalse ( $result );
}
/**
* testDolTrunc
*
* @ return boolean
2011-12-17 16:44:48 +01:00
*/
public function testDolTrunc ()
{
// 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 );
$after = dol_trunc ( $input , 2 );
$this -> assertEquals ( " ée... " , $after );
$input = " éeé " ;
$after = dol_trunc ( $input , 3 );
$this -> assertEquals ( " éeé " , $after );
$after = dol_trunc ( $input , 2 );
$this -> assertEquals ( " éeé " , $after );
$after = dol_trunc ( $input , 1 );
$this -> assertEquals ( " é... " , $after );
// Trunc with no ...
$input = " éeéeéeàa " ;
$after = dol_trunc ( $input , 3 , 'right' , 'UTF-8' , 1 );
$this -> assertEquals ( " éeé " , $after );
$after = dol_trunc ( $input , 2 , 'right' , 'UTF-8' , 1 );
$this -> assertEquals ( " ée " , $after );
$input = " éeé " ;
$after = dol_trunc ( $input , 3 , 'right' , 'UTF-8' , 1 );
$this -> assertEquals ( " éeé " , $after );
$after = dol_trunc ( $input , 2 , 'right' , 'UTF-8' , 1 );
$this -> assertEquals ( " ée " , $after );
$after = dol_trunc ( $input , 1 , 'right' , 'UTF-8' , 1 );
$this -> assertEquals ( " é " , $after );
$input = " éeéeéeàa " ;
$after = dol_trunc ( $input , 4 , 'middle' );
$this -> assertEquals ( " ée...àa " , $after );
2011-05-01 12:24:46 +02:00
2011-12-17 16:44:48 +01:00
return true ;
}
2012-02-05 15:13:31 +01:00
/**
2012-02-06 00:07:48 +01:00
* testDolMkTime
*
* @ return void
2012-02-05 15:13:31 +01:00
*/
public function testDolMkTime ()
{
$result = dol_mktime ( 25 , 0 , 0 , 1 , 1 , 1970 , 1 , 1 ); // Error (25 hours)
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '' , $result );
$result = dol_mktime ( 2 , 61 , 0 , 1 , 1 , 1970 , 1 , 1 ); // Error (61 minutes)
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '' , $result );
$result = dol_mktime ( 2 , 1 , 61 , 1 , 1 , 1970 , 1 , 1 ); // Error (61 seconds)
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '' , $result );
$result = dol_mktime ( 2 , 1 , 1 , 1 , 32 , 1970 , 1 , 1 ); // Error (day 32)
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '' , $result );
$result = dol_mktime ( 2 , 1 , 1 , 13 , 1 , 1970 , 1 , 1 ); // Error (month 13)
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( '' , $result );
$result = dol_mktime ( 2 , 1 , 1 , 1 , 1 , 1970 , 1 ); // 1970-01-01 02:01:01 in GMT area -> 7261
print __METHOD__ . " result= " . $result . " \n " ;
$this -> assertEquals ( 7261 , $result );
2012-02-06 05:31:19 +01:00
$result = dol_mktime ( 2 , 0 , 0 , 1 , 1 , 1970 , 0 ); // 1970-01-01 02:00:00 in local area Europe/Paris -> 3600 GMT
2012-02-05 15:13:31 +01:00
print __METHOD__ . " result= " . $result . " \n " ;
2012-02-17 16:02:35 +01:00
$tz = getServerTimeZoneInt ( '1970-01-01 02:00:00' ); // +1 in Europe/Paris at this time (this time is winter)
$this -> assertEquals ( 7200 - ( $tz * 3600 ), $result ); // Should be 7200 if we are at greenwich winter
2012-02-06 05:31:19 +01:00
}
/**
* testDolNow
*
* @ return void
*/
public function testDolNow ()
{
$now = dol_now ( 'gmt' );
$nowtzserver = dol_now ( 'tzserver' );
print __METHOD__ . " getServerTimeZoneInt= " . ( getServerTimeZoneInt () * 3600 ) . " \n " ;
$this -> assertEquals ( getServerTimeZoneInt () * 3600 ,( $nowtzserver - $now ));
2012-02-05 15:13:31 +01:00
}
2012-02-12 16:41:43 +01:00
/**
* testVerifCond
*
* @ return void
*/
public function testVerifCond ()
{
$verifcond = verifCond ( '1==1' );
$this -> assertTrue ( $verifcond );
$verifcond = verifCond ( '1==2' );
$this -> assertFalse ( $verifcond );
$verifcond = verifCond ( '$conf->facture->enabled' );
$this -> assertTrue ( $verifcond );
$verifcond = verifCond ( '$conf->moduledummy->enabled' );
$this -> assertFalse ( $verifcond );
$verifcond = verifCond ( '' );
$this -> assertTrue ( $verifcond );
}
2012-03-25 14:25:32 +02:00
/**
* testJsonencode
*
* @ return void
*/
public function testJsonEncode ()
{
//$this->sharedFixture
global $conf , $user , $langs , $db ;
$this -> savconf = $conf ;
$this -> savuser = $user ;
$this -> savlangs = $langs ;
$this -> savdb = $db ;
$arraytotest = array ( 0 => array ( 'key' => 1 , 'value' => 'PRODREF' , 'label' => 'Product ref with é and special chars \\ \' "' ));
2012-03-26 08:18:03 +02:00
2012-03-25 14:25:32 +02:00
$encoded = json_encode ( $arraytotest );
//var_dump($encoded);
$this -> assertEquals ( '[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]' , $encoded );
$decoded = json_decode ( $encoded , true );
//var_dump($decoded);
$this -> assertEquals ( $arraytotest , $decoded );
2012-03-26 08:18:03 +02:00
$encoded = dol_json_encode ( $arraytotest );
//var_dump($encoded);
$this -> assertEquals ( '[{"key":1,"value":"PRODREF","label":"Product ref with \u00e9 and special chars \\\\ \' \""}]' , $encoded );
$decoded = dol_json_decode ( $encoded , true );
//var_dump($decoded);
$this -> assertEquals ( $arraytotest , $decoded );
2012-03-25 14:25:32 +02:00
}
2011-05-01 11:28:46 +02:00
}
?>