Verzeichnisstruktur phpBB-3.1.0


Veröffentlicht
27.10.2014

So funktioniert es


Auf das letzte Element klicken. Dies geht jeweils ein Schritt zurück

Auf das Icon klicken, dies öffnet das Verzeichnis. Nochmal klicken schließt das Verzeichnis.
Auf den Verzeichnisnamen klicken, dies zeigt nur das Verzeichnis mit Inhalt an

(Beispiel Datei-Icons)

Auf das Icon klicken um den Quellcode anzuzeigen

IntegrationTestCase.php

Zuletzt modifiziert: 09.10.2024, 12:58 - Dateigröße: 5.51 KiB


001  <?php
002   
003  /*
004   * This file is part of Twig.
005   *
006   * (c) 2010 Fabien Potencier
007   *
008   * For the full copyright and license information, please view the LICENSE
009   * file that was distributed with this source code.
010   */
011   
012  /**
013   * Integration test helper
014   *
015   * @author Fabien Potencier <fabien@symfony.com>
016   * @author Karma Dordrak <drak@zikula.org>
017   */
018  abstract class Twig_Test_IntegrationTestCase extends PHPUnit_Framework_TestCase
019  {
020      abstract protected function getExtensions();
021      abstract protected function getFixturesDir();
022   
023      /**
024       * @dataProvider getTests
025       */
026      public function testIntegration($file, $message, $condition, $templates, $exception, $outputs)
027      {
028          $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs);
029      }
030   
031      public function getTests()
032      {
033          $fixturesDir = realpath($this->getFixturesDir());
034          $tests = array();
035   
036          foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($fixturesDir), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
037              if (!preg_match('/\.test$/', $file)) {
038                  continue;
039              }
040   
041              $test = file_get_contents($file->getRealpath());
042   
043              if (preg_match('/
044                      --TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)\s*(?:--DATA--\s*(.*))?\s*--EXCEPTION--\s*(.*)/sx', $test, $match)) {
045                  $message = $match[1];
046                  $condition = $match[2];
047                  $templates = $this->parseTemplates($match[3]);
048                  $exception = $match[5];
049                  $outputs = array(array(null, $match[4], null, ''));
050              } elseif (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) {
051                  $message = $match[1];
052                  $condition = $match[2];
053                  $templates = $this->parseTemplates($match[3]);
054                  $exception = false;
055                  preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, PREG_SET_ORDER);
056              } else {
057                  throw new InvalidArgumentException(sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file)));
058              }
059   
060              $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $templates, $exception, $outputs);
061          }
062   
063          return $tests;
064      }
065   
066      protected function doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs)
067      {
068          if ($condition) {
069              eval('$ret = '.$condition.';');
070              if (!$ret) {
071                  $this->markTestSkipped($condition);
072              }
073          }
074   
075          $loader = new Twig_Loader_Array($templates);
076   
077          foreach ($outputs as $match) {
078              $config = array_merge(array(
079                  'cache' => false,
080                  'strict_variables' => true,
081              ), $match[2] ? eval($match[2].';') : array());
082              $twig = new Twig_Environment($loader, $config);
083              $twig->addGlobal('global', 'global');
084              foreach ($this->getExtensions() as $extension) {
085                  $twig->addExtension($extension);
086              }
087   
088              try {
089                  $template = $twig->loadTemplate('index.twig');
090              } catch (Exception $e) {
091                  if (false !== $exception) {
092                      $this->assertEquals(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage())));
093   
094                      return;
095                  }
096   
097                  if ($e instanceof Twig_Error_Syntax) {
098                      $e->setTemplateFile($file);
099   
100                      throw $e;
101                  }
102   
103                  throw new Twig_Error(sprintf('%s: %s', get_class($e), $e->getMessage()), -1, $file, $e);
104              }
105   
106              try {
107                  $output = trim($template->render(eval($match[1].';')), "\n ");
108              } catch (Exception $e) {
109                  if (false !== $exception) {
110                      $this->assertEquals(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage())));
111   
112                      return;
113                  }
114   
115                  if ($e instanceof Twig_Error_Syntax) {
116                      $e->setTemplateFile($file);
117                  } else {
118                      $e = new Twig_Error(sprintf('%s: %s', get_class($e), $e->getMessage()), -1, $file, $e);
119                  }
120   
121                  $output = trim(sprintf('%s: %s', get_class($e), $e->getMessage()));
122              }
123   
124              if (false !== $exception) {
125                  list($class, ) = explode(':', $exception);
126                  $this->assertThat(NULL, new PHPUnit_Framework_Constraint_Exception($class));
127              }
128   
129              $expected = trim($match[3], "\n ");
130   
131              if ($expected != $output) {
132                  echo 'Compiled template that failed:';
133   
134                  foreach (array_keys($templates) as $name) {
135                      echo "Template: $name\n";
136                      $source = $loader->getSource($name);
137                      echo $twig->compile($twig->parse($twig->tokenize($source, $name)));
138                  }
139              }
140              $this->assertEquals($expected, $output, $message.' (in '.$file.')');
141          }
142      }
143   
144      protected static function parseTemplates($test)
145      {
146          $templates = array();
147          preg_match_all('/--TEMPLATE(?:\((.*?)\))?--(.*?)(?=\-\-TEMPLATE|$)/s', $test, $matches, PREG_SET_ORDER);
148          foreach ($matches as $match) {
149              $templates[($match[1] ? $match[1] : 'index.twig')] = $match[2];
150          }
151   
152          return $templates;
153      }
154  }
155