public function testParse() { // fixture token and stream $startToken = new \Twig_Token(\Twig_Token::NAME_TYPE, self::TAG_NAME, 31); $stream = new \Twig_TokenStream(array(new \Twig_Token(\Twig_Token::NAME_TYPE, 'filter', 31), new \Twig_Token(\Twig_Token::OPERATOR_TYPE, '=', 31), new \Twig_Token(\Twig_Token::STRING_TYPE, 'cssrewrite, lessphp, ?cssmin', 31), new \Twig_Token(\Twig_Token::NAME_TYPE, 'debug', 31), new \Twig_Token(\Twig_Token::OPERATOR_TYPE, '=', 31), new \Twig_Token(\Twig_Token::NAME_TYPE, 'false', 31), new \Twig_Token(\Twig_Token::NAME_TYPE, 'combine', 31), new \Twig_Token(\Twig_Token::OPERATOR_TYPE, '=', 31), new \Twig_Token(\Twig_Token::NAME_TYPE, 'false', 31), new \Twig_Token(\Twig_Token::NAME_TYPE, 'output', 31), new \Twig_Token(\Twig_Token::OPERATOR_TYPE, '=', 31), new \Twig_Token(\Twig_Token::STRING_TYPE, 'css/demo.css', 31), new \Twig_Token(\Twig_Token::BLOCK_END_TYPE, '', 31), new \Twig_Token(\Twig_Token::BLOCK_END_TYPE, '', 32), new \Twig_Token(\Twig_Token::BLOCK_START_TYPE, '', 33), new \Twig_Token(\Twig_Token::NAME_TYPE, 'end' . self::TAG_NAME, 33), new \Twig_Token(\Twig_Token::BLOCK_END_TYPE, '', 33), new \Twig_Token(\Twig_Token::EOF_TYPE, '', 31))); $bodyNode = $this->getMockBuilder('\\Twig_Node')->disableOriginalConstructor()->getMock(); /** @var \PHPUnit_Framework_MockObject_MockObject|\Twig_Parser $parser */ $parser = $this->getMockBuilder('Twig_Parser')->disableOriginalConstructor()->getMock(); $parser->expects($this->once())->method('subparse')->will($this->returnValue($bodyNode)); $parser->expects($this->once())->method('getStream')->will($this->returnValue($stream)); $this->assetFactory->expects($this->exactly(2))->method('createAsset')->willReturnCallback(function () { // frontend theme during assets compilation $this->assertEquals(ThemeListener::FRONTEND_THEME, $this->themeRegistry->getActiveTheme()->getName()); return new AssetCollection(); }); $this->assetsConfiguration->expects($this->at(0))->method('getCssFiles')->with(false)->willReturn([]); $this->assetsConfiguration->expects($this->at(1))->method('getCssFiles')->with(true)->willReturn([]); // active theme before parsing $this->assertEquals(self::ACTIVE_THEME, $this->themeRegistry->getActiveTheme()->getName()); $this->parser->setParser($parser); $resultNode = $this->parser->parse($startToken); // active theme after parsing $this->assertEquals(self::ACTIVE_THEME, $this->themeRegistry->getActiveTheme()->getName()); $this->assertEquals(31, $resultNode->getLine()); $nodes = $resultNode->getIterator()->getArrayCopy(); $this->assertCount(2, $nodes); }
/** * @return AssetCollection */ protected function getAsset() { if (!$this->asset) { $inputs = array($this->getBootstrapLessFile()); $filters = array('lessphp'); $options = array('output' => 'css/*.css'); $this->asset = $this->factory->createAsset($inputs, $filters, $options); } return $this->asset; }
/** * Adds support for pipeline assets. * * {@inheritdoc} */ protected function parseInput($input, array $options = array()) { if (is_string($input) && '|' == $input[0]) { switch (pathinfo($options['output'], PATHINFO_EXTENSION)) { case 'js': $type = 'js'; break; case 'css': $type = 'css'; break; default: throw new \RuntimeException('Unsupported pipeline asset type provided: ' . $input); } $assets = new AssetCollection(); foreach ($this->locator->locatePipelinedAssets(substr($input, 1), $type) as $formula) { $filters = array(); if ($formula['filter']) { $filters[] = $this->getFilter($formula['filter']); } $asset = new FileAsset($formula['root'] . '/' . $formula['file'], $filters, $options['root'][0], $formula['file']); $asset->setTargetPath($formula['file']); $assets->add($asset); } return $assets; } return parent::parseInput($input, $options); }
/** * Adds dynamic settings notation support: $<paramName>[;<namespace>[;<scope>]]$. * * {@inheritdoc} */ protected function parseInput($input, array $options = array()) { if ($this->dynamicSettingParser->isDynamicSetting($input)) { $parsedSettings = $this->dynamicSettingParser->parseDynamicSetting($input); $input = $this->configResolver->getParameter($parsedSettings['param'], $parsedSettings['namespace'], $parsedSettings['scope']); if (is_array($input)) { $collection = $this->createAssetCollection(array(), $options); foreach ($input as $file) { $collection->add(parent::parseInput($file, $options)); } return $collection; } } return parent::parseInput($input, $options); }
protected function createAssetReference($name) { // set asset manager parent::createAssetReference($name); return new AssetReference($this->getAssetManager(), $name); }