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
Carsten Brandt
11 years ago
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