* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ require_once(dirname(__FILE__).'/../../bootstrap/unit.php'); require_once($_test_dir.'/unit/sfContextMock.class.php'); require_once(dirname(__FILE__).'/../../../lib/helper/TagHelper.php'); require_once(dirname(__FILE__).'/../../../lib/helper/UrlHelper.php'); require_once(dirname(__FILE__).'/../../../lib/helper/AssetHelper.php'); $t = new lime_test(68); class myRequest { public $relativeUrlRoot = ''; public function getRelativeUrlRoot() { return $this->relativeUrlRoot; } public function isSecure() { return false; } public function getHost() { return 'localhost'; } } class myResponse extends sfWebResponse { public function resetAssets() { $this->javascripts = array_combine($this->positions, array_fill(0, count($this->positions), array())); $this->stylesheets = array_combine($this->positions, array_fill(0, count($this->positions), array())); } } class myController { public function genUrl($parameters = array(), $absolute = false) { return ($absolute ? '/' : '').$parameters; } } $context = sfContext::getInstance(array('request' => 'myRequest', 'response' => 'myResponse', 'controller' => 'myController')); // _compute_public_path() $t->diag('_compute_public_path'); $t->is(_compute_public_path('foo', 'css', 'css'), '/css/foo.css', '_compute_public_path() converts a string to a web path'); $t->is(_compute_public_path('foo', 'css', 'css', true), 'http://localhost/css/foo.css', '_compute_public_path() can create absolute links'); $t->is(_compute_public_path('foo.css2', 'css', 'css'), '/css/foo.css2', '_compute_public_path() does not add suffix if one already exists'); $context->request->relativeUrlRoot = '/bar'; $t->is(_compute_public_path('foo', 'css', 'css'), '/bar/css/foo.css', '_compute_public_path() takes into account the relative url root configuration'); $context->request->relativeUrlRoot = ''; $t->is(_compute_public_path('foo.css?foo=bar', 'css', 'css'), '/css/foo.css?foo=bar', '_compute_public_path() takes into account query strings'); $t->is(_compute_public_path('foo?foo=bar', 'css', 'css'), '/css/foo.css?foo=bar', '_compute_public_path() takes into account query strings'); // image_tag() $t->diag('image_tag()'); $t->is(image_tag(''), '', 'image_tag() returns nothing when called without arguments'); $t->is(image_tag('test'), '', 'image_tag() takes an image name as its first argument'); $t->is(image_tag('test.png'), '', 'image_tag() can take an image name with an extension'); $t->is(image_tag('/images/test.png'), '', 'image_tag() can take an absolute image path'); $t->is(image_tag('/images/test'), '', 'image_tag() can take an absolute image path without extension'); $t->is(image_tag('test.jpg'), '', 'image_tag() can take an image name with an extension'); $t->is(image_tag('test', array('alt' => 'Foo')), 'Foo', 'image_tag() takes an array of options as its second argument to override alt'); $t->is(image_tag('test', array('size' => '10x10')), '', 'image_tag() takes a size option'); $t->is(image_tag('test', array('absolute' => true)), '', 'image_tag() can take an absolute parameter'); $t->is(image_tag('test', array('class' => 'bar')), '', 'image_tag() takes whatever option you want'); $t->is(image_tag('test', array('alt_title' => 'Foo')), 'Foo', 'image_tag() takes an array of options as its second argument to create alt and title'); $t->is(image_tag('test', array('alt_title' => 'Foo', 'title' => 'Bar')), 'Foo', 'image_tag() takes an array of options as its second argument to create alt and title'); // stylesheet_tag() $t->diag('stylesheet_tag()'); $t->is(stylesheet_tag('style'), ''."\n", 'stylesheet_tag() takes a stylesheet name as its first argument'); $t->is(stylesheet_tag('random.styles', '/css/stylish'), ''."\n". ''."\n", 'stylesheet_tag() can takes n stylesheet names as its arguments'); $t->is(stylesheet_tag('style', array('media' => 'all')), ''."\n", 'stylesheet_tag() can take a media option'); $t->is(stylesheet_tag('style', array('absolute' => true)), ''."\n", 'stylesheet_tag() can take an absolute option to output an absolute file name'); $t->is(stylesheet_tag('style', array('raw_name' => true)), ''."\n", 'stylesheet_tag() can take a raw_name option to bypass file name decoration'); $t->is(stylesheet_tag('style', array('condition' => 'IE 6')), ''."\n", 'stylesheet_tag() can take a condition option'); // javascript_include_tag() $t->diag('javascript_include_tag()'); $t->is(javascript_include_tag('xmlhr'), ''."\n", 'javascript_include_tag() takes a javascript name as its first argument'); $t->is(javascript_include_tag('common.javascript', '/elsewhere/cools'), ''."\n". ''."\n", 'javascript_include_tag() can takes n javascript file names as its arguments'); $t->is(javascript_include_tag('xmlhr', array('absolute' => true)), ''."\n", 'javascript_include_tag() can take an absolute option to output an absolute file name'); $t->is(javascript_include_tag('xmlhr', array('raw_name' => true)), ''."\n", 'javascript_include_tag() can take a raw_name option to bypass file name decoration'); $t->is(javascript_include_tag('xmlhr', array('defer' => 'defer')), ''."\n", 'javascript_include_tag() can take additional html options like defer'); $t->is(javascript_include_tag('xmlhr', array('condition' => 'IE 6')), ''."\n", 'javascript_include_tag() can take a condition option'); // javascript_path() $t->diag('javascript_path()'); $t->is(javascript_path('xmlhr'), '/js/xmlhr.js', 'javascript_path() decorates a relative filename with js dir name and extension'); $t->is(javascript_path('/xmlhr'), '/xmlhr.js', 'javascript_path() does not decorate absolute file names with js dir name'); $t->is(javascript_path('xmlhr.foo'), '/js/xmlhr.foo', 'javascript_path() does not decorate file names with extension with .js'); $t->is(javascript_path('xmlhr.foo', true), 'http://localhost/js/xmlhr.foo', 'javascript_path() accepts a second parameter to output an absolute resource path'); // stylesheet_path() $t->diag('stylesheet_path()'); $t->is(stylesheet_path('style'), '/css/style.css', 'stylesheet_path() decorates a relative filename with css dir name and extension'); $t->is(stylesheet_path('/style'), '/style.css', 'stylesheet_path() does not decorate absolute file names with css dir name'); $t->is(stylesheet_path('style.foo'), '/css/style.foo', 'stylesheet_path() does not decorate file names with extension with .css'); $t->is(stylesheet_path('style.foo', true), 'http://localhost/css/style.foo', 'stylesheet_path() accepts a second parameter to output an absolute resource path'); // image_path() $t->diag('image_path()'); $t->is(image_path('img'), '/images/img.png', 'image_path() decorates a relative filename with images dir name and png extension'); $t->is(image_path('/img'), '/img.png', 'image_path() does not decorate absolute file names with images dir name'); $t->is(image_path('img.jpg'), '/images/img.jpg', 'image_path() does not decorate file names with extension with .png'); $t->is(image_path('img.jpg', true), 'http://localhost/images/img.jpg', 'image_path() accepts a second parameter to output an absolute resource path'); // use_javascript() get_javascripts() $t->diag('use_javascript() get_javascripts()'); use_javascript('xmlhr'); $t->is(get_javascripts(), ''."\n", 'get_javascripts() returns a javascript previously added by use_javascript()'); use_javascript('xmlhr', '', array('raw_name' => true)); $t->is(get_javascripts(), ''."\n", 'use_javascript() accepts an array of options as a third parameter'); use_javascript('xmlhr', '', array('absolute' => true)); $t->is(get_javascripts(), ''."\n", 'use_javascript() accepts an array of options as a third parameter'); use_javascript('xmlhr'); use_javascript('xmlhr2'); $t->is(get_javascripts(), ''."\n".''."\n", 'get_javascripts() returns all the javascripts previously added by use_javascript()'); // use_stylesheet() get_stylesheets() $t->diag('use_stylesheet() get_stylesheets()'); use_stylesheet('style'); $t->is(get_stylesheets(), ''."\n", 'get_stylesheets() returns a stylesheet previously added by use_stylesheet()'); use_stylesheet('style', '', array('raw_name' => true)); $t->is(get_stylesheets(), ''."\n", 'use_stylesheet() accepts an array of options as a third parameter'); use_stylesheet('style', '', array('absolute' => true)); $t->is(get_stylesheets(), ''."\n", 'use_stylesheet() accepts an array of options as a third parameter'); use_stylesheet('style'); use_stylesheet('style2'); $t->is(get_stylesheets(), ''."\n".''."\n", 'get_stylesheets() returns all the stylesheets previously added by use_stylesheet()'); // _dynamic_path() $t->diag('_dynamic_path()'); $t->is(_dynamic_path('module/action', 'js'), 'module/action?sf_format=js', '_dynamic_path() converts an internal URI to a URL'); $t->is(_dynamic_path('module/action?key=value', 'js'), 'module/action?key=value&sf_format=js', '_dynamic_path() converts an internal URI to a URL'); $t->is(_dynamic_path('module/action', 'js', true), '/module/action?sf_format=js', '_dynamic_path() converts an internal URI to a URL'); // dynamic_javascript_include_tag() $t->diag('dynamic_javascript_include_tag()'); $t->is(dynamic_javascript_include_tag('module/action'), ''."\n", 'dynamic_javascript_include_tag() returns a tag relative to the given action'); $t->is(dynamic_javascript_include_tag('module/action', true), ''."\n", 'dynamic_javascript_include_tag() takes an absolute boolean as its second argument'); $t->is(dynamic_javascript_include_tag('module/action', true, array('class' => 'foo')), ''."\n", 'dynamic_javascript_include_tag() takes an array of HTML attributes as its third argument'); $context->response = new myResponse($context->getEventDispatcher()); // use_dynamic_javascript() $t->diag('use_dynamic_javascript()'); use_dynamic_javascript('module/action'); $t->is(get_javascripts(), ''."\n", 'use_dynamic_javascript() register a dynamic javascript in the response' ); // use_dynamic_stylesheet() $t->diag('use_dynamic_stylesheet()'); use_dynamic_stylesheet('module/action'); $t->is(get_stylesheets(), ''."\n", 'use_dynamic_stylesheet() register a dynamic stylesheet in the response' ); class MyForm extends sfForm { public function getStylesheets() { return array('/path/to/a/foo.css' => 'all', '/path/to/a/bar.css' => 'print'); } public function getJavaScripts() { return array('/path/to/a/foo.js', '/path/to/a/bar.js'); } } // get_javascripts_for_form() get_stylesheets_for_form() $t->diag('get_javascripts_for_form() get_stylesheets_for_form()'); $form = new MyForm(); $output = << EOF; $t->is(get_javascripts_for_form($form), fix_linebreaks($output), 'get_javascripts_for_form() returns script tags'); $output = << EOF; $t->is(get_stylesheets_for_form($form), fix_linebreaks($output), 'get_stylesheets_for_form() returns link tags'); // use_javascripts_for_form() use_stylesheets_for_form() $t->diag('use_javascripts_for_form() use_stylesheets_for_form()'); $response = sfContext::getInstance()->getResponse(); $form = new MyForm(); $response->resetAssets(); use_stylesheets_for_form($form); $t->is_deeply($response->getStylesheets(), array('/path/to/a/foo.css' => array('media' => 'all'), '/path/to/a/bar.css' => array('media' => 'print')), 'use_stylesheets_for_form() adds stylesheets to the response'); $response->resetAssets(); use_javascripts_for_form($form); $t->is_deeply($response->getJavaScripts(), array('/path/to/a/foo.js' => array(), '/path/to/a/bar.js' => array()), 'use_javascripts_for_form() adds javascripts to the response'); // custom web paths $t->diag('Custom asset path handling'); sfConfig::set('sf_web_js_dir_name', 'static/js'); $t->is(javascript_path('xmlhr'), '/static/js/xmlhr.js', 'javascript_path() decorates a relative filename with js dir name and extension with custom js dir'); $t->is(javascript_include_tag('xmlhr'), ''."\n", 'javascript_include_tag() takes a javascript name as its first argument'); sfConfig::set('sf_web_css_dir_name', 'static/css'); $t->is(stylesheet_path('style'), '/static/css/style.css', 'stylesheet_path() decorates a relative filename with css dir name and extension with custom css dir'); $t->is(stylesheet_tag('style'), ''."\n", 'stylesheet_tag() takes a stylesheet name as its first argument'); sfConfig::set('sf_web_images_dir_name', 'static/img'); $t->is(image_path('img'), '/static/img/img.png', 'image_path() decorates a relative filename with images dir name and png extension with custom images dir'); $t->is(image_tag('test'), '', 'image_tag() takes an image name as its first argument');