| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 | 
							- <?php
 - 
 - /*
 -  * This file is part of Twig.
 -  *
 -  * (c) Fabien Potencier
 -  *
 -  * For the full copyright and license information, please view the LICENSE
 -  * file that was distributed with this source code.
 -  */
 - 
 - class Twig_Tests_IntegrationTest extends PHPUnit_Framework_TestCase
 - {
 -     public function getTests()
 -     {
 -         $fixturesDir = realpath(dirname(__FILE__).'/Fixtures/');
 -         $tests = array();
 - 
 -         foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($fixturesDir), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
 -             if (!preg_match('/\.test$/', $file)) {
 -                 continue;
 -             }
 - 
 -             $test = file_get_contents($file->getRealpath());
 - 
 -             if (preg_match('/--TEST--\s*(.*?)\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*))+)\s*--EXCEPTION--\s*(.*)/s', $test, $match)) {
 -                 $message = $match[1];
 -                 $exception = $match[3];
 -                 $templates = $this->parseTemplates($match[2]);
 -                 $outputs = array();
 -             } elseif (preg_match('/--TEST--\s*(.*?)\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) {
 -                 $message = $match[1];
 -                 $exception = false;
 -                 $templates = $this->parseTemplates($match[2]);
 -                 preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, PREG_SET_ORDER);
 -             } else {
 -                 throw new InvalidArgumentException(sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file)));
 -             }
 - 
 -             $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $templates, $exception, $outputs);
 -         }
 - 
 -         return $tests;
 -     }
 - 
 -     /**
 -      * @dataProvider getTests
 -      */
 -     public function testIntegration($file, $message, $templates, $exception, $outputs)
 -     {
 -         $loader = new Twig_Loader_Array($templates);
 - 
 -         foreach ($outputs as $match) {
 -             $config = array_merge(array(
 -                 'cache' => false,
 -                 'strict_variables' => true,
 -             ), $match[2] ? eval($match[2].';') : array());
 -             $twig = new Twig_Environment($loader, $config);
 -             $twig->addExtension(new Twig_Extension_Escaper());
 -             $twig->addExtension(new TestExtension());
 - 
 -             try {
 -                 $template = $twig->loadTemplate('index.twig');
 -             } catch (Exception $e) {
 -                 if (false !== $exception) {
 -                     $this->assertEquals(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage())));
 - 
 -                     return;
 -                 }
 - 
 -                 if ($e instanceof Twig_Error_Syntax) {
 -                     $e->setTemplateFile($file);
 - 
 -                     throw $e;
 -                 }
 - 
 -                 throw new Twig_Error($e->getMessage().' (in '.$file.')');
 -             }
 - 
 -             try {
 -                 $output = trim($template->render(eval($match[1].';')), "\n ");
 -             } catch (Exception $e) {
 -                 $output = trim(sprintf('%s: %s', get_class($e), $e->getMessage()));
 -             }
 -             $expected = trim($match[3], "\n ");
 - 
 -             if ($expected != $output)  {
 -                 echo 'Compiled template that failed:';
 - 
 -                 foreach (array_keys($templates) as $name)  {
 -                     echo "Template: $name\n";
 -                     $source = $loader->getSource($name);
 -                     echo $twig->compile($twig->parse($twig->tokenize($source, $name)));
 -                 }
 -             }
 -             $this->assertEquals($expected, $output, $message.' (in '.$file.')');
 -         }
 -     }
 - 
 -     protected function parseTemplates($test)
 -     {
 -         $templates = array();
 -         preg_match_all('/--TEMPLATE(?:\((.*?)\))?--(.*?)(?=\-\-TEMPLATE|$)/s', $test, $matches, PREG_SET_ORDER);
 -         foreach ($matches as $match) {
 -             $templates[($match[1] ? $match[1] : 'index.twig')] = $match[2];
 -         }
 - 
 -         return $templates;
 -     }
 - }
 - 
 - function test_foo($value = 'foo')
 - {
 -     return $value;
 - }
 - 
 - class Foo
 - {
 -     const BAR_NAME = 'bar';
 - 
 -     public function bar($param1 = null, $param2 = null)
 -     {
 -         return 'bar'.($param1 ? '_'.$param1 : '').($param2 ? '-'.$param2 : '');
 -     }
 - 
 -     public function getFoo()
 -     {
 -         return 'foo';
 -     }
 - 
 -     public function getSelf()
 -     {
 -         return $this;
 -     }
 - 
 -     public function is()
 -     {
 -         return 'is';
 -     }
 - 
 -     public function in()
 -     {
 -         return 'in';
 -     }
 - 
 -     public function not()
 -     {
 -         return 'not';
 -     }
 - 
 -     public function strToLower($value)
 -     {
 -         return strtolower($value);
 -     }
 - }
 - 
 - class TestTokenParser_☃ extends Twig_TokenParser
 - {
 -     public function parse(Twig_Token $token)
 -     {
 -         $this->parser->getStream()->expect(Twig_Token::BLOCK_END_TYPE);
 - 
 -         return new Twig_Node_Print(new Twig_Node_Expression_Constant('☃', -1), -1);
 -     }
 - 
 -     public function getTag()
 -     {
 -         return '☃';
 -     }
 - }
 - 
 - class TestExtension extends Twig_Extension
 - {
 -     public function getTokenParsers()
 -     {
 -         return array(
 -             new TestTokenParser_☃(),
 -         );
 -     }
 - 
 -     public function getFilters()
 -     {
 -         return array(
 -             '☃' => new Twig_Filter_Method($this, '☃Filter'),
 -             'escape_and_nl2br' => new Twig_Filter_Method($this, 'escape_and_nl2br', array('needs_environment' => true, 'is_safe' => array('html'))),
 -             'nl2br' => new Twig_Filter_Method($this, 'nl2br', array('pre_escape' => 'html', 'is_safe' => array('html'))),
 -             'escape_something' => new Twig_Filter_Method($this, 'escape_something', array('is_safe' => array('something'))),
 -         );
 -     }
 - 
 -     public function getFunctions()
 -     {
 -         return array(
 -             '☃' => new Twig_Function_Method($this, '☃Function'),
 -             'safe_br' => new Twig_Function_Method($this, 'br', array('is_safe' => array('html'))),
 -             'unsafe_br' => new Twig_Function_Method($this, 'br'),
 -         );
 -     }
 - 
 -     public function ☃Filter($value)
 -     {
 -         return "☃{$value}☃";
 -     }
 - 
 -     public function ☃Function($value)
 -     {
 -         return "☃{$value}☃";
 -     }
 - 
 -     /**
 -      * nl2br which also escapes, for testing escaper filters
 -      */
 -     public function escape_and_nl2br($env, $value, $sep = '<br />')
 -     {
 -         return $this->nl2br(twig_escape_filter($env, $value, 'html'), $sep);
 -     }
 - 
 -     /**
 -      * nl2br only, for testing filters with pre_escape
 -      */
 -     public function nl2br($value, $sep = '<br />')
 -     {
 -         // not secure if $value contains html tags (not only entities)
 -         // don't use
 -         return str_replace("\n", "$sep\n", $value);
 -     }
 - 
 -     public function escape_something($value)
 -     {
 -         return strtoupper($value);
 -     }
 - 
 -     public function br()
 -     {
 -         return '<br />';
 -     }
 - 
 -     public function getName()
 -     {
 -         return 'test';
 -     }
 - }
 
 
  |