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);
 }