_clientScript = new CClientScript(); $this->_clientScript->setCoreScriptUrl("assets/12345"); $this->_clientScript->registerCoreScript('jquery'); $this->_clientScript->registerCoreScript('yii'); } /* Test Script Getters */ public function testGetCoreScriptUrl() { $this->assertEquals('assets/12345', $this->_clientScript->getCoreScriptUrl()); } public function providerGetPackageBaseUrl() { return array( array('jquery', 'assets/12345'), array('yii', 'assets/12345') ); } /** * @dataProvider providerGetPackageBaseUrl * * @param string $name * @param string $assertion */ public function testGetPackageBaseUrl($name, $assertion) { $this->assertEquals($assertion,$this->_clientScript->getPackageBaseUrl($name)); } /* Test Script Registers */ public function providerCoreScripts() { return array( array('jquery', array('js'=>array('jquery.js'))), array('yiitab', array('js'=>array('jquery.yiitab.js'), 'depends'=>array('jquery'))), array('yiiactiveform', array('js'=>array('jquery.yiiactiveform.js'), 'depends'=>array('jquery'))) ); } /** * @dataProvider providerCoreScripts * * @param string $name * @param array $assertion */ public function testRegisterCoreScript($name, $assertion) { $returnedClientScript = $this->_clientScript->registerCoreScript($name); $this->assertEquals($assertion, $returnedClientScript->corePackages[$name]); } /** * @dataProvider providerCoreScripts * * @param string $name * @param array $assertion */ public function testRegisterPackage($name, $assertion) { $returnedClientScript = $this->_clientScript->registerPackage($name); $this->assertEquals($assertion, $returnedClientScript->corePackages[$name]); } public function providerScriptFiles() { return array( array('/some/script.js', CClientScript::POS_HEAD, '/some/script.js'), array('http://some/script.js', CClientScript::POS_BEGIN, 'http://some/script.js'), array('/some/script.js', CClientScript::POS_END, '/some/script.js'), ); } public function testHasPackage() { $this->assertTrue($this->_clientScript->hasPackage('jquery')); $this->assertFalse($this->_clientScript->hasPackage('nonexisting')); } /** * @dataProvider providerScriptFiles * * @param string $url * @param integer $position * @param string $assertion */ public function testRegisterScriptFile($url, $position, $assertion) { $returnedClientScript = $this->_clientScript->registerScriptFile($url, $position); $scriptFiles = $this->readAttribute($returnedClientScript, 'scriptFiles'); $this->assertEquals($assertion, $scriptFiles[$position][$url]); } public function providerScriptFilesWithHtmlOptions() { return array( array( '/some/script.js', CClientScript::POS_HEAD, array('defer'=>true), array( 'src'=>'/some/script.js', 'defer'=>true ) ), ); } /** * @dataProvider providerScriptFilesWithHtmlOptions * * @param string $url * @param integer $position * @param array $htmlOptions * @param string $assertion */ public function testRegisterScriptFileWithHtmlOptions($url, $position, $htmlOptions, $assertion) { $returnedClientScript = $this->_clientScript->registerScriptFile($url, $position, $htmlOptions); $scriptFiles = $this->readAttribute($returnedClientScript, 'scriptFiles'); $this->assertEquals($assertion, $scriptFiles[$position][$url]); } public function providerScripts() { return array( array('jsId', "function() {alert('alert')}", CClientScript::POS_HEAD, "function() {alert('alert')}"), array('jsId', "function() {alert('alert')}", CClientScript::POS_BEGIN, "function() {alert('alert')}"), ); } /** * @dataProvider providerScripts * * @param string $id * @param string $script * @param integer $position * @param string $assertion */ public function testRegisterScript($id, $script, $position, $assertion) { $returnedClientScript = $this->_clientScript->registerScript($id, $script, $position); $this->assertEquals($assertion, $returnedClientScript->scripts[$position][$id]); } public function providerScriptsWithHtmlOptions() { return array( array( 'jsId', "function() {alert('alert')}", CClientScript::POS_HEAD, array('defer'=>true), array( 'content'=>"function() {alert('alert')}", 'defer'=>true, ) ), ); } /** * @dataProvider providerScriptsWithHtmlOptions * * @param string $id * @param string $script * @param integer $position * @param array $htmlOptions * @param string $assertion */ public function testRegisterScriptWithHtmlOptions($id, $script, $position, $htmlOptions, $assertion) { $returnedClientScript = $this->_clientScript->registerScript($id, $script, $position, $htmlOptions); $this->assertEquals($assertion, $returnedClientScript->scripts[$position][$id]); } public function providerRegisterCss() { return array( array('myCssDiv', 'float:right;', '', array('myCssDiv'=>array('float:right;', ''))), array('myCssDiv', 'float:right;', 'screen', array('myCssDiv'=>array('float:right;', 'screen'))) ); } /** * @dataProvider providerRegisterCss * * @param string $id * @param string $css * @param string $media * @param array $assertion */ public function testRegisterCss($id, $css, $media, $assertion) { $returnedClientScript = $this->_clientScript->registerCss($id, $css, $media); $this->assertAttributeEquals($assertion, 'css', $returnedClientScript); } public function providerRegisterMetaTag() { $data = array(); // Simple: $metaTagData = array( 'name'=>'testMetaTagName', 'http-equiv'=>false, 'content'=>'testMetaTagContent', ); $assertion = array( $metaTagData ); $data[] = array($metaTagData['content'],$metaTagData['name'],$metaTagData['http-equiv'],array(),$assertion); // Http Equiv: $metaTagData = array( 'name'=>'testMetaTagHttpEquiv', 'http-equiv'=>true, 'content'=>'testMetaTagHttpEquivContent', ); $assertion = array( $metaTagData ); $data[] = array($metaTagData['content'],$metaTagData['name'],$metaTagData['http-equiv'],array(),$assertion); return $data; } /** * @dataProvider providerRegisterMetaTag * * @param string $content * @param string $name * @param boolean $httpEquiv * @param array $options * @param array $assertion */ public function testRegisterMetaTag($content,$name,$httpEquiv,$options,$assertion) { $returnedClientScript = $this->_clientScript->registerMetaTag($content,$name,$httpEquiv,$options); $this->assertAttributeEquals($assertion, 'metaTags', $returnedClientScript); } /** * @depends testRegisterMetaTag */ public function testRegisterDuplicatingMetaTag() { $content='Test meta tag content'; $name='test_meta_tag_name'; $this->_clientScript->registerMetaTag($content,$name); $this->_clientScript->registerMetaTag($content,$name); $metaTagData=array( 'name'=>$name, 'content'=>$content, ); $assertion=array( $metaTagData, $metaTagData ); $this->assertAttributeEquals($assertion, 'metaTags', $this->_clientScript); } /* Test Script Renderers */ public function providerRenderScriptFiles() { return array( array( '/some/script.js', CClientScript::POS_HEAD, array(), '' ), array( '/some/script.js', CClientScript::POS_BEGIN, array(), '' ), array( '/some/script.js', CClientScript::POS_END, array(), '' ), array( '/options/script.js', CClientScript::POS_HEAD, array('defer'=>true), '' ), array( '/options/script.js', CClientScript::POS_BEGIN, array('defer'=>true), '' ), array( '/options/script.js', CClientScript::POS_END, array('defer'=>true), '' ), ); } /** * @depends testRegisterScriptFile * @depends testRegisterScriptFileWithHtmlOptions * * @dataProvider providerRenderScriptFiles * * @param string $url * @param integer $position * @param array $htmlOptions * @param string $assertion */ public function testRenderScriptFiles($url, $position, $htmlOptions, $assertion) { $returnedClientScript = $this->_clientScript->registerScriptFile($url, $position, $htmlOptions); $output = ''; $returnedClientScript->render($output); $this->assertContains($assertion, $output); } public function providerRenderScripts() { return array( array( 'some_js_id', "function() {alert('script')}", CClientScript::POS_HEAD, array(), CHtml::script("function() {alert('script')}") ), array( 'some_js_id', "function() {alert('script')}", CClientScript::POS_BEGIN, array(), CHtml::script("function() {alert('script')}") ), array( 'some_js_id', "function() {alert('script')}", CClientScript::POS_END, array(), CHtml::script("function() {alert('script')}") ), array( 'some_js_id', "function() {alert('script')}", CClientScript::POS_LOAD, array(), CHtml::script("function() {alert('script')}") ), array( 'some_js_id', "function() {alert('script')}", CClientScript::POS_READY, array(), CHtml::script("function() {alert('script')}") ), // With HTML options array( 'option_js_id', "function() {alert('script')}", CClientScript::POS_HEAD, array('defer'=>true), CHtml::script("function() {alert('script')}",array('defer'=>true)) ), array( 'option_js_id', "function() {alert('script')}", CClientScript::POS_BEGIN, array('defer'=>true), CHtml::script("function() {alert('script')}",array('defer'=>true)) ), array( 'option_js_id', "function() {alert('script')}", CClientScript::POS_END, array('defer'=>true), CHtml::script("function() {alert('script')}",array('defer'=>true)) ), ); } /** * @depends testRegisterScript * * @dataProvider providerRenderScripts * * @param string $id * @param string $script * @param integer $position * @param array $htmlOptions * @param string $assertion */ public function testRenderScripts($id, $script, $position, $htmlOptions, $assertion) { $returnedClientScript = $this->_clientScript->registerScript($id, $script, $position, $htmlOptions); $output = ''; $returnedClientScript->render($output); $this->assertContains($assertion, $output); } public function providerRenderScriptsBatch() { return array( array( array( array( 'id' => 'js_id_1', 'script' => "function() {alert('script1')}", 'position' => CClientScript::POS_HEAD, 'htmlOptions' => array(), ), array( 'id' => 'js_id_2', 'script' => "function() {alert('script2')}", 'position' => CClientScript::POS_HEAD, 'htmlOptions' => array(), ), ), 1 ), array( array( array( 'id' => 'js_id_1', 'script' => "function() {alert('script1')}", 'position' => CClientScript::POS_HEAD, 'htmlOptions' => array(), ), array( 'id' => 'js_id_2', 'script' => "function() {alert('script2')}", 'position' => CClientScript::POS_HEAD, 'htmlOptions' => array( 'defer' => true ), ), ), 2 ), ); } /** * @depends testRenderScripts * * @dataProvider providerRenderScriptsBatch * * @param array $scriptBatch * @param integer $expectedScriptTagCount * * @see https://github.com/yiisoft/yii/issues/2770 */ public function testRenderScriptsBatch(array $scriptBatch, $expectedScriptTagCount) { $this->_clientScript->reset(); foreach($scriptBatch as $scriptParams) $this->_clientScript->registerScript($scriptParams['id'], $scriptParams['script'], $scriptParams['position'], $scriptParams['htmlOptions']); $output = ''; $this->_clientScript->render($output); $this->assertEquals($expectedScriptTagCount, substr_count($output, '