mirror of
https://github.com/yiisoft/yii2.git
synced 2025-11-13 12:49:04 +08:00
more asset bundle tests and docs
This commit is contained in:
@@ -542,6 +542,24 @@ class View extends Component
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers all files provided by an asset bundle including depending bundles files.
|
||||
* Removes a bundle from [[assetBundles]] once registered.
|
||||
* @param string $name name of the bundle to register
|
||||
*/
|
||||
private function registerAssetFiles($name)
|
||||
{
|
||||
if (!isset($this->assetBundles[$name])) {
|
||||
return;
|
||||
}
|
||||
$bundle = $this->assetBundles[$name];
|
||||
foreach($bundle->depends as $dep) {
|
||||
$this->registerAssetFiles($dep);
|
||||
}
|
||||
$bundle->registerAssets($this);
|
||||
unset($this->assetBundles[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Marks the beginning of an HTML body section.
|
||||
*/
|
||||
@@ -568,25 +586,14 @@ class View extends Component
|
||||
echo self::PH_HEAD;
|
||||
}
|
||||
|
||||
protected function registerAssetFiles($name)
|
||||
{
|
||||
if (!isset($this->assetBundles[$name])) {
|
||||
return;
|
||||
}
|
||||
$bundle = $this->assetBundles[$name];
|
||||
foreach($bundle->depends as $depName) {
|
||||
$this->registerAssetFiles($depName);
|
||||
}
|
||||
$bundle->registerAssets($this);
|
||||
unset($this->assetBundles[$name]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Registers the named asset bundle.
|
||||
* All dependent asset bundles will be registered.
|
||||
* @param string $name the name of the asset bundle.
|
||||
* @param integer|null $position optional parameter to force a minimum Javascript position TODO link to relevant method
|
||||
* Null means to register on default position.
|
||||
* @param integer|null $position if set, this forces a minimum position for javascript files.
|
||||
* This will adjust depending assets javascript file position or fail if requirement can not be met.
|
||||
* If this is null, asset bundles position settings will not be changed.
|
||||
* See [[registerJsFile]] for more details on javascript position.
|
||||
* @return AssetBundle the registered asset bundle instance
|
||||
* @throws InvalidConfigException if the asset bundle does not exist or a circular dependency is detected
|
||||
*/
|
||||
|
||||
@@ -42,10 +42,10 @@ class AssetBundleTest extends \yiiunit\TestCase
|
||||
$view = $this->getView();
|
||||
|
||||
$this->assertEmpty($view->assetBundles);
|
||||
TestJqueryAsset::register($view);
|
||||
TestSimpleAsset::register($view);
|
||||
$this->assertEquals(1, count($view->assetBundles));
|
||||
$this->assertArrayHasKey('yiiunit\\framework\\web\\TestJqueryAsset', $view->assetBundles);
|
||||
$this->assertTrue($view->assetBundles['yiiunit\\framework\\web\\TestJqueryAsset'] instanceof AssetBundle);
|
||||
$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>
|
||||
@@ -60,11 +60,13 @@ EOF;
|
||||
|
||||
$this->assertEmpty($view->assetBundles);
|
||||
TestAssetBundle::register($view);
|
||||
$this->assertEquals(2, count($view->assetBundles));
|
||||
$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">
|
||||
@@ -105,17 +107,21 @@ EOF;
|
||||
TestJqueryAsset::register($view);
|
||||
}
|
||||
TestAssetBundle::register($view);
|
||||
$this->assertEquals(2, count($view->assetBundles));
|
||||
$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)
|
||||
{
|
||||
@@ -183,6 +189,21 @@ EOF;
|
||||
$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
|
||||
@@ -207,4 +228,37 @@ class TestJqueryAsset extends AssetBundle
|
||||
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'
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user