PEEL Shopping
Open source ecommerce : PEEL Shopping
IntegrationTestCase.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of Twig.
5  *
6  * (c) 2010 Fabien Potencier
7  *
8  * For the full copyright and license information, please view the LICENSE
9  * file that was distributed with this source code.
10  */
11 
18 abstract class Twig_Test_IntegrationTestCase extends PHPUnit_Framework_TestCase
19 {
20  abstract protected function getExtensions();
21  abstract protected function getFixturesDir();
22 
26  public function testIntegration($file, $message, $condition, $templates, $exception, $outputs)
27  {
28  $this->doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs);
29  }
30 
31  public function getTests()
32  {
33  $fixturesDir = realpath($this->getFixturesDir());
34  $tests = array();
35 
36  foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($fixturesDir), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
37  if (!preg_match('/\.test$/', $file)) {
38  continue;
39  }
40 
41  $test = file_get_contents($file->getRealpath());
42 
43  if (preg_match('/
44  --TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)\s*(?:--DATA--\s*(.*))?\s*--EXCEPTION--\s*(.*)/sx', $test, $match)) {
45  $message = $match[1];
46  $condition = $match[2];
47  $templates = $this->parseTemplates($match[3]);
48  $exception = $match[5];
49  $outputs = array(array(null, $match[4], null, ''));
50  } elseif (preg_match('/--TEST--\s*(.*?)\s*(?:--CONDITION--\s*(.*))?\s*((?:--TEMPLATE(?:\(.*?\))?--(?:.*?))+)--DATA--.*?--EXPECT--.*/s', $test, $match)) {
51  $message = $match[1];
52  $condition = $match[2];
53  $templates = $this->parseTemplates($match[3]);
54  $exception = false;
55  preg_match_all('/--DATA--(.*?)(?:--CONFIG--(.*?))?--EXPECT--(.*?)(?=\-\-DATA\-\-|$)/s', $test, $outputs, PREG_SET_ORDER);
56  } else {
57  throw new InvalidArgumentException(sprintf('Test "%s" is not valid.', str_replace($fixturesDir.'/', '', $file)));
58  }
59 
60  $tests[] = array(str_replace($fixturesDir.'/', '', $file), $message, $condition, $templates, $exception, $outputs);
61  }
62 
63  return $tests;
64  }
65 
66  protected function doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs)
67  {
68  if ($condition) {
69  eval('$ret = '.$condition.';');
70  if (!$ret) {
71  $this->markTestSkipped($condition);
72  }
73  }
74 
75  $loader = new Twig_Loader_Array($templates);
76 
77  foreach ($outputs as $match) {
78  $config = array_merge(array(
79  'cache' => false,
80  'strict_variables' => true,
81  ), $match[2] ? eval($match[2].';') : array());
82  $twig = new Twig_Environment($loader, $config);
83  $twig->addGlobal('global', 'global');
84  foreach ($this->getExtensions() as $extension) {
85  $twig->addExtension($extension);
86  }
87 
88  try {
89  $template = $twig->loadTemplate('index.twig');
90  } catch (Exception $e) {
91  if (false !== $exception) {
92  $this->assertEquals(trim($exception), trim(sprintf('%s: %s', get_class($e), $e->getMessage())));
93 
94  return;
95  }
96 
97  if ($e instanceof Twig_Error_Syntax) {
98  $e->setTemplateFile($file);
99 
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 }
Loads a template from an array.
Definition: Array.php:22
doIntegrationTest($file, $message, $condition, $templates, $exception, $outputs)
if($rub=fetch_assoc($rub_query)) if(check_if_module_active('url_rewriting')) $class
Definition: index.php:68
$extension
Twig base exception.
Definition: Error.php:34
Exception thrown when a syntax error occurs during lexing or parsing of a template.
Definition: Syntax.php:18
if(strlen($date2)== '10') if($type== 'users-by-age'&&a_priv('admin_users', true)) elseif($type== 'forums-count'&&a_priv('admin_content', true)) elseif($type== 'forums-categories'&&a_priv('admin_content', true)) elseif($type== 'users-count'&&a_priv('admin_users', true)) elseif($type== 'product-categories'&&a_priv('admin_products', true)) elseif($type== 'users-by-sex'&&a_priv('admin_users', true)) elseif($type== 'users-by-country'&&a_priv('admin_users', true)) elseif($type== 'sales'&&a_priv('admin_sales', true))
Definition: chart-data.php:160
Stores the Twig configuration.
Definition: Environment.php:17
$match
Definition: search.php:86
Integration test helper.
testIntegration($file, $message, $condition, $templates, $exception, $outputs)
getTests

This documentation for Open ecommerce PEEL Shopping and PEEL.fr has been generated by Doxygen on Thu Oct 15 2015 14:41:19 - Peel ecommerce is a product of Agence web Advisto SAS. All rights reserved.