Browse Source
			
			
			
			
				
		* 'master' of github.com:yiisoft/yii2: added comment better error message more asset bundle tests and docs fix issue #700 doc fix added unit test for asset bundlestags/2.0.0-beta
				 7 changed files with 344 additions and 12 deletions
			
			
		| @ -0,0 +1,22 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @var $this \yii\base\View | ||||
|  * @var $content string | ||||
|  */ | ||||
| ?> | ||||
| <?php $this->beginPage(); ?> | ||||
| <!DOCTYPE html> | ||||
| <html> | ||||
| <head> | ||||
| 	<title>Test</title> | ||||
| 	<?php $this->head(); ?> | ||||
| </head> | ||||
| <body> | ||||
| <?php $this->beginBody(); ?> | ||||
| 
 | ||||
| <?php echo $content; ?> | ||||
| 
 | ||||
| <?php $this->endBody(); ?> | ||||
| </body> | ||||
| </html> | ||||
| <?php $this->endPage(); ?> | ||||
| @ -0,0 +1,5 @@ | ||||
| <?php | ||||
| /** | ||||
|  * @var $this \yii\base\View | ||||
|  */ | ||||
| ?><?php $this->beginPage(); ?>1<?php $this->head(); ?>2<?php $this->beginBody(); ?>3<?php $this->endBody(); ?>4<?php $this->endPage(); ?> | ||||
| @ -0,0 +1,264 @@ | ||||
| <?php | ||||
| /** | ||||
|  *  | ||||
|  *  | ||||
|  * @author Carsten Brandt <mail@cebe.cc> | ||||
|  */ | ||||
| 
 | ||||
| namespace yiiunit\framework\web; | ||||
| 
 | ||||
| use Yii; | ||||
| use yii\base\View; | ||||
| use yii\web\AssetBundle; | ||||
| use yii\web\AssetManager; | ||||
| 
 | ||||
| /** | ||||
|  * @group web | ||||
|  */ | ||||
| class AssetBundleTest extends \yiiunit\TestCase | ||||
| { | ||||
| 	protected function setUp() | ||||
| 	{ | ||||
| 		parent::setUp(); | ||||
| 		$this->mockApplication(); | ||||
| 
 | ||||
| 		Yii::setAlias('@testWeb', '/'); | ||||
| 		Yii::setAlias('@testWebRoot', '@yiiunit/data/web'); | ||||
| 	} | ||||
| 
 | ||||
| 	protected function getView() | ||||
| 	{ | ||||
| 		$view = new View(); | ||||
| 		$view->setAssetManager(new AssetManager(array( | ||||
| 			'basePath' => '@testWebRoot/assets', | ||||
| 			'baseUrl' => '@testWeb/assets', | ||||
| 		))); | ||||
| 
 | ||||
| 		return $view; | ||||
| 	} | ||||
| 
 | ||||
| 	public function testRegister() | ||||
| 	{ | ||||
| 		$view = $this->getView(); | ||||
| 
 | ||||
| 		$this->assertEmpty($view->assetBundles); | ||||
| 		TestSimpleAsset::register($view); | ||||
| 		$this->assertEquals(1, count($view->assetBundles)); | ||||
| 		$this->assertArrayHasKey('yiiunit\\framework\\web\\TestSimpleAsset', $view->assetBundles); | ||||
| 		$this->assertTrue($view->assetBundles['yiiunit\\framework\\web\\TestSimpleAsset'] instanceof AssetBundle); | ||||
| 
 | ||||
| 		$expected = <<<EOF | ||||
| 123<script src="/js/jquery.js"></script> | ||||
| 4 | ||||
| EOF; | ||||
| 		$this->assertEquals($expected, $view->renderFile('@yiiunit/data/views/rawlayout.php')); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testSimpleDependency() | ||||
| 	{ | ||||
| 		$view = $this->getView(); | ||||
| 
 | ||||
| 		$this->assertEmpty($view->assetBundles); | ||||
| 		TestAssetBundle::register($view); | ||||
| 		$this->assertEquals(3, count($view->assetBundles)); | ||||
| 		$this->assertArrayHasKey('yiiunit\\framework\\web\\TestAssetBundle', $view->assetBundles); | ||||
| 		$this->assertArrayHasKey('yiiunit\\framework\\web\\TestJqueryAsset', $view->assetBundles); | ||||
| 		$this->assertArrayHasKey('yiiunit\\framework\\web\\TestAssetLevel3', $view->assetBundles); | ||||
| 		$this->assertTrue($view->assetBundles['yiiunit\\framework\\web\\TestAssetBundle'] instanceof AssetBundle); | ||||
| 		$this->assertTrue($view->assetBundles['yiiunit\\framework\\web\\TestJqueryAsset'] instanceof AssetBundle); | ||||
| 		$this->assertTrue($view->assetBundles['yiiunit\\framework\\web\\TestAssetLevel3'] instanceof AssetBundle); | ||||
| 
 | ||||
| 		$expected = <<<EOF | ||||
| 1<link href="/files/cssFile.css" rel="stylesheet"> | ||||
| 23<script src="/js/jquery.js"></script> | ||||
| <script src="/files/jsFile.js"></script> | ||||
| 4 | ||||
| EOF; | ||||
| 		$this->assertEquals($expected, $view->renderFile('@yiiunit/data/views/rawlayout.php')); | ||||
| 	} | ||||
| 
 | ||||
| 	public function positionProvider() | ||||
| 	{ | ||||
| 		return array( | ||||
| 			array(View::POS_HEAD, true), | ||||
| 			array(View::POS_HEAD, false), | ||||
| 			array(View::POS_BEGIN, true), | ||||
| 			array(View::POS_BEGIN, false), | ||||
| 			array(View::POS_END, true), | ||||
| 			array(View::POS_END, false), | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @dataProvider positionProvider | ||||
| 	 */ | ||||
| 	public function testPositionDependency($pos, $jqAlreadyRegistered) | ||||
| 	{ | ||||
| 		$view = $this->getView(); | ||||
| 
 | ||||
| 		$view->getAssetManager()->bundles['yiiunit\\framework\\web\\TestAssetBundle'] = array( | ||||
| 			'jsOptions' => array( | ||||
| 				'position' => $pos, | ||||
| 			), | ||||
| 		); | ||||
| 
 | ||||
| 		$this->assertEmpty($view->assetBundles); | ||||
| 		if ($jqAlreadyRegistered) { | ||||
| 			TestJqueryAsset::register($view); | ||||
| 		} | ||||
| 		TestAssetBundle::register($view); | ||||
| 		$this->assertEquals(3, count($view->assetBundles)); | ||||
| 		$this->assertArrayHasKey('yiiunit\\framework\\web\\TestAssetBundle', $view->assetBundles); | ||||
| 		$this->assertArrayHasKey('yiiunit\\framework\\web\\TestJqueryAsset', $view->assetBundles); | ||||
| 		$this->assertArrayHasKey('yiiunit\\framework\\web\\TestAssetLevel3', $view->assetBundles); | ||||
| 
 | ||||
| 		$this->assertTrue($view->assetBundles['yiiunit\\framework\\web\\TestAssetBundle'] instanceof AssetBundle); | ||||
| 		$this->assertTrue($view->assetBundles['yiiunit\\framework\\web\\TestJqueryAsset'] instanceof AssetBundle); | ||||
| 		$this->assertTrue($view->assetBundles['yiiunit\\framework\\web\\TestAssetLevel3'] instanceof AssetBundle); | ||||
| 
 | ||||
| 		$this->assertArrayHasKey('position', $view->assetBundles['yiiunit\\framework\\web\\TestAssetBundle']->jsOptions); | ||||
| 		$this->assertEquals($pos, $view->assetBundles['yiiunit\\framework\\web\\TestAssetBundle']->jsOptions['position']); | ||||
| 		$this->assertArrayHasKey('position', $view->assetBundles['yiiunit\\framework\\web\\TestJqueryAsset']->jsOptions); | ||||
| 		$this->assertEquals($pos, $view->assetBundles['yiiunit\\framework\\web\\TestJqueryAsset']->jsOptions['position']); | ||||
| 		$this->assertArrayHasKey('position', $view->assetBundles['yiiunit\\framework\\web\\TestAssetLevel3']->jsOptions); | ||||
| 		$this->assertEquals($pos, $view->assetBundles['yiiunit\\framework\\web\\TestAssetLevel3']->jsOptions['position']); | ||||
| 
 | ||||
| 		switch($pos) | ||||
| 		{ | ||||
| 			case View::POS_HEAD: | ||||
| 				$expected = <<<EOF | ||||
| 1<link href="/files/cssFile.css" rel="stylesheet"> | ||||
| <script src="/js/jquery.js"></script> | ||||
| <script src="/files/jsFile.js"></script> | ||||
| 234 | ||||
| EOF; | ||||
| 			break; | ||||
| 			case View::POS_BEGIN: | ||||
| 				$expected = <<<EOF | ||||
| 1<link href="/files/cssFile.css" rel="stylesheet"> | ||||
| 2<script src="/js/jquery.js"></script> | ||||
| <script src="/files/jsFile.js"></script> | ||||
| 34 | ||||
| EOF; | ||||
| 			break; | ||||
| 			default: | ||||
| 			case View::POS_END: | ||||
| 				$expected = <<<EOF | ||||
| 1<link href="/files/cssFile.css" rel="stylesheet"> | ||||
| 23<script src="/js/jquery.js"></script> | ||||
| <script src="/files/jsFile.js"></script> | ||||
| 4 | ||||
| EOF; | ||||
| 			break; | ||||
| 		} | ||||
| 		$this->assertEquals($expected, $view->renderFile('@yiiunit/data/views/rawlayout.php')); | ||||
| 	} | ||||
| 
 | ||||
| 	public function positionProvider2() | ||||
| 	{ | ||||
| 		return array( | ||||
| 			array(View::POS_BEGIN, true), | ||||
| 			array(View::POS_BEGIN, false), | ||||
| 			array(View::POS_END, true), | ||||
| 			array(View::POS_END, false), | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * @dataProvider positionProvider | ||||
| 	 */ | ||||
| 	public function testPositionDependencyConflict($pos, $jqAlreadyRegistered) | ||||
| 	{ | ||||
| 		$view = $this->getView(); | ||||
| 
 | ||||
| 		$view->getAssetManager()->bundles['yiiunit\\framework\\web\\TestAssetBundle'] = array( | ||||
| 			'jsOptions' => array( | ||||
| 				'position' => $pos - 1, | ||||
| 			), | ||||
| 		); | ||||
| 		$view->getAssetManager()->bundles['yiiunit\\framework\\web\\TestJqueryAsset'] = array( | ||||
| 			'jsOptions' => array( | ||||
| 				'position' => $pos, | ||||
| 			), | ||||
| 		); | ||||
| 
 | ||||
| 		$this->assertEmpty($view->assetBundles); | ||||
| 		if ($jqAlreadyRegistered) { | ||||
| 			TestJqueryAsset::register($view); | ||||
| 		} | ||||
| 		$this->setExpectedException('yii\\base\\InvalidConfigException'); | ||||
| 		TestAssetBundle::register($view); | ||||
| 	} | ||||
| 
 | ||||
| 	public function testCircularDependency() | ||||
| 	{ | ||||
| 		$this->setExpectedException('yii\\base\\InvalidConfigException'); | ||||
| 		TestAssetCircleA::register($this->getView()); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| class TestSimpleAsset extends AssetBundle | ||||
| { | ||||
| 	public $basePath = '@testWebRoot/js'; | ||||
| 	public $baseUrl = '@testWeb/js'; | ||||
| 	public $js = array( | ||||
| 		'jquery.js', | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| class TestAssetBundle extends AssetBundle | ||||
| { | ||||
| 	public $basePath = '@testWebRoot/files'; | ||||
| 	public $baseUrl = '@testWeb/files'; | ||||
| 	public $css = array( | ||||
| 		'cssFile.css', | ||||
| 	); | ||||
| 	public $js = array( | ||||
| 		'jsFile.js', | ||||
| 	); | ||||
| 	public $depends = array( | ||||
| 		'yiiunit\\framework\\web\\TestJqueryAsset' | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| class TestJqueryAsset extends AssetBundle | ||||
| { | ||||
| 	public $basePath = '@testWebRoot/js'; | ||||
| 	public $baseUrl = '@testWeb/js'; | ||||
| 	public $js = array( | ||||
| 		'jquery.js', | ||||
| 	); | ||||
| 	public $depends = array( | ||||
| 		'yiiunit\\framework\\web\\TestAssetLevel3' | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| class TestAssetLevel3 extends AssetBundle | ||||
| { | ||||
| 	public $basePath = '@testWebRoot/js'; | ||||
| 	public $baseUrl = '@testWeb/js'; | ||||
| } | ||||
| 
 | ||||
| class TestAssetCircleA extends AssetBundle | ||||
| { | ||||
| 	public $basePath = '@testWebRoot/js'; | ||||
| 	public $baseUrl = '@testWeb/js'; | ||||
| 	public $js = array( | ||||
| 		'jquery.js', | ||||
| 	); | ||||
| 	public $depends = array( | ||||
| 		'yiiunit\\framework\\web\\TestAssetCircleB' | ||||
| 	); | ||||
| } | ||||
| 
 | ||||
| class TestAssetCircleB extends AssetBundle | ||||
| { | ||||
| 	public $basePath = '@testWebRoot/js'; | ||||
| 	public $baseUrl = '@testWeb/js'; | ||||
| 	public $js = array( | ||||
| 		'jquery.js', | ||||
| 	); | ||||
| 	public $depends = array( | ||||
| 		'yiiunit\\framework\\web\\TestAssetCircleA' | ||||
| 	); | ||||
| } | ||||
					Loading…
					
					
				
		Reference in new issue