2008-05-30 11:40:08 +00:00
< ? php
/**
2009-03-19 21:10:13 +00:00
* HtmlHelperTest file
2008-05-30 11:40:08 +00:00
*
2010-10-03 16:31:21 +00:00
* PHP 5
2008-05-30 11:40:08 +00:00
*
2010-05-19 01:15:13 +00:00
* CakePHP ( tm ) Tests < http :// book . cakephp . org / view / 1196 / Testing >
2010-01-14 04:47:14 +00:00
* Copyright 2006 - 2010 , Cake Software Foundation , Inc .
2008-05-30 11:40:08 +00:00
*
2010-10-03 16:31:21 +00:00
* Licensed under The MIT License
* Redistributions of files must retain the above copyright notice
2008-05-30 11:40:08 +00:00
*
2010-01-14 04:47:14 +00:00
* @ copyright Copyright 2006 - 2010 , Cake Software Foundation , Inc .
2010-05-19 01:15:13 +00:00
* @ link http :// book . cakephp . org / view / 1196 / Testing CakePHP ( tm ) Tests
2010-12-24 18:57:20 +00:00
* @ package cake . tests . cases . libs . view . helpers
2008-10-30 17:30:26 +00:00
* @ since CakePHP ( tm ) v 1.2 . 0.4206
2010-10-03 16:27:27 +00:00
* @ license MIT License ( http :// www . opensource . org / licenses / mit - license . php )
2008-05-30 11:40:08 +00:00
*/
2010-12-10 06:23:27 +00:00
2011-04-17 16:03:43 +00:00
App :: uses ( 'Controller' , 'Controller' );
2010-12-10 06:23:27 +00:00
App :: uses ( 'Helper' , 'View' );
App :: uses ( 'AppHelper' , 'View/Helper' );
App :: uses ( 'HtmlHelper' , 'View/Helper' );
App :: uses ( 'FomrHelper' , 'View/Helper' );
2011-04-17 16:03:43 +00:00
App :: uses ( 'ClassRegistry' , 'Utility' );
App :: uses ( 'Folder' , 'Utility' );
2009-07-24 19:18:37 +00:00
2010-04-26 18:47:19 +00:00
if ( ! defined ( 'FULL_BASE_URL' )) {
define ( 'FULL_BASE_URL' , 'http://cakephp.org' );
}
2008-06-02 19:22:55 +00:00
/**
* TheHtmlTestController class
2008-11-08 00:24:51 +00:00
*
2010-12-24 18:57:20 +00:00
* @ package cake . tests . cases . libs . view . helpers
2008-06-02 19:22:55 +00:00
*/
2008-05-30 11:40:08 +00:00
class TheHtmlTestController extends Controller {
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* name property
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var string 'TheTest'
* @ access public
*/
2010-04-04 07:14:00 +00:00
public $name = 'TheTest' ;
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* uses property
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ var mixed null
* @ access public
*/
2010-04-04 07:14:00 +00:00
public $uses = null ;
2008-05-30 11:40:08 +00:00
}
2009-03-13 02:59:55 +00:00
2011-01-23 14:36:14 +00:00
class TestHtmlHelper extends HtmlHelper {
/**
* expose a method as public
*
2011-04-17 16:03:43 +00:00
* @ param string $options
* @ param string $exclude
* @ param string $insertBefore
* @ param string $insertAfter
2011-01-23 14:36:14 +00:00
* @ return void
*/
function parseAttributes ( $options , $exclude = null , $insertBefore = ' ' , $insertAfter = null ) {
return $this -> _parseAttributes ( $options , $exclude , $insertBefore , $insertAfter );
}
2011-01-23 21:27:50 +00:00
/**
* Get a protected attribute value
*
* @ param string $attribute
* @ return mixed
*/
public function getAttribute ( $attribute ) {
if ( ! isset ( $this -> { $attribute })) {
return null ;
}
return $this -> { $attribute };
}
2011-01-23 14:36:14 +00:00
}
/**
* Html5TestHelper class
*
* @ package cake . tests . cases . libs . view . helpers
*/
class Html5TestHelper extends TestHtmlHelper {
/**
* Minimized
*
* @ var array
*/
protected $_minimizedAttributes = array ( 'require' , 'checked' );
/**
* Allow compact use in HTML
*
* @ var string
*/
protected $_minimizedAttributeFormat = '%s' ;
/**
* Test to attribute format
*
* @ var string
*/
protected $_attributeFormat = 'data-%s="%s"' ;
}
2008-06-02 19:22:55 +00:00
/**
* HtmlHelperTest class
2008-11-08 00:24:51 +00:00
*
2010-12-24 18:57:20 +00:00
* @ package cake . tests . cases . libs . view . helpers
2008-06-02 19:22:55 +00:00
*/
2008-05-30 11:40:08 +00:00
class HtmlHelperTest extends CakeTestCase {
2009-07-24 19:18:37 +00:00
2009-03-13 02:59:55 +00:00
/**
* Regexp for CDATA start block
*
* @ var string
*/
2010-04-04 07:14:00 +00:00
public $cDataStart = 'preg:/^\/\/<!\[CDATA\[[\n\r]*/' ;
2010-09-26 01:36:49 +00:00
2009-03-13 02:59:55 +00:00
/**
* Regexp for CDATA end block
*
* @ var string
*/
2010-04-04 07:14:00 +00:00
public $cDataEnd = 'preg:/[^\]]*\]\]\>[\s\r\n]*/' ;
2010-09-26 01:36:49 +00:00
2008-06-02 19:22:55 +00:00
/**
* html property
2008-11-08 00:24:51 +00:00
*
2009-07-04 22:04:40 +00:00
* @ var object
2008-06-02 19:22:55 +00:00
* @ access public
*/
2010-04-04 07:14:00 +00:00
public $Html = null ;
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* setUp method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ return void
*/
2010-09-26 01:36:49 +00:00
function setUp () {
parent :: setUp ();
2010-07-15 02:26:42 +00:00
$this -> View = $this -> getMock ( 'View' , array ( 'addScript' ), array ( new TheHtmlTestController ()));
2011-01-23 21:27:50 +00:00
$this -> Html = new TestHtmlHelper ( $this -> View );
2010-05-15 03:11:38 +00:00
$this -> Html -> request = new CakeRequest ( null , false );
$this -> Html -> request -> webroot = '' ;
2010-11-17 03:52:49 +00:00
Configure :: write ( 'Asset.timestamp' , false );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2009-03-19 21:10:13 +00:00
/**
2010-09-26 01:36:49 +00:00
* tearDown method
2009-03-19 21:10:13 +00:00
*
* @ return void
*/
2010-09-26 01:36:49 +00:00
function tearDown () {
parent :: tearDown ();
2010-07-15 02:26:42 +00:00
unset ( $this -> Html , $this -> View );
2009-03-19 21:10:13 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testDocType method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDocType () {
$result = $this -> Html -> docType ();
$expected = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">' ;
$this -> assertEqual ( $result , $expected );
$result = $this -> Html -> docType ( 'html4-strict' );
$expected = '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">' ;
$this -> assertEqual ( $result , $expected );
$this -> assertNull ( $this -> Html -> docType ( 'non-existing-doctype' ));
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testLink method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testLink () {
2010-05-15 03:11:38 +00:00
$this -> Html -> request -> webroot = '' ;
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> link ( '/home' );
$expected = array ( 'a' => array ( 'href' => '/home' ), 'preg:/\/home/' , '/a' );
$this -> assertTags ( $result , $expected );
2010-04-26 18:47:19 +00:00
$result = $this -> Html -> link ( 'Posts' , array ( 'controller' => 'posts' , 'action' => 'index' , 'full_base' => true ));
$expected = array ( 'a' => array ( 'href' => FULL_BASE_URL . '/posts' ), 'Posts' , '/a' );
$this -> assertTags ( $result , $expected );
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> link ( 'Home' , '/home' , array ( 'confirm' => 'Are you sure you want to do this?' ));
$expected = array (
'a' => array ( 'href' => '/home' , 'onclick' => 'return confirm('Are you sure you want to do this?');' ),
'Home' ,
'/a'
);
$this -> assertTags ( $result , $expected , true );
$result = $this -> Html -> link ( 'Home' , '/home' , array ( 'default' => false ));
$expected = array (
'a' => array ( 'href' => '/home' , 'onclick' => 'event.returnValue = false; return false;' ),
'Home' ,
'/a'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> link ( 'Next >' , '#' );
$expected = array (
'a' => array ( 'href' => '#' ),
'Next >' ,
'/a'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> link ( 'Next >' , '#' , array ( 'escape' => true ));
$expected = array (
'a' => array ( 'href' => '#' ),
'Next >' ,
'/a'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> link ( 'Next >' , '#' , array ( 'escape' => 'utf-8' ));
$expected = array (
'a' => array ( 'href' => '#' ),
'Next >' ,
'/a'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> link ( 'Next >' , '#' , array ( 'escape' => false ));
$expected = array (
'a' => array ( 'href' => '#' ),
'Next >' ,
'/a'
);
$this -> assertTags ( $result , $expected );
2009-02-23 15:19:33 +00:00
$result = $this -> Html -> link ( 'Next >' , '#' , array (
'title' => 'to escape … or not escape?' ,
'escape' => false
));
$expected = array (
'a' => array ( 'href' => '#' , 'title' => 'to escape … or not escape?' ),
'Next >' ,
'/a'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> link ( 'Next >' , '#' , array (
'title' => 'to escape … or not escape?' ,
'escape' => true
2009-10-17 02:49:44 +00:00
));
2009-02-23 15:19:33 +00:00
$expected = array (
'a' => array ( 'href' => '#' , 'title' => 'to escape &#8230; or not escape?' ),
2009-10-17 02:49:44 +00:00
'Next >' ,
2009-02-23 15:19:33 +00:00
'/a'
);
$this -> assertTags ( $result , $expected );
2009-01-14 22:41:47 +00:00
$result = $this -> Html -> link ( 'Original size' , array (
'controller' => 'images' , 'action' => 'view' , 3 , '?' => array ( 'height' => 100 , 'width' => 200 )
));
$expected = array (
'a' => array ( 'href' => '/images/view/3?height=100&width=200' ),
'Original size' ,
'/a'
);
$this -> assertTags ( $result , $expected );
2008-05-30 11:40:08 +00:00
2009-01-14 22:19:11 +00:00
Configure :: write ( 'Asset.timestamp' , false );
2009-10-17 02:49:44 +00:00
$result = $this -> Html -> link ( $this -> Html -> image ( 'test.gif' ), '#' , array ( 'escape' => false ));
2008-05-30 11:40:08 +00:00
$expected = array (
'a' => array ( 'href' => '#' ),
'img' => array ( 'src' => 'img/test.gif' , 'alt' => '' ),
'/a'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> image ( 'test.gif' , array ( 'url' => '#' ));
$expected = array (
'a' => array ( 'href' => '#' ),
'img' => array ( 'src' => 'img/test.gif' , 'alt' => '' ),
'/a'
);
$this -> assertTags ( $result , $expected );
2009-01-14 22:19:11 +00:00
2009-07-25 19:43:26 +00:00
Configure :: write ( 'Asset.timestamp' , 'force' );
2009-01-14 22:19:11 +00:00
2011-05-10 04:03:58 +00:00
$result = $this -> Html -> link ( $this -> Html -> image ( '../favicon.ico' ), '#' , array ( 'escape' => false ));
2009-01-14 22:19:11 +00:00
$expected = array (
'a' => array ( 'href' => '#' ),
2011-05-10 04:03:58 +00:00
'img' => array ( 'src' => 'preg:/img\/..\/favicon\.ico\?\d*/' , 'alt' => '' ),
2009-01-14 22:19:11 +00:00
'/a'
);
$this -> assertTags ( $result , $expected );
2011-05-10 04:03:58 +00:00
$result = $this -> Html -> image ( '../favicon.ico' , array ( 'url' => '#' ));
2009-01-14 22:19:11 +00:00
$expected = array (
'a' => array ( 'href' => '#' ),
2011-05-10 04:03:58 +00:00
'img' => array ( 'src' => 'preg:/img\/..\/favicon\.ico\?\d*/' , 'alt' => '' ),
2009-01-14 22:19:11 +00:00
'/a'
);
$this -> assertTags ( $result , $expected );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testImageTag method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testImageTag () {
2010-05-15 03:11:38 +00:00
$this -> Html -> request -> webroot = '' ;
2009-01-14 22:19:11 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> image ( 'test.gif' );
$this -> assertTags ( $result , array ( 'img' => array ( 'src' => 'img/test.gif' , 'alt' => '' )));
$result = $this -> Html -> image ( 'http://google.com/logo.gif' );
$this -> assertTags ( $result , array ( 'img' => array ( 'src' => 'http://google.com/logo.gif' , 'alt' => '' )));
$result = $this -> Html -> image ( array ( 'controller' => 'test' , 'action' => 'view' , 1 , 'ext' => 'gif' ));
$this -> assertTags ( $result , array ( 'img' => array ( 'src' => '/test/view/1.gif' , 'alt' => '' )));
$result = $this -> Html -> image ( '/test/view/1.gif' );
$this -> assertTags ( $result , array ( 'img' => array ( 'src' => '/test/view/1.gif' , 'alt' => '' )));
2009-09-24 04:28:27 +00:00
}
2008-05-30 11:40:08 +00:00
2009-09-24 04:28:27 +00:00
/**
* test image () with Asset . timestamp
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2010-01-14 04:47:31 +00:00
function testImageWithTimestampping () {
2009-07-25 19:43:26 +00:00
Configure :: write ( 'Asset.timestamp' , 'force' );
2009-01-14 22:19:11 +00:00
2010-05-15 03:11:38 +00:00
$this -> Html -> request -> webroot = '/' ;
2010-01-14 04:47:31 +00:00
$result = $this -> Html -> image ( 'cake.icon.png' );
2010-04-09 03:36:04 +00:00
$this -> assertTags ( $result , array ( 'img' => array ( 'src' => 'preg:/\/img\/cake\.icon\.png\?\d+/' , 'alt' => '' )));
2009-03-19 21:10:13 +00:00
2009-03-06 04:40:50 +00:00
Configure :: write ( 'debug' , 0 );
Configure :: write ( 'Asset.timestamp' , 'force' );
2010-01-14 04:47:31 +00:00
$result = $this -> Html -> image ( 'cake.icon.png' );
2010-04-09 03:36:04 +00:00
$this -> assertTags ( $result , array ( 'img' => array ( 'src' => 'preg:/\/img\/cake\.icon\.png\?\d+/' , 'alt' => '' )));
2009-09-22 23:04:40 +00:00
2010-05-15 03:11:38 +00:00
$this -> Html -> request -> webroot = '/testing/longer/' ;
2010-01-14 04:47:31 +00:00
$result = $this -> Html -> image ( 'cake.icon.png' );
2009-09-22 23:04:40 +00:00
$expected = array (
2010-01-14 04:47:31 +00:00
'img' => array ( 'src' => 'preg:/\/testing\/longer\/img\/cake\.icon\.png\?[0-9]+/' , 'alt' => '' )
2009-09-22 23:04:40 +00:00
);
$this -> assertTags ( $result , $expected );
2009-07-04 22:04:40 +00:00
}
2009-07-24 19:18:37 +00:00
2009-07-04 22:04:40 +00:00
/**
* Tests creation of an image tag using a theme and asset timestamping
*
* @ access public
* @ return void
*/
function testImageTagWithTheme () {
2010-04-09 03:36:04 +00:00
if ( $this -> skipIf ( ! is_writable ( WWW_ROOT . 'theme' ), 'Cannot write to webroot/theme' )) {
return ;
}
2010-12-10 06:23:27 +00:00
App :: uses ( 'File' , 'Utility' );
2010-04-09 03:36:04 +00:00
$testfile = WWW_ROOT . 'theme' . DS . 'test_theme' . DS . 'img' . DS . '__cake_test_image.gif' ;
2010-05-15 03:11:38 +00:00
$file = new File ( $testfile , true );
2010-04-09 03:36:04 +00:00
2009-11-25 07:51:25 +00:00
App :: build ( array (
2011-04-17 10:35:21 +00:00
'views' => array ( CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS )
2009-11-25 07:51:25 +00:00
));
2009-07-04 22:04:40 +00:00
Configure :: write ( 'Asset.timestamp' , true );
Configure :: write ( 'debug' , 1 );
2010-04-09 03:36:04 +00:00
2010-05-15 03:11:38 +00:00
$this -> Html -> request -> webroot = '/' ;
2009-11-25 07:51:25 +00:00
$this -> Html -> theme = 'test_theme' ;
2010-04-09 03:36:04 +00:00
$result = $this -> Html -> image ( '__cake_test_image.gif' );
2009-07-04 22:04:40 +00:00
$this -> assertTags ( $result , array (
'img' => array (
2010-04-09 03:36:04 +00:00
'src' => 'preg:/\/theme\/test_theme\/img\/__cake_test_image\.gif\?\d+/' ,
2009-07-04 22:04:40 +00:00
'alt' => ''
)));
2009-09-21 21:00:52 +00:00
2010-05-15 03:11:38 +00:00
$this -> Html -> request -> webroot = '/testing/' ;
2010-04-09 03:36:04 +00:00
$result = $this -> Html -> image ( '__cake_test_image.gif' );
2010-04-26 18:47:19 +00:00
2009-09-21 21:00:52 +00:00
$this -> assertTags ( $result , array (
'img' => array (
2010-04-09 03:36:04 +00:00
'src' => 'preg:/\/testing\/theme\/test_theme\/img\/__cake_test_image\.gif\?\d+/' ,
2009-09-21 21:00:52 +00:00
'alt' => ''
)));
2010-04-26 18:47:19 +00:00
2010-05-15 03:11:38 +00:00
$dir = new Folder ( WWW_ROOT . 'theme' . DS . 'test_theme' );
2010-04-09 03:36:04 +00:00
$dir -> delete ();
2008-05-30 11:40:08 +00:00
}
2010-04-26 18:47:19 +00:00
2009-11-27 16:27:15 +00:00
/**
* test theme assets in main webroot path
*
* @ access public
* @ return void
*/
function testThemeAssetsInMainWebrootPath () {
App :: build ( array (
2011-04-17 10:35:21 +00:00
'views' => array ( CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS )
2009-11-27 16:27:15 +00:00
));
$webRoot = Configure :: read ( 'App.www_root' );
2011-04-17 10:35:21 +00:00
Configure :: write ( 'App.www_root' , CAKE . 'Test' . DS . 'test_app' . DS . 'webroot' . DS );
2010-04-26 18:47:19 +00:00
2009-11-27 16:27:15 +00:00
$this -> Html -> theme = 'test_theme' ;
$result = $this -> Html -> css ( 'webroot_test' );
$expected = array (
'link' => array ( 'rel' => 'stylesheet' , 'type' => 'text/css' , 'href' => 'preg:/.*theme\/test_theme\/css\/webroot_test\.css/' )
);
$this -> assertTags ( $result , $expected );
$this -> Html -> theme = 'test_theme' ;
$result = $this -> Html -> css ( 'theme_webroot' );
$expected = array (
'link' => array ( 'rel' => 'stylesheet' , 'type' => 'text/css' , 'href' => 'preg:/.*theme\/test_theme\/css\/theme_webroot\.css/' )
);
$this -> assertTags ( $result , $expected );
2010-04-26 18:47:19 +00:00
2009-11-27 16:27:15 +00:00
Configure :: write ( 'App.www_root' , $webRoot );
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testStyle method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testStyle () {
$result = $this -> Html -> style ( array ( 'display' => 'none' , 'margin' => '10px' ));
$expected = 'display:none; margin:10px;' ;
$this -> assertPattern ( '/^display\s*:\s*none\s*;\s*margin\s*:\s*10px\s*;?$/' , $expected );
$result = $this -> Html -> style ( array ( 'display' => 'none' , 'margin' => '10px' ), false );
$lines = explode ( " \n " , $result );
$this -> assertPattern ( '/^\s*display\s*:\s*none\s*;\s*$/' , $lines [ 0 ]);
$this -> assertPattern ( '/^\s*margin\s*:\s*10px\s*;?$/' , $lines [ 1 ]);
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testCssLink method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testCssLink () {
2009-01-14 22:19:11 +00:00
Configure :: write ( 'Asset.filter.css' , false );
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> css ( 'screen' );
$expected = array (
'link' => array ( 'rel' => 'stylesheet' , 'type' => 'text/css' , 'href' => 'preg:/.*css\/screen\.css/' )
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> css ( 'screen.css' );
$this -> assertTags ( $result , $expected );
2009-10-02 16:53:20 +00:00
$result = $this -> Html -> css ( 'my.css.library' );
$expected [ 'link' ][ 'href' ] = 'preg:/.*css\/my\.css\.library\.css/' ;
$this -> assertTags ( $result , $expected );
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> css ( 'screen.css?1234' );
$expected [ 'link' ][ 'href' ] = 'preg:/.*css\/screen\.css\?1234/' ;
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> css ( 'http://whatever.com/screen.css?1234' );
$expected [ 'link' ][ 'href' ] = 'preg:/http:\/\/.*\/screen\.css\?1234/' ;
$this -> assertTags ( $result , $expected );
2009-01-14 22:19:11 +00:00
Configure :: write ( 'Asset.filter.css' , 'css.php' );
$result = $this -> Html -> css ( 'cake.generic' );
$expected [ 'link' ][ 'href' ] = 'preg:/.*ccss\/cake\.generic\.css/' ;
$this -> assertTags ( $result , $expected );
2009-07-25 19:43:26 +00:00
2009-01-14 22:19:11 +00:00
Configure :: write ( 'Asset.filter.css' , false );
$result = explode ( " \n " , trim ( $this -> Html -> css ( array ( 'cake.generic' , 'vendor.generic' ))));
$expected [ 'link' ][ 'href' ] = 'preg:/.*css\/cake\.generic\.css/' ;
$this -> assertTags ( $result [ 0 ], $expected );
$expected [ 'link' ][ 'href' ] = 'preg:/.*css\/vendor\.generic\.css/' ;
$this -> assertTags ( $result [ 1 ], $expected );
$this -> assertEqual ( count ( $result ), 2 );
2009-11-06 04:32:39 +00:00
2010-07-15 02:26:42 +00:00
$this -> View -> expects ( $this -> at ( 0 )) -> method ( 'addScript' )
-> with ( $this -> matchesRegularExpression ( '/css_in_head.css/' ));
2009-11-06 04:32:39 +00:00
2010-07-15 02:26:42 +00:00
$this -> View -> expects ( $this -> at ( 1 ))
2010-05-16 01:35:22 +00:00
-> method ( 'addScript' )
-> with ( $this -> matchesRegularExpression ( '/more_css_in_head.css/' ));
2010-07-15 02:26:42 +00:00
$result = $this -> Html -> css ( 'css_in_head' , null , array ( 'inline' => false ));
$this -> assertNull ( $result );
2009-11-06 04:32:39 +00:00
$result = $this -> Html -> css ( 'more_css_in_head' , null , array ( 'inline' => false ));
$this -> assertNull ( $result );
2009-09-24 04:28:27 +00:00
}
2009-09-03 17:50:53 +00:00
2009-09-24 04:28:27 +00:00
/**
* test use of css () and timestamping
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2009-09-24 04:28:27 +00:00
function testCssTimestamping () {
2009-07-25 19:43:26 +00:00
Configure :: write ( 'debug' , 2 );
2008-05-30 11:40:08 +00:00
Configure :: write ( 'Asset.timestamp' , true );
2009-01-14 22:19:11 +00:00
2009-09-24 04:28:27 +00:00
$expected = array (
'link' => array ( 'rel' => 'stylesheet' , 'type' => 'text/css' , 'href' => '' )
);
2009-01-14 22:19:11 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> css ( 'cake.generic' );
$expected [ 'link' ][ 'href' ] = 'preg:/.*css\/cake\.generic\.css\?[0-9]+/' ;
$this -> assertTags ( $result , $expected );
Configure :: write ( 'debug' , 0 );
2008-11-08 00:24:51 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> css ( 'cake.generic' );
$expected [ 'link' ][ 'href' ] = 'preg:/.*css\/cake\.generic\.css/' ;
$this -> assertTags ( $result , $expected );
Configure :: write ( 'Asset.timestamp' , 'force' );
2008-11-08 00:24:51 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> css ( 'cake.generic' );
$expected [ 'link' ][ 'href' ] = 'preg:/.*css\/cake\.generic\.css\?[0-9]+/' ;
$this -> assertTags ( $result , $expected );
2010-05-15 03:11:38 +00:00
$this -> Html -> request -> webroot = '/testing/' ;
2008-11-08 00:24:51 +00:00
$result = $this -> Html -> css ( 'cake.generic' );
2009-09-21 21:00:52 +00:00
$expected [ 'link' ][ 'href' ] = 'preg:/\/testing\/css\/cake\.generic\.css\?[0-9]+/' ;
2008-11-08 00:24:51 +00:00
$this -> assertTags ( $result , $expected );
2010-05-15 03:11:38 +00:00
$this -> Html -> request -> webroot = '/testing/longer/' ;
2008-11-08 00:24:51 +00:00
$result = $this -> Html -> css ( 'cake.generic' );
2009-09-21 21:00:52 +00:00
$expected [ 'link' ][ 'href' ] = 'preg:/\/testing\/longer\/css\/cake\.generic\.css\?[0-9]+/' ;
2008-11-08 00:24:51 +00:00
$this -> assertTags ( $result , $expected );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2009-03-12 23:51:30 +00:00
/**
* test timestamp enforcement for script tags .
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2009-03-12 23:51:30 +00:00
function testScriptTimestamping () {
2009-07-25 19:43:26 +00:00
$skip = $this -> skipIf ( ! is_writable ( JS ), 'webroot/js is not Writable, timestamp testing has been skipped' );
if ( $skip ) {
2009-03-12 23:51:30 +00:00
return ;
}
2009-07-25 19:43:26 +00:00
Configure :: write ( 'debug' , 2 );
2009-03-12 23:51:30 +00:00
Configure :: write ( 'Asset.timestamp' , true );
2009-07-25 19:43:26 +00:00
2009-03-12 23:51:30 +00:00
touch ( WWW_ROOT . 'js' . DS . '__cake_js_test.js' );
$timestamp = substr ( strtotime ( 'now' ), 0 , 8 );
2009-09-03 17:45:39 +00:00
$result = $this -> Html -> script ( '__cake_js_test' , array ( 'inline' => true , 'once' => false ));
2009-03-12 23:51:30 +00:00
$this -> assertPattern ( '/__cake_js_test.js\?' . $timestamp . '[0-9]{2}"/' , $result , 'Timestamp value not found %s' );
Configure :: write ( 'debug' , 0 );
Configure :: write ( 'Asset.timestamp' , 'force' );
2009-09-03 17:45:39 +00:00
$result = $this -> Html -> script ( '__cake_js_test' , array ( 'inline' => true , 'once' => false ));
2009-03-12 23:51:30 +00:00
$this -> assertPattern ( '/__cake_js_test.js\?' . $timestamp . '[0-9]{2}"/' , $result , 'Timestamp value not found %s' );
unlink ( WWW_ROOT . 'js' . DS . '__cake_js_test.js' );
Configure :: write ( 'Asset.timestamp' , false );
}
2009-09-03 17:45:39 +00:00
2009-03-12 23:51:30 +00:00
/**
* test that scripts added with uses () are only ever included once .
* test script tag generation
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2009-03-12 23:51:30 +00:00
function testScript () {
$result = $this -> Html -> script ( 'foo' );
$expected = array (
'script' => array ( 'type' => 'text/javascript' , 'src' => 'js/foo.js' )
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> script ( array ( 'foobar' , 'bar' ));
$expected = array (
array ( 'script' => array ( 'type' => 'text/javascript' , 'src' => 'js/foobar.js' )),
'/script' ,
array ( 'script' => array ( 'type' => 'text/javascript' , 'src' => 'js/bar.js' )),
'/script' ,
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> script ( 'jquery-1.3' );
$expected = array (
'script' => array ( 'type' => 'text/javascript' , 'src' => 'js/jquery-1.3.js' )
);
$this -> assertTags ( $result , $expected );
2010-07-28 20:41:00 +00:00
$result = $this -> Html -> script ( 'test.json' );
$expected = array (
'script' => array ( 'type' => 'text/javascript' , 'src' => 'js/test.json.js' )
);
$this -> assertTags ( $result , $expected );
2009-03-12 23:51:30 +00:00
$result = $this -> Html -> script ( '/plugin/js/jquery-1.3.2.js?someparam=foo' );
$expected = array (
'script' => array ( 'type' => 'text/javascript' , 'src' => '/plugin/js/jquery-1.3.2.js?someparam=foo' )
);
$this -> assertTags ( $result , $expected );
2009-09-03 17:50:53 +00:00
2010-07-28 20:41:00 +00:00
$result = $this -> Html -> script ( 'test.json.js?foo=bar' );
$expected = array (
'script' => array ( 'type' => 'text/javascript' , 'src' => 'js/test.json.js?foo=bar' )
);
$this -> assertTags ( $result , $expected );
2009-03-12 23:51:30 +00:00
$result = $this -> Html -> script ( 'foo' );
$this -> assertNull ( $result , 'Script returned upon duplicate inclusion %s' );
$result = $this -> Html -> script ( array ( 'foo' , 'bar' , 'baz' ));
$this -> assertNoPattern ( '/foo.js/' , $result );
2009-09-03 17:45:39 +00:00
$result = $this -> Html -> script ( 'foo' , array ( 'inline' => true , 'once' => false ));
2009-03-12 23:51:30 +00:00
$this -> assertNotNull ( $result );
2009-09-03 17:45:39 +00:00
$result = $this -> Html -> script ( 'jquery-1.3.2' , array ( 'defer' => true , 'encoding' => 'utf-8' ));
$expected = array (
'script' => array ( 'type' => 'text/javascript' , 'src' => 'js/jquery-1.3.2.js' , 'defer' => 'defer' , 'encoding' => 'utf-8' )
);
$this -> assertTags ( $result , $expected );
2011-04-17 16:03:43 +00:00
2010-07-15 02:26:42 +00:00
$this -> View -> expects ( $this -> any ()) -> method ( 'addScript' )
-> with ( $this -> matchesRegularExpression ( '/script_in_head.js/' ));
2009-10-17 03:00:31 +00:00
$result = $this -> Html -> script ( 'script_in_head' , array ( 'inline' => false ));
$this -> assertNull ( $result );
2009-03-12 23:51:30 +00:00
}
2009-09-24 04:28:27 +00:00
2010-09-01 01:21:05 +00:00
/**
* test a script file in the webroot / theme dir .
*
* @ return void
*/
function testScriptInTheme () {
if ( $this -> skipIf ( ! is_writable ( WWW_ROOT . 'theme' ), 'Cannot write to webroot/theme' )) {
return ;
}
2010-12-10 06:23:27 +00:00
App :: uses ( 'File' , 'Utility' );
2010-09-01 01:21:05 +00:00
$testfile = WWW_ROOT . 'theme' . DS . 'test_theme' . DS . 'js' . DS . '__test_js.js' ;
2010-11-13 04:05:44 +00:00
$file = new File ( $testfile , true );
2010-09-01 01:21:05 +00:00
App :: build ( array (
2011-04-17 10:35:21 +00:00
'views' => array ( CAKE . 'Test' . DS . 'test_app' . DS . 'View' . DS )
2010-09-01 01:21:05 +00:00
));
$this -> Html -> webroot = '/' ;
$this -> Html -> theme = 'test_theme' ;
$result = $this -> Html -> script ( '__test_js.js' );
$expected = array (
'script' => array ( 'src' => '/theme/test_theme/js/__test_js.js' , 'type' => 'text/javascript' )
);
$this -> assertTags ( $result , $expected );
2010-09-19 04:43:56 +00:00
$folder = new Folder ( WWW_ROOT . 'theme' . DS . 'test_theme' );
$folder -> delete ();
2010-09-01 01:21:05 +00:00
App :: build ();
}
2009-03-13 02:59:55 +00:00
/**
* test Script block generation
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2009-03-13 02:59:55 +00:00
function testScriptBlock () {
$result = $this -> Html -> scriptBlock ( 'window.foo = 2;' );
$expected = array (
'script' => array ( 'type' => 'text/javascript' ),
$this -> cDataStart ,
'window.foo = 2;' ,
$this -> cDataEnd ,
'/script' ,
);
$this -> assertTags ( $result , $expected );
2009-09-03 17:50:53 +00:00
2009-03-13 02:59:55 +00:00
$result = $this -> Html -> scriptBlock ( 'window.foo = 2;' , array ( 'safe' => false ));
$expected = array (
'script' => array ( 'type' => 'text/javascript' ),
'window.foo = 2;' ,
'/script' ,
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> scriptBlock ( 'window.foo = 2;' , array ( 'safe' => true ));
$expected = array (
'script' => array ( 'type' => 'text/javascript' ),
$this -> cDataStart ,
'window.foo = 2;' ,
$this -> cDataEnd ,
'/script' ,
);
$this -> assertTags ( $result , $expected );
2009-09-03 17:50:53 +00:00
2011-04-17 16:03:43 +00:00
2010-07-15 03:03:30 +00:00
$this -> View -> expects ( $this -> any ()) -> method ( 'addScript' )
2010-05-16 01:35:22 +00:00
-> with ( $this -> matchesRegularExpression ( '/window\.foo\s\=\s2;/' ));
2009-09-03 17:50:53 +00:00
2009-03-13 02:59:55 +00:00
$result = $this -> Html -> scriptBlock ( 'window.foo = 2;' , array ( 'inline' => false ));
$this -> assertNull ( $result );
2009-09-03 17:50:53 +00:00
$result = $this -> Html -> scriptBlock ( 'window.foo = 2;' , array ( 'safe' => false , 'encoding' => 'utf-8' ));
$expected = array (
'script' => array ( 'type' => 'text/javascript' , 'encoding' => 'utf-8' ),
'window.foo = 2;' ,
'/script' ,
);
$this -> assertTags ( $result , $expected );
2009-03-13 02:59:55 +00:00
}
2009-09-24 04:28:27 +00:00
2009-07-25 19:43:26 +00:00
/**
* test script tag output buffering when using scriptStart () and scriptEnd ();
*
* @ return void
2009-11-14 12:19:25 +00:00
*/
2009-07-25 19:43:26 +00:00
function testScriptStartAndScriptEnd () {
$result = $this -> Html -> scriptStart ( array ( 'safe' => true ));
$this -> assertNull ( $result );
echo 'this is some javascript' ;
$result = $this -> Html -> scriptEnd ();
$expected = array (
'script' => array ( 'type' => 'text/javascript' ),
$this -> cDataStart ,
'this is some javascript' ,
$this -> cDataEnd ,
'/script'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> scriptStart ( array ( 'safe' => false ));
$this -> assertNull ( $result );
echo 'this is some javascript' ;
$result = $this -> Html -> scriptEnd ();
$expected = array (
'script' => array ( 'type' => 'text/javascript' ),
'this is some javascript' ,
'/script'
);
$this -> assertTags ( $result , $expected );
2010-07-15 03:03:30 +00:00
$this -> View -> expects ( $this -> once ()) -> method ( 'addScript' );
2009-07-25 19:43:26 +00:00
$result = $this -> Html -> scriptStart ( array ( 'safe' => false , 'inline' => false ));
$this -> assertNull ( $result );
echo 'this is some javascript' ;
$result = $this -> Html -> scriptEnd ();
$this -> assertNull ( $result );
}
2009-09-24 04:28:27 +00:00
2008-06-02 19:22:55 +00:00
/**
* testCharsetTag method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testCharsetTag () {
Configure :: write ( 'App.encoding' , null );
$result = $this -> Html -> charset ();
$this -> assertTags ( $result , array ( 'meta' => array ( 'http-equiv' => 'Content-Type' , 'content' => 'text/html; charset=utf-8' )));
Configure :: write ( 'App.encoding' , 'ISO-8859-1' );
$result = $this -> Html -> charset ();
$this -> assertTags ( $result , array ( 'meta' => array ( 'http-equiv' => 'Content-Type' , 'content' => 'text/html; charset=iso-8859-1' )));
$result = $this -> Html -> charset ( 'UTF-7' );
$this -> assertTags ( $result , array ( 'meta' => array ( 'http-equiv' => 'Content-Type' , 'content' => 'text/html; charset=UTF-7' )));
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testBreadcrumb method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testBreadcrumb () {
$this -> Html -> addCrumb ( 'First' , '#first' );
$this -> Html -> addCrumb ( 'Second' , '#second' );
$this -> Html -> addCrumb ( 'Third' , '#third' );
$result = $this -> Html -> getCrumbs ();
$expected = array (
array ( 'a' => array ( 'href' => '#first' )),
'First' ,
'/a' ,
'»' ,
array ( 'a' => array ( 'href' => '#second' )),
'Second' ,
'/a' ,
'»' ,
array ( 'a' => array ( 'href' => '#third' )),
'Third' ,
'/a' ,
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> getCrumbs ( ' > ' );
$expected = array (
array ( 'a' => array ( 'href' => '#first' )),
'First' ,
'/a' ,
' > ' ,
array ( 'a' => array ( 'href' => '#second' )),
'Second' ,
'/a' ,
' > ' ,
array ( 'a' => array ( 'href' => '#third' )),
'Third' ,
'/a' ,
);
$this -> assertTags ( $result , $expected );
$this -> assertPattern ( '/^<a[^<>]+>First<\/a> > <a[^<>]+>Second<\/a> > <a[^<>]+>Third<\/a>$/' , $result );
$this -> assertPattern ( '/<a\s+href=["\']+\#first["\']+[^<>]*>First<\/a>/' , $result );
$this -> assertPattern ( '/<a\s+href=["\']+\#second["\']+[^<>]*>Second<\/a>/' , $result );
$this -> assertPattern ( '/<a\s+href=["\']+\#third["\']+[^<>]*>Third<\/a>/' , $result );
$this -> assertNoPattern ( '/<a[^<>]+[^href]=[^<>]*>/' , $result );
$this -> Html -> addCrumb ( 'Fourth' , null );
$result = $this -> Html -> getCrumbs ();
$expected = array (
array ( 'a' => array ( 'href' => '#first' )),
'First' ,
'/a' ,
'»' ,
array ( 'a' => array ( 'href' => '#second' )),
'Second' ,
'/a' ,
'»' ,
array ( 'a' => array ( 'href' => '#third' )),
'Third' ,
'/a' ,
'»' ,
'Fourth'
);
$this -> assertTags ( $result , $expected );
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testNestedList method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testNestedList () {
$list = array (
'Item 1' ,
'Item 2' => array (
'Item 2.1'
),
'Item 3' ,
'Item 4' => array (
'Item 4.1' ,
'Item 4.2' ,
'Item 4.3' => array (
'Item 4.3.1' ,
'Item 4.3.2'
)
),
'Item 5' => array (
'Item 5.1' ,
'Item 5.2'
)
);
$result = $this -> Html -> nestedList ( $list );
$expected = array (
'<ul' ,
'<li' , 'Item 1' , '/li' ,
'<li' , 'Item 2' ,
'<ul' , '<li' , 'Item 2.1' , '/li' , '/ul' ,
'/li' ,
'<li' , 'Item 3' , '/li' ,
'<li' , 'Item 4' ,
'<ul' ,
'<li' , 'Item 4.1' , '/li' ,
'<li' , 'Item 4.2' , '/li' ,
'<li' , 'Item 4.3' ,
'<ul' ,
'<li' , 'Item 4.3.1' , '/li' ,
'<li' , 'Item 4.3.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul' ,
'/li' ,
'<li' , 'Item 5' ,
'<ul' ,
'<li' , 'Item 5.1' , '/li' ,
'<li' , 'Item 5.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> nestedList ( $list , null );
$expected = array (
'<ul' ,
'<li' , 'Item 1' , '/li' ,
'<li' , 'Item 2' ,
'<ul' , '<li' , 'Item 2.1' , '/li' , '/ul' ,
'/li' ,
'<li' , 'Item 3' , '/li' ,
'<li' , 'Item 4' ,
'<ul' ,
'<li' , 'Item 4.1' , '/li' ,
'<li' , 'Item 4.2' , '/li' ,
'<li' , 'Item 4.3' ,
'<ul' ,
'<li' , 'Item 4.3.1' , '/li' ,
'<li' , 'Item 4.3.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul' ,
'/li' ,
'<li' , 'Item 5' ,
'<ul' ,
'<li' , 'Item 5.1' , '/li' ,
'<li' , 'Item 5.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> nestedList ( $list , array (), array (), 'ol' );
$expected = array (
'<ol' ,
'<li' , 'Item 1' , '/li' ,
'<li' , 'Item 2' ,
'<ol' , '<li' , 'Item 2.1' , '/li' , '/ol' ,
'/li' ,
'<li' , 'Item 3' , '/li' ,
'<li' , 'Item 4' ,
'<ol' ,
'<li' , 'Item 4.1' , '/li' ,
'<li' , 'Item 4.2' , '/li' ,
'<li' , 'Item 4.3' ,
'<ol' ,
'<li' , 'Item 4.3.1' , '/li' ,
'<li' , 'Item 4.3.2' , '/li' ,
'/ol' ,
'/li' ,
'/ol' ,
'/li' ,
'<li' , 'Item 5' ,
'<ol' ,
'<li' , 'Item 5.1' , '/li' ,
'<li' , 'Item 5.2' , '/li' ,
'/ol' ,
'/li' ,
'/ol'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> nestedList ( $list , 'ol' );
$expected = array (
'<ol' ,
'<li' , 'Item 1' , '/li' ,
'<li' , 'Item 2' ,
'<ol' , '<li' , 'Item 2.1' , '/li' , '/ol' ,
'/li' ,
'<li' , 'Item 3' , '/li' ,
'<li' , 'Item 4' ,
'<ol' ,
'<li' , 'Item 4.1' , '/li' ,
'<li' , 'Item 4.2' , '/li' ,
'<li' , 'Item 4.3' ,
'<ol' ,
'<li' , 'Item 4.3.1' , '/li' ,
'<li' , 'Item 4.3.2' , '/li' ,
'/ol' ,
'/li' ,
'/ol' ,
'/li' ,
'<li' , 'Item 5' ,
'<ol' ,
'<li' , 'Item 5.1' , '/li' ,
'<li' , 'Item 5.2' , '/li' ,
'/ol' ,
'/li' ,
'/ol'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> nestedList ( $list , array ( 'class' => 'list' ));
$expected = array (
array ( 'ul' => array ( 'class' => 'list' )),
'<li' , 'Item 1' , '/li' ,
'<li' , 'Item 2' ,
array ( 'ul' => array ( 'class' => 'list' )), '<li' , 'Item 2.1' , '/li' , '/ul' ,
'/li' ,
'<li' , 'Item 3' , '/li' ,
'<li' , 'Item 4' ,
array ( 'ul' => array ( 'class' => 'list' )),
'<li' , 'Item 4.1' , '/li' ,
'<li' , 'Item 4.2' , '/li' ,
'<li' , 'Item 4.3' ,
array ( 'ul' => array ( 'class' => 'list' )),
'<li' , 'Item 4.3.1' , '/li' ,
'<li' , 'Item 4.3.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul' ,
'/li' ,
'<li' , 'Item 5' ,
array ( 'ul' => array ( 'class' => 'list' )),
'<li' , 'Item 5.1' , '/li' ,
'<li' , 'Item 5.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> nestedList ( $list , array (), array ( 'class' => 'item' ));
$expected = array (
'<ul' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 1' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 2' ,
'<ul' , array ( 'li' => array ( 'class' => 'item' )), 'Item 2.1' , '/li' , '/ul' ,
'/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 3' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4' ,
'<ul' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.1' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.2' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.3' ,
'<ul' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.3.1' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.3.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul' ,
'/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 5' ,
'<ul' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 5.1' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 5.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> nestedList ( $list , array (), array ( 'even' => 'even' , 'odd' => 'odd' ));
$expected = array (
'<ul' ,
array ( 'li' => array ( 'class' => 'odd' )), 'Item 1' , '/li' ,
array ( 'li' => array ( 'class' => 'even' )), 'Item 2' ,
'<ul' , array ( 'li' => array ( 'class' => 'odd' )), 'Item 2.1' , '/li' , '/ul' ,
'/li' ,
array ( 'li' => array ( 'class' => 'odd' )), 'Item 3' , '/li' ,
array ( 'li' => array ( 'class' => 'even' )), 'Item 4' ,
'<ul' ,
array ( 'li' => array ( 'class' => 'odd' )), 'Item 4.1' , '/li' ,
array ( 'li' => array ( 'class' => 'even' )), 'Item 4.2' , '/li' ,
array ( 'li' => array ( 'class' => 'odd' )), 'Item 4.3' ,
'<ul' ,
array ( 'li' => array ( 'class' => 'odd' )), 'Item 4.3.1' , '/li' ,
array ( 'li' => array ( 'class' => 'even' )), 'Item 4.3.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul' ,
'/li' ,
array ( 'li' => array ( 'class' => 'odd' )), 'Item 5' ,
'<ul' ,
array ( 'li' => array ( 'class' => 'odd' )), 'Item 5.1' , '/li' ,
array ( 'li' => array ( 'class' => 'even' )), 'Item 5.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul'
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> nestedList ( $list , array ( 'class' => 'list' ), array ( 'class' => 'item' ));
$expected = array (
array ( 'ul' => array ( 'class' => 'list' )),
array ( 'li' => array ( 'class' => 'item' )), 'Item 1' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 2' ,
array ( 'ul' => array ( 'class' => 'list' )), array ( 'li' => array ( 'class' => 'item' )), 'Item 2.1' , '/li' , '/ul' ,
'/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 3' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4' ,
array ( 'ul' => array ( 'class' => 'list' )),
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.1' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.2' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.3' ,
array ( 'ul' => array ( 'class' => 'list' )),
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.3.1' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 4.3.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul' ,
'/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 5' ,
array ( 'ul' => array ( 'class' => 'list' )),
array ( 'li' => array ( 'class' => 'item' )), 'Item 5.1' , '/li' ,
array ( 'li' => array ( 'class' => 'item' )), 'Item 5.2' , '/li' ,
'/ul' ,
'/li' ,
'/ul'
);
$this -> assertTags ( $result , $expected );
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testMeta method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testMeta () {
$result = $this -> Html -> meta ( 'this is an rss feed' , array ( 'controller' => 'posts' , 'ext' => 'rss' ));
$this -> assertTags ( $result , array ( 'link' => array ( 'href' => 'preg:/.*\/posts\.rss/' , 'type' => 'application/rss+xml' , 'rel' => 'alternate' , 'title' => 'this is an rss feed' )));
$result = $this -> Html -> meta ( 'rss' , array ( 'controller' => 'posts' , 'ext' => 'rss' ), array ( 'title' => 'this is an rss feed' ));
$this -> assertTags ( $result , array ( 'link' => array ( 'href' => 'preg:/.*\/posts\.rss/' , 'type' => 'application/rss+xml' , 'rel' => 'alternate' , 'title' => 'this is an rss feed' )));
$result = $this -> Html -> meta ( 'atom' , array ( 'controller' => 'posts' , 'ext' => 'xml' ));
$this -> assertTags ( $result , array ( 'link' => array ( 'href' => 'preg:/.*\/posts\.xml/' , 'type' => 'application/atom+xml' , 'title' => 'atom' )));
2008-11-08 00:24:51 +00:00
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> meta ( 'non-existing' );
$this -> assertTags ( $result , array ( '<meta' ));
$result = $this -> Html -> meta ( 'non-existing' , '/posts.xpp' );
$this -> assertTags ( $result , array ( 'link' => array ( 'href' => 'preg:/.*\/posts\.xpp/' , 'type' => 'application/rss+xml' , 'rel' => 'alternate' , 'title' => 'non-existing' )));
$result = $this -> Html -> meta ( 'non-existing' , '/posts.xpp' , array ( 'type' => 'atom' ));
$this -> assertTags ( $result , array ( 'link' => array ( 'href' => 'preg:/.*\/posts\.xpp/' , 'type' => 'application/atom+xml' , 'title' => 'non-existing' )));
$result = $this -> Html -> meta ( 'atom' , array ( 'controller' => 'posts' , 'ext' => 'xml' ), array ( 'link' => '/articles.rss' ));
$this -> assertTags ( $result , array ( 'link' => array ( 'href' => 'preg:/.*\/articles\.rss/' , 'type' => 'application/atom+xml' , 'title' => 'atom' )));
$result = $this -> Html -> meta ( array ( 'link' => 'favicon.ico' , 'rel' => 'icon' ));
$expected = array (
'link' => array ( 'href' => 'preg:/.*favicon\.ico/' , 'rel' => 'icon' ),
array ( 'link' => array ( 'href' => 'preg:/.*favicon\.ico/' , 'rel' => 'shortcut icon' ))
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> meta ( 'icon' , 'favicon.ico' );
$expected = array (
'link' => array ( 'href' => 'preg:/.*favicon\.ico/' , 'type' => 'image/x-icon' , 'rel' => 'icon' ),
array ( 'link' => array ( 'href' => 'preg:/.*favicon\.ico/' , 'type' => 'image/x-icon' , 'rel' => 'shortcut icon' ))
);
$this -> assertTags ( $result , $expected );
$result = $this -> Html -> meta ( 'keywords' , 'these, are, some, meta, keywords' );
$this -> assertTags ( $result , array ( 'meta' => array ( 'name' => 'keywords' , 'content' => 'these, are, some, meta, keywords' )));
2010-02-20 06:38:16 +00:00
$this -> assertPattern ( '/\s+\/>$/' , $result );
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> meta ( 'description' , 'this is the meta description' );
$this -> assertTags ( $result , array ( 'meta' => array ( 'name' => 'description' , 'content' => 'this is the meta description' )));
$result = $this -> Html -> meta ( array ( 'name' => 'ROBOTS' , 'content' => 'ALL' ));
$this -> assertTags ( $result , array ( 'meta' => array ( 'name' => 'ROBOTS' , 'content' => 'ALL' )));
2010-04-24 00:51:24 +00:00
2010-07-15 03:03:30 +00:00
$this -> View -> expects ( $this -> any ()) -> method ( 'addScript' )
-> with ( $this -> matchesRegularExpression ( '/^<meta/' ));
$result = $this -> Html -> meta ( array ( 'name' => 'ROBOTS' , 'content' => 'ALL' ), null , array ( 'inline' => false ));
$this -> assertNull ( $result );
2008-05-30 11:40:08 +00:00
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testTableHeaders method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testTableHeaders () {
$result = $this -> Html -> tableHeaders ( array ( 'ID' , 'Name' , 'Date' ));
$expected = array ( '<tr' , '<th' , 'ID' , '/th' , '<th' , 'Name' , '/th' , '<th' , 'Date' , '/th' , '/tr' );
$this -> assertTags ( $result , $expected );
}
2009-07-24 19:18:37 +00:00
2008-06-02 19:22:55 +00:00
/**
* testTableCells method
2008-11-08 00:24:51 +00:00
*
2008-06-02 19:22:55 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testTableCells () {
$tr = array (
'td content 1' ,
array ( 'td content 2' , array ( " width " => " 100px " )),
2008-06-20 20:17:23 +00:00
array ( 'td content 3' , " width=100px " )
2008-05-30 11:40:08 +00:00
);
$result = $this -> Html -> tableCells ( $tr );
$expected = array (
'<tr' ,
'<td' , 'td content 1' , '/td' ,
array ( 'td' => array ( 'width' => '100px' )), 'td content 2' , '/td' ,
array ( 'td' => array ( 'width' => 'preg:/100px/' )), 'td content 3' , '/td' ,
'/tr'
);
$this -> assertTags ( $result , $expected );
$tr = array ( 'td content 1' , 'td content 2' , 'td content 3' );
$result = $this -> Html -> tableCells ( $tr , null , null , true );
$expected = array (
'<tr' ,
array ( 'td' => array ( 'class' => 'column-1' )), 'td content 1' , '/td' ,
array ( 'td' => array ( 'class' => 'column-2' )), 'td content 2' , '/td' ,
array ( 'td' => array ( 'class' => 'column-3' )), 'td content 3' , '/td' ,
'/tr'
);
$this -> assertTags ( $result , $expected );
$tr = array ( 'td content 1' , 'td content 2' , 'td content 3' );
$result = $this -> Html -> tableCells ( $tr , true );
$expected = array (
'<tr' ,
array ( 'td' => array ( 'class' => 'column-1' )), 'td content 1' , '/td' ,
array ( 'td' => array ( 'class' => 'column-2' )), 'td content 2' , '/td' ,
array ( 'td' => array ( 'class' => 'column-3' )), 'td content 3' , '/td' ,
'/tr'
);
$this -> assertTags ( $result , $expected );
2008-11-08 00:24:51 +00:00
2008-05-30 11:40:08 +00:00
$tr = array (
2008-06-20 20:17:23 +00:00
array ( 'td content 1' , 'td content 2' , 'td content 3' ),
array ( 'td content 1' , 'td content 2' , 'td content 3' ),
array ( 'td content 1' , 'td content 2' , 'td content 3' )
2008-05-30 11:40:08 +00:00
);
$result = $this -> Html -> tableCells ( $tr , array ( 'class' => 'odd' ), array ( 'class' => 'even' ));
$expected = " <tr class= \" even \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> \n <tr class= \" odd \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> \n <tr class= \" even \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> " ;
$this -> assertEqual ( $result , $expected );
2008-11-08 00:24:51 +00:00
2008-05-30 11:40:08 +00:00
$tr = array (
2008-06-20 20:17:23 +00:00
array ( 'td content 1' , 'td content 2' , 'td content 3' ),
array ( 'td content 1' , 'td content 2' , 'td content 3' ),
array ( 'td content 1' , 'td content 2' , 'td content 3' ),
array ( 'td content 1' , 'td content 2' , 'td content 3' )
2008-05-30 11:40:08 +00:00
);
$result = $this -> Html -> tableCells ( $tr , array ( 'class' => 'odd' ), array ( 'class' => 'even' ));
$expected = " <tr class= \" odd \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> \n <tr class= \" even \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> \n <tr class= \" odd \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> \n <tr class= \" even \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> " ;
$this -> assertEqual ( $result , $expected );
2008-11-08 00:24:51 +00:00
2008-05-30 11:40:08 +00:00
$tr = array (
2008-06-20 20:17:23 +00:00
array ( 'td content 1' , 'td content 2' , 'td content 3' ),
array ( 'td content 1' , 'td content 2' , 'td content 3' ),
array ( 'td content 1' , 'td content 2' , 'td content 3' )
2008-05-30 11:40:08 +00:00
);
2008-06-20 20:17:23 +00:00
$this -> Html -> tableCells ( $tr , array ( 'class' => 'odd' ), array ( 'class' => 'even' ));
$result = $this -> Html -> tableCells ( $tr , array ( 'class' => 'odd' ), array ( 'class' => 'even' ), false , false );
2008-05-30 11:40:08 +00:00
$expected = " <tr class= \" odd \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> \n <tr class= \" even \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> \n <tr class= \" odd \" ><td>td content 1</td> <td>td content 2</td> <td>td content 3</td></tr> " ;
$this -> assertEqual ( $result , $expected );
}
2009-07-24 19:18:37 +00:00
2008-06-05 15:20:45 +00:00
/**
* testTag method
2008-11-08 00:24:51 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-06-20 20:17:23 +00:00
function testTag () {
$result = $this -> Html -> tag ( 'div' );
$this -> assertTags ( $result , '<div' );
2008-05-30 11:40:08 +00:00
$result = $this -> Html -> tag ( 'div' , 'text' );
$this -> assertTags ( $result , '<div' , 'text' , '/div' );
2009-10-17 03:11:13 +00:00
$result = $this -> Html -> tag ( 'div' , '<text>' , 'class-name' );
$this -> assertTags ( $result , array ( 'div' => array ( 'class' => 'class-name' ), 'preg:/<text>/' , '/div' ));
2008-06-20 20:17:23 +00:00
2009-08-27 02:46:49 +00:00
$result = $this -> Html -> tag ( 'div' , '<text>' , array ( 'class' => 'class-name' , 'escape' => true ));
$this -> assertTags ( $result , array ( 'div' => array ( 'class' => 'class-name' ), '<text>' , '/div' ));
2008-06-20 20:17:23 +00:00
}
2009-07-24 19:18:37 +00:00
2011-01-23 14:25:52 +00:00
/**
* testUseTag method
*
* @ return void
*/
public function testUseTag () {
$result = $this -> Html -> useTag ( 'formend' );
$this -> assertTags ( $result , '/form' );
2011-02-05 10:52:18 +00:00
$result = $this -> Html -> useTag ( 'form' , ' test' );
2011-01-23 14:25:52 +00:00
$this -> assertEqual ( $result , '<form test>' );
$result = $this -> Html -> useTag ( 'form' , array ( 'test' => 'ok' ));
$this -> assertTags ( $result , array ( 'form' => array ( 'test' => 'ok' )));
}
2008-06-05 15:20:45 +00:00
/**
* testDiv method
2008-11-08 00:24:51 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testDiv () {
$result = $this -> Html -> div ( 'class-name' );
$this -> assertTags ( $result , array ( 'div' => array ( 'class' => 'class-name' )));
$result = $this -> Html -> div ( 'class-name' , 'text' );
$this -> assertTags ( $result , array ( 'div' => array ( 'class' => 'class-name' ), 'text' , '/div' ));
2009-10-17 03:11:13 +00:00
$result = $this -> Html -> div ( 'class-name' , '<text>' , array ( 'escape' => true ));
2008-05-30 11:40:08 +00:00
$this -> assertTags ( $result , array ( 'div' => array ( 'class' => 'class-name' ), '<text>' , '/div' ));
}
2009-07-24 19:18:37 +00:00
2008-06-05 15:20:45 +00:00
/**
* testPara method
2008-11-08 00:24:51 +00:00
*
2008-06-05 15:20:45 +00:00
* @ access public
* @ return void
*/
2008-05-30 11:40:08 +00:00
function testPara () {
2008-06-19 14:31:00 +00:00
$result = $this -> Html -> para ( 'class-name' , '' );
2008-05-30 11:40:08 +00:00
$this -> assertTags ( $result , array ( 'p' => array ( 'class' => 'class-name' )));
$result = $this -> Html -> para ( 'class-name' , 'text' );
$this -> assertTags ( $result , array ( 'p' => array ( 'class' => 'class-name' ), 'text' , '/p' ));
2009-10-17 03:14:42 +00:00
$result = $this -> Html -> para ( 'class-name' , '<text>' , array ( 'escape' => true ));
2008-05-30 11:40:08 +00:00
$this -> assertTags ( $result , array ( 'p' => array ( 'class' => 'class-name' ), '<text>' , '/p' ));
}
2011-04-17 16:03:43 +00:00
2010-06-27 16:07:19 +00:00
/**
* testCrumbList method
2011-04-17 16:03:43 +00:00
*
2010-06-27 16:07:19 +00:00
* @ access public
2011-04-17 16:03:43 +00:00
*
2010-06-27 16:07:19 +00:00
* @ return void
*/
function testCrumbList () {
2010-06-29 02:53:33 +00:00
$this -> Html -> addCrumb ( 'Home' , '/' , array ( 'class' => 'home' ));
$this -> Html -> addCrumb ( 'Some page' , '/some_page' );
$this -> Html -> addCrumb ( 'Another page' );
$result = $this -> Html -> getCrumbList (
array ( 'class' => 'breadcrumbs' )
);
$this -> assertTags (
$result ,
array (
array ( 'ul' => array ( 'class' => 'breadcrumbs' )),
array ( 'li' => array ( 'class' => 'first' )),
array ( 'a' => array ( 'class' => 'home' , 'href' => '/' )), 'Home' , '/a' ,
'/li' ,
'<li' ,
array ( 'a' => array ( 'href' => '/some_page' )), 'Some page' , '/a' ,
'/li' ,
array ( 'li' => array ( 'class' => 'last' )),
'Another page' ,
'/li' ,
'/ul'
)
);
2010-06-27 16:07:19 +00:00
}
2011-01-23 14:36:14 +00:00
2011-01-23 21:27:50 +00:00
/**
* testLoadConfig method
*
* @ return void
*/
public function testLoadConfig () {
2011-04-17 10:35:21 +00:00
$path = CAKE . 'Test' . DS . 'test_app' . DS . 'Config' . DS ;
2011-01-23 21:27:50 +00:00
$result = $this -> Html -> loadConfig ( 'htmlhelper_tags' , $path );
$expected = array (
'tags' => array (
'form' => 'start form' ,
'formend' => 'finish form'
)
);
$this -> assertEqual ( $result , $expected );
$tags = $this -> Html -> getAttribute ( '_tags' );
$this -> assertEqual ( $tags [ 'form' ], 'start form' );
$this -> assertEqual ( $tags [ 'formend' ], 'finish form' );
$this -> assertEqual ( $tags [ 'selectend' ], '</select>' );
$result = $this -> Html -> loadConfig ( array ( 'htmlhelper_minimized.ini' , 'ini' ), $path );
$expected = array (
'minimizedAttributeFormat' => 'format'
);
$this -> assertEqual ( $result , $expected );
$this -> assertEqual ( $this -> Html -> getAttribute ( '_minimizedAttributeFormat' ), 'format' );
2011-01-25 03:18:39 +00:00
}
2011-01-23 21:27:50 +00:00
2011-01-25 03:18:39 +00:00
/**
* testLoadConfigWrongFile method
*
* @ return void
* @ expectedException ConfigureException
*/
public function testLoadConfigWrongFile () {
2011-01-23 21:27:50 +00:00
$result = $this -> Html -> loadConfig ( 'wrong_file' );
2011-01-25 03:18:39 +00:00
}
2011-01-23 21:27:50 +00:00
2011-01-25 03:18:39 +00:00
/**
* testLoadConfigWrongReader method
*
* @ return void
* @ expectedException ConfigureException
*/
public function testLoadConfigWrongReader () {
2011-04-17 10:35:21 +00:00
$path = CAKE . 'Test' . DS . 'test_app' . DS . 'Config' . DS ;
2011-01-23 21:27:50 +00:00
$result = $this -> Html -> loadConfig ( array ( 'htmlhelper_tags' , 'wrong_reader' ), $path );
}
2011-01-23 14:36:14 +00:00
/**
* test parsing attributes .
*
* @ return void
*/
function testParseAttributeCompact () {
$helper = new TestHtmlHelper ( $this -> View );
$compact = array ( 'compact' , 'checked' , 'declare' , 'readonly' , 'disabled' ,
'selected' , 'defer' , 'ismap' , 'nohref' , 'noshade' , 'nowrap' , 'multiple' , 'noresize' );
2011-04-17 16:03:43 +00:00
2011-01-23 14:36:14 +00:00
foreach ( $compact as $attribute ) {
foreach ( array ( 'true' , true , 1 , '1' , $attribute ) as $value ) {
$attrs = array ( $attribute => $value );
$expected = ' ' . $attribute . '="' . $attribute . '"' ;
$this -> assertEqual ( $helper -> parseAttributes ( $attrs ), $expected , '%s Failed on ' . $value );
}
}
$this -> assertEqual ( $helper -> parseAttributes ( array ( 'compact' )), ' compact="compact"' );
$helper = new Html5TestHelper ( $this -> View );
$expected = ' require' ;
$this -> assertEqual ( $helper -> parseAttributes ( array ( 'require' )), $expected );
$this -> assertEqual ( $helper -> parseAttributes ( array ( 'require' => true )), $expected );
$this -> assertEqual ( $helper -> parseAttributes ( array ( 'require' => false )), '' );
}
2008-05-30 11:40:08 +00:00
}