PageRenderTime 29ms CodeModel.GetById 21ms RepoModel.GetById 1ms app.codeStats 0ms

/tests/unit/Assets/Manager/OutputJsCest.php

http://github.com/phalcon/cphalcon
PHP | 382 lines | 237 code | 75 blank | 70 comment | 0 complexity | a60d024f60b89cc688bb5993e2ae583f MD5 | raw file
Possible License(s): BSD-3-Clause
  1. <?php
  2. /**
  3. * This file is part of the Phalcon Framework.
  4. *
  5. * (c) Phalcon Team <team@phalcon.io>
  6. *
  7. * For the full copyright and license information, please view the LICENSE.txt
  8. * file that was distributed with this source code.
  9. */
  10. declare(strict_types=1);
  11. namespace Phalcon\Test\Unit\Assets\Manager;
  12. use Phalcon\Assets\Asset\Js;
  13. use Phalcon\Assets\Filters\Jsmin;
  14. use Phalcon\Assets\Filters\None;
  15. use Phalcon\Assets\Manager;
  16. use Phalcon\Test\Fixtures\Assets\CustomTag;
  17. use Phalcon\Test\Fixtures\Traits\DiTrait;
  18. use UnitTester;
  19. use function dataDir;
  20. use function ob_get_clean;
  21. use function ob_start;
  22. use function outputDir;
  23. use function sprintf;
  24. use function uniqid;
  25. use const PHP_EOL;
  26. class OutputJsCest
  27. {
  28. use DiTrait;
  29. public function _before(UnitTester $I)
  30. {
  31. $this->newDi();
  32. $this->setDiService('escaper');
  33. $this->setDiService('url');
  34. }
  35. public function _after(UnitTester $I)
  36. {
  37. $this->resetDi();
  38. }
  39. /**
  40. * Tests Phalcon\Assets\Manager :: outputJs() - implicit
  41. *
  42. * @author Phalcon Team <team@phalcon.io>
  43. * @since 2014-10-13
  44. */
  45. public function assetsManagerOutputJsImplicit(UnitTester $I)
  46. {
  47. $I->wantToTest('Assets\Manager - outputJs() - implicit');
  48. $assets = new Manager();
  49. $assets->addJs('js/script1.js');
  50. $assets->addJs('js/script2.js');
  51. $assets->addAsset(
  52. new Js('/js/script3.js', false)
  53. );
  54. $assets->useImplicitOutput(false);
  55. $expected = '<script src="/js/script1.js"></script>' . PHP_EOL
  56. . '<script src="/js/script2.js"></script>' . PHP_EOL
  57. . '<script src="/js/script3.js"></script>' . PHP_EOL;
  58. $I->assertEquals(
  59. $expected,
  60. $actual = $assets->outputJs()
  61. );
  62. }
  63. /**
  64. * Tests Phalcon\Assets\Manager :: outputJs() - not implicit
  65. *
  66. * @author Phalcon Team <team@phalcon.io>
  67. * @since 2014-10-13
  68. */
  69. public function assetsManagerOutputJsNotImplicit(UnitTester $I)
  70. {
  71. $I->wantToTest('Assets\Manager - outputJs() - not implicit');
  72. $assets = new Manager();
  73. $assets->addJs('js/script1.js');
  74. $assets->addJs('js/script2.js');
  75. $assets->addAsset(
  76. new Js(
  77. '/js/script3.js',
  78. false
  79. )
  80. );
  81. $expected = '<script src="/js/script1.js"></script>' . PHP_EOL .
  82. '<script src="/js/script2.js"></script>' . PHP_EOL .
  83. '<script src="/js/script3.js"></script>' . PHP_EOL;
  84. ob_start();
  85. $assets->outputJs();
  86. $actual = ob_get_clean();
  87. $I->assertEquals($expected, $actual);
  88. }
  89. /**
  90. * Tests Phalcon\Assets\Manager :: outputJs - custom tag component
  91. *
  92. * @author Phalcon Team <team@phalcon.io>
  93. * @since 2014-10-13
  94. */
  95. public function assetsManagerOutputJsCustomTag(UnitTester $I)
  96. {
  97. $I->wantToTest('Asset/Manager - outputJs() - custom tag component');
  98. $di = $this->getDi();
  99. $di->setShared(
  100. 'tag',
  101. CustomTag::class
  102. );
  103. $assets = new Manager();
  104. $assets->setDI($di);
  105. $assets->addJs('js/script1.js');
  106. $assets->addJs('/js/script2.js');
  107. $assets->addAsset(
  108. new Js('/js/script3.js')
  109. );
  110. $expected = '<script src="js/script1.js" type="application/javascript"></script>' . PHP_EOL
  111. . '<script src="/js/script2.js" type="application/javascript"></script>' . PHP_EOL
  112. . '<script src="/js/script3.js" type="application/javascript"></script>' . PHP_EOL;
  113. ob_start();
  114. $assets->outputJs();
  115. $actual = ob_get_clean();
  116. $I->assertEquals($expected, $actual);
  117. }
  118. /**
  119. * Tests Phalcon\Assets\Manager :: outputJs - basic
  120. *
  121. * @author Phalcon Team <team@phalcon.io>
  122. * @since 2014-10-13
  123. */
  124. public function assetsManagerOutputJsBasic(UnitTester $I)
  125. {
  126. $I->wantToTest('Asset/Manager - outputJs() - basic');
  127. $assets = new Manager();
  128. $assets->useImplicitOutput(false);
  129. $assets->collection('js')
  130. ->addJs(dataDir('assets/assets/jquery.js'), false, false)
  131. ->setTargetPath(outputDir('tests/assets/combined.js'))
  132. ->setTargetUri('production/combined.js')
  133. ;
  134. $expected = sprintf(
  135. '<script src="%s"></script>%s',
  136. dataDir('assets/assets/jquery.js'),
  137. PHP_EOL
  138. );
  139. $I->assertEquals(
  140. $expected,
  141. $assets->outputJs('js')
  142. );
  143. }
  144. /**
  145. * Tests Phalcon\Assets\Manager :: outputJs - enabled join
  146. *
  147. * @author Phalcon Team <team@phalcon.io>
  148. * @since 2014-10-13
  149. */
  150. public function assetsManagerOutputJsEnabledJoin(UnitTester $I)
  151. {
  152. $I->wantToTest('Asset/Manager - outputJs() - enabled join');
  153. /**
  154. * Tests output with enabled join
  155. *
  156. * @author Phalcon Team <team@phalcon.io>
  157. * @since 2016-01-24
  158. */
  159. $assets = new Manager();
  160. $assets->useImplicitOutput(false);
  161. $assets->collection('js')
  162. ->addJs(dataDir('assets/assets/jquery.js'), false, false)
  163. ->setTargetPath(outputDir('tests/assets/combined.js'))
  164. ->setTargetUri('production/combined.js')
  165. ->join(true)
  166. ;
  167. $expected = sprintf(
  168. '<script src="%s"></script>%s',
  169. dataDir('assets/assets/jquery.js'),
  170. PHP_EOL
  171. );
  172. $I->assertEquals(
  173. $expected,
  174. $assets->outputJs('js')
  175. );
  176. }
  177. /**
  178. * Tests Phalcon\Assets\Manager :: outputJs - disabled join
  179. *
  180. * @author Phalcon Team <team@phalcon.io>
  181. * @since 2014-10-13
  182. */
  183. public function assetsManagerOutputJsDisabledJoin(UnitTester $I)
  184. {
  185. $I->wantToTest('Asset/Manager - outputJs() - disabled join');
  186. $assets = new Manager();
  187. $assets->useImplicitOutput(false);
  188. $assets->collection('js')
  189. ->addJs(dataDir('assets/assets/jquery.js'), false, false)
  190. ->setTargetPath(outputDir('assets/combined.js'))
  191. ->setTargetUri('production/combined.js')
  192. ->join(false)
  193. ;
  194. $expected = sprintf(
  195. '<script src="%s"></script>%s',
  196. dataDir('assets/assets/jquery.js'),
  197. PHP_EOL
  198. );
  199. $I->assertEquals(
  200. $expected,
  201. $assets->outputJs('js')
  202. );
  203. }
  204. /**
  205. * Tests Phalcon\Assets\Manager :: outputJs - join and filter
  206. *
  207. * @author Phalcon Team <team@phalcon.io>
  208. * @since 2014-10-13
  209. */
  210. public function assetsManagerOutputJsJoinAndFilter(UnitTester $I)
  211. {
  212. $I->wantToTest('Asset/Manager - outputJs() - join and filter');
  213. $assets = new Manager();
  214. $jsFile = dataDir('assets/assets/jquery.js');
  215. $assets->useImplicitOutput(false);
  216. $assets->collection('js')
  217. ->addJs($jsFile, false, false)
  218. ->setTargetPath(outputDir('assets/combined.js'))
  219. ->setTargetUri('production/combined.js')
  220. ->join(false)
  221. ->addFilter(new None())
  222. ;
  223. $expected = sprintf(
  224. '<script src="%s"></script>%s',
  225. dataDir('assets/assets/jquery.js'),
  226. PHP_EOL
  227. );
  228. $I->assertEquals(
  229. $expected,
  230. $assets->outputJs('js')
  231. );
  232. }
  233. /**
  234. * Tests Phalcon\Assets\Manager :: outputJs - mixed resources
  235. *
  236. * @author Paul Scarrone <paul@savvysoftworks.com>
  237. * @since 2017-06-20
  238. */
  239. public function assetsManagerOutputJsMixedResources(UnitTester $I)
  240. {
  241. $I->wantToTest('Asset/Manager - outputJs() - mixed resources');
  242. $assets = new Manager();
  243. $assets
  244. ->collection('header')
  245. ->setPrefix('http:://cdn.example.com/')
  246. ->setLocal(false)
  247. ->addJs('js/script1.js')
  248. ->addJs('js/script2.js')
  249. ->addCss('css/styles1.css')
  250. ->addCss('css/styles2.css')
  251. ;
  252. $assets->useImplicitOutput(false);
  253. $expectedJS = sprintf(
  254. "%s" . PHP_EOL . "%s" . PHP_EOL,
  255. '<script src="http:://cdn.example.com/js/script1.js"></script>',
  256. '<script src="http:://cdn.example.com/js/script2.js"></script>'
  257. );
  258. $I->assertEquals(
  259. $expectedJS,
  260. $assets->outputJs('header')
  261. );
  262. $expectedCSS = sprintf(
  263. "%s" . PHP_EOL . "%s" . PHP_EOL,
  264. '<link rel="stylesheet" type="text/css" href="http:://cdn.example.com/css/styles1.css" />',
  265. '<link rel="stylesheet" type="text/css" href="http:://cdn.example.com/css/styles2.css" />'
  266. );
  267. $I->assertEquals(
  268. $expectedCSS,
  269. $assets->outputCss('header')
  270. );
  271. }
  272. /**
  273. * Tests Phalcon\Assets\Manager :: outputJs - target local
  274. *
  275. * @issue https://github.com/phalcon/cphalcon/issues/1532
  276. * @author Phalcon Team <team@phalcon.io>
  277. * @author Dreamszhu <dreamsxin@qq.com>
  278. * @since 2013-10-25
  279. */
  280. public function assetsManagerOutputJsTargetLocal(UnitTester $I)
  281. {
  282. $I->wantToTest('Asset/Manager - outputJs() - target local');
  283. $file = uniqid() . '.js';
  284. $assets = new Manager();
  285. $jsFile = dataDir('assets/assets/jquery.js');
  286. $assets->useImplicitOutput(false);
  287. $assets->collection('js')
  288. ->addJs($jsFile)
  289. ->join(true)
  290. ->addFilter(new Jsmin())
  291. ->setTargetPath(outputDir("tests/assets/{$file}"))
  292. ->setTargetLocal(false)
  293. ->setPrefix('//phalcon.io/')
  294. ->setTargetUri('js/jquery.js')
  295. ;
  296. $I->assertEquals(
  297. '<script src="//phalcon.io/js/jquery.js"></script>' . PHP_EOL,
  298. $assets->outputJs('js')
  299. );
  300. $I->seeFileFound(
  301. outputDir("tests/assets/{$file}")
  302. );
  303. $I->safeDeleteFile(
  304. outputDir("tests/assets/{$file}")
  305. );
  306. }
  307. }