/tests/framework/web/AssetBundleTest.php
https://gitlab.com/brucealdridge/yii2 · PHP · 273 lines · 225 code · 33 blank · 15 comment · 3 complexity · cef8a5452119ddd0982eb1c6686cf6f4 MD5 · raw file
- <?php
- /**
- *
- *
- * @author Carsten Brandt <mail@cebe.cc>
- */
- namespace yiiunit\framework\web;
- use Yii;
- use yii\web\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([
- '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->assertEqualsWithoutLE($expected, $view->renderFile('@yiiunit/data/views/rawlayout.php'));
- }
- public function positionProvider()
- {
- return [
- [View::POS_HEAD, true],
- [View::POS_HEAD, false],
- [View::POS_BEGIN, true],
- [View::POS_BEGIN, false],
- [View::POS_END, true],
- [View::POS_END, false],
- ];
- }
- /**
- * @dataProvider positionProvider
- */
- public function testPositionDependency($pos, $jqAlreadyRegistered)
- {
- $view = $this->getView();
- $view->getAssetManager()->bundles['yiiunit\\framework\\web\\TestAssetBundle'] = [
- 'jsOptions' => [
- '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->assertEqualsWithoutLE($expected, $view->renderFile('@yiiunit/data/views/rawlayout.php'));
- }
- public function positionProvider2()
- {
- return [
- [View::POS_BEGIN, true],
- [View::POS_BEGIN, false],
- [View::POS_END, true],
- [View::POS_END, false],
- ];
- }
- /**
- * @dataProvider positionProvider
- */
- public function testPositionDependencyConflict($pos, $jqAlreadyRegistered)
- {
- $view = $this->getView();
- $view->getAssetManager()->bundles['yiiunit\\framework\\web\\TestAssetBundle'] = [
- 'jsOptions' => [
- 'position' => $pos - 1,
- ],
- ];
- $view->getAssetManager()->bundles['yiiunit\\framework\\web\\TestJqueryAsset'] = [
- 'jsOptions' => [
- '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());
- }
- public function testDuplicateAssetFile()
- {
- $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);
- // register TestJqueryAsset which also has the jquery.js
- TestJqueryAsset::register($view);
- $expected = <<<EOF
- 123<script src="/js/jquery.js"></script>4
- EOF;
- $this->assertEquals($expected, $view->renderFile('@yiiunit/data/views/rawlayout.php'));
- }
- }
- class TestSimpleAsset extends AssetBundle
- {
- public $basePath = '@testWebRoot/js';
- public $baseUrl = '@testWeb/js';
- public $js = [
- 'jquery.js',
- ];
- }
- class TestAssetBundle extends AssetBundle
- {
- public $basePath = '@testWebRoot/files';
- public $baseUrl = '@testWeb/files';
- public $css = [
- 'cssFile.css',
- ];
- public $js = [
- 'jsFile.js',
- ];
- public $depends = [
- 'yiiunit\\framework\\web\\TestJqueryAsset'
- ];
- }
- class TestJqueryAsset extends AssetBundle
- {
- public $basePath = '@testWebRoot/js';
- public $baseUrl = '@testWeb/js';
- public $js = [
- 'jquery.js',
- ];
- public $depends = [
- '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 = [
- 'jquery.js',
- ];
- public $depends = [
- 'yiiunit\\framework\\web\\TestAssetCircleB'
- ];
- }
- class TestAssetCircleB extends AssetBundle
- {
- public $basePath = '@testWebRoot/js';
- public $baseUrl = '@testWeb/js';
- public $js = [
- 'jquery.js',
- ];
- public $depends = [
- 'yiiunit\\framework\\web\\TestAssetCircleA'
- ];
- }