Completed
Push — master ( 586166...fecb59 )
by Paweł
47:58
created

GimmeListNodeTest::tearDown()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.2
c 0
b 0
f 0
cc 4
eloc 6
nc 3
nop 0
1
<?php
2
3
/**
4
 * This file is part of the Superdesk Web Publisher Templates System.
5
 *
6
 * Copyright 2015 Sourcefabric z.ú. and contributors.
7
 *
8
 * For the full copyright and license information, please see the
9
 * AUTHORS and LICENSE files distributed with this source code.
10
 *
11
 * @copyright 2015 Sourcefabric z.ú
12
 * @license http://www.superdesk.org/license
13
 */
14
15
namespace SWP\Component\TemplatesSystem\Tests\Twig\Node;
16
17
use Doctrine\Common\Cache\ArrayCache;
18
use SWP\Component\TemplatesSystem\Gimme\Context\Context;
19
use SWP\Component\TemplatesSystem\Gimme\Factory\MetaFactory;
20
use SWP\Component\TemplatesSystem\Gimme\Loader\ArticleLoader;
21
use SWP\Component\TemplatesSystem\Gimme\Loader\ChainLoader;
22
use SWP\Component\TemplatesSystem\Twig\Extension\GimmeExtension;
23
use SWP\Component\TemplatesSystem\Twig\Node\GimmeListNode;
24
25
class GimmeListNodeTest extends \Twig_Test_NodeTestCase
26
{
27
    /**
28
     * @dataProvider getTests
29
     */
30
    public function testCompile($node, $source, $environment = null, $isPattern = false)
31
    {
32
        $env = $this->getEnvironment();
33
        $metaLoader = new ChainLoader();
34
        $context = new Context(new ArrayCache());
35
        $metaLoader->addLoader(new ArticleLoader(__DIR__, new MetaFactory($context)));
36
        $env->addExtension(new GimmeExtension($context, $metaLoader));
37
38
        $this->assertNodeCompilation($source, $node, $env);
39
    }
40
41
    public function testConstructor()
42
    {
43
        $variable = new \Twig_Node([new \Twig_Node_Expression_AssignName('article', 1)]);
44
        $collectionType = new \Twig_Node([new \Twig_Node_Expression_AssignName('articles', 1)]);
45
        $collectionFilters = new \Twig_Node_Expression_Filter(
46
            new \Twig_Node([$collectionType], [], 0),
47
            new \Twig_Node_Expression_Constant('start', 0),
48
            new \Twig_Node([new \Twig_Node_Expression_Constant(0, 0)]),
49
            0
50
        );
51
        $ifExpression = new \Twig_Node_Expression_Binary_Equal(new \Twig_Node_Expression_GetAttr(new \Twig_Node_Expression_Name('article', 0), new \Twig_Node_Expression_Constant('title', 0), null, null, 0),
52
            new \Twig_Node_Expression_Constant('New article', 0),
53
            0
54
        );
55
56
        $parameters = new \Twig_Node_Expression_Array([], 1);
57
        $else = new \Twig_Node_Text('', 1);
58
        $body = new \Twig_Node_Text('', 1);
59
60
        $node = new GimmeListNode($variable, $collectionType, $collectionFilters, $parameters, $ifExpression, $else, $body, 0, 'gimmelist');
61
        $this->assertEquals($variable, $node->getNode('variable'));
62
        $this->assertEquals($parameters, $node->getNode('parameters'));
63
64
        $body = new \Twig_Node([$body, new \Twig_Node_ForLoop(0, 'gimmelist')]);
65
        $body = new \Twig_Node_If(new \Twig_Node([$ifExpression, $body]), null, 0, 'gimmelist');
66
        $this->assertEquals($body, $node->getNode('body'));
67
    }
68
69
    public function getTests()
70
    {
71
        $variable = new \Twig_Node([new \Twig_Node_Expression_AssignName('article', 1)]);
72
        $collectionType = new \Twig_Node([new \Twig_Node_Expression_AssignName('articles', 1)]);
73
        $collectionFilters = new \Twig_Node_Expression_Filter(
74
            new \Twig_Node([$collectionType], [], 0),
75
            new \Twig_Node_Expression_Constant('start', 0),
76
            new \Twig_Node([new \Twig_Node_Expression_Constant(0, 0)]),
77
            0
78
        );
79
        $collectionFiltersFull = new \Twig_Node_Expression_Filter(
80
                new \Twig_Node([new \Twig_Node_Expression_Filter(
81
                    new \Twig_Node([
82
                        new \Twig_Node([new \Twig_Node_Expression_Filter(
83
                            new \Twig_Node([$collectionType], [], 0),
84
                            new \Twig_Node_Expression_Constant('order', 0),
85
                            new \Twig_Node([new \Twig_Node_Expression_Array([new \Twig_Node_Expression_Constant('id', 0), new \Twig_Node_Expression_Constant('desc', 0)], 0)]),
86
                            0
87
                        ),
88
                        ], [], 0),
89
                    ], [], 0),
90
                    new \Twig_Node_Expression_Constant('limit', 0),
91
                    new \Twig_Node([new \Twig_Node_Expression_Constant(10, 0)]),
92
                    0
93
                ),
94
                ], [], 0),
95
            new \Twig_Node_Expression_Constant('start', 0),
96
            new \Twig_Node([new \Twig_Node_Expression_Constant(0, 0)]),
97
            0
98
        );
99
        $parameters = new \Twig_Node_Expression_Array([], 1);
100
        $ifExpression = new \Twig_Node_Expression_Binary_Equal(new \Twig_Node_Expression_GetAttr(new \Twig_Node_Expression_Name('article', 0), new \Twig_Node_Expression_Constant('title', 0), null, null, 0),
101
            new \Twig_Node_Expression_Constant('New article', 0),
102
            0
103
        );
104
        $else = new \Twig_Node_Text('', 1);
105
        $body = new \Twig_Node_Text('', 1);
106
107
        $node1 = new GimmeListNode($variable, $collectionType, null, null, null, null, $body, 0, 'gimmelist');
108
        $node2 = new GimmeListNode($variable, $collectionType, $collectionFilters, $parameters, $ifExpression, $else, $body, 0, 'gimmelist');
109
        $node3 = new GimmeListNode($variable, $collectionType, $collectionFiltersFull, null, null, null, $body, 0, 'gimmelist');
110
        $node4 = new GimmeListNode($variable, $collectionType, $collectionFiltersFull, $parameters, null, null, $body, 0, 'gimmelist');
111
        $node5 = new GimmeListNode($variable, $collectionType, $collectionFiltersFull, $parameters, $ifExpression, null, $body, 0, 'gimmelist');
112
113
        return [
114
            [$node1, <<<EOF
115
\$parameters = [];
116
\$swpCollectionMetaLoader1 = \$this->env->getExtension('swp_gimme')->getLoader();
117
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader1->load("articles", \$parameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
118
\$context['_parent'] = (array) \$context;
119
\$context['loop'] = array(
120
  'parent' => \$context['_parent'],
121
  'index0' => 0,
122
  'index'  => 1,
123
  'first'  => true,
124
);
125
if (is_array(\$context["articles"]) || (is_object(\$context["articles"]) && \$context["articles"] instanceof Countable)) {
126
    \$length = count(\$context["articles"]);
127
    \$context['loop']['revindex0'] = \$length - 1;
128
    \$context['loop']['revindex'] = \$length;
129
    \$context['loop']['length'] = \$length;
130
    \$context['loop']['totalLength'] = \$length;
131
    \$context['loop']['last'] = 1 === \$length;
132
}
133
if(is_object(\$context["articles"]) && \$context["articles"] instanceof \SWP\Component\TemplatesSystem\Gimme\Meta\MetaCollection) {
134
    \$context['loop']['totalLength'] = \$context["articles"]->getTotalItemCount();
135
}
136
foreach (\$context["articles"] as \$_key => \$context["article"]) {
137
    // line 1
138
    echo "";
139
    ++\$context['loop']['index0'];
140
    ++\$context['loop']['index'];
141
    \$context['loop']['first'] = false;
142
    if (isset(\$context['loop']['length'])) {
143
        --\$context['loop']['revindex0'];
144
        --\$context['loop']['revindex'];
145
        \$context['loop']['last'] = 0 === \$context['loop']['revindex0'];
146
    }
147
}
148
\$_parent = \$context['_parent'];
149
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
150
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
151
EOF
152
            ],
153
            [$node2, <<<EOF
154
\$context['_collection_type_filters'] = [];
155
\$context['articles'] = null;
156
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(\$context, \$context["articles"], 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
157
\$parameters = array_merge(array(), \$context['_collection_type_filters']);
158
\$swpCollectionMetaLoader2 = \$this->env->getExtension('swp_gimme')->getLoader();
159
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader2->load("articles", \$parameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
160
\$context['_parent'] = (array) \$context;
161
\$context['_iterated'] = false;
162
\$context['loop'] = array(
163
  'parent' => \$context['_parent'],
164
  'index0' => 0,
165
  'index'  => 1,
166
  'first'  => true,
167
);
168
foreach (\$context["articles"] as \$_key => \$context["article"]) {
169
    if ((\$this->getAttribute((isset(\$context["article"]) ? \$context["article"] : null), "title", array(), null) == "New article")) {
170
        // line 1
171
        echo "";
172
        \$context['_iterated'] = true;
173
        ++\$context['loop']['index0'];
174
        ++\$context['loop']['index'];
175
        \$context['loop']['first'] = false;
176
    }
177
}
178
if (!\$context['_iterated']) {
179
    echo "";
180
}
181
\$_parent = \$context['_parent'];
182
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
183
unset(\$context['_collection_type_filters']);
184
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
185
EOF
186
            ],
187
            [$node3, <<<EOF
188
\$context['_collection_type_filters'] = [];
189
\$context['articles'] = null;
190
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(\$context, call_user_func_array(\$this->env->getFilter('limit')->getCallable(), array(\$context, call_user_func_array(\$this->env->getFilter('order')->getCallable(), array(\$context, \$context["articles"], array("id" => "desc"))), 10)), 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
191
\$parameters = \$context['_collection_type_filters'];
192
\$swpCollectionMetaLoader3 = \$this->env->getExtension('swp_gimme')->getLoader();
193
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader3->load("articles", \$parameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
194
\$context['_parent'] = (array) \$context;
195
\$context['loop'] = array(
196
  'parent' => \$context['_parent'],
197
  'index0' => 0,
198
  'index'  => 1,
199
  'first'  => true,
200
);
201
if (is_array(\$context["articles"]) || (is_object(\$context["articles"]) && \$context["articles"] instanceof Countable)) {
202
    \$length = count(\$context["articles"]);
203
    \$context['loop']['revindex0'] = \$length - 1;
204
    \$context['loop']['revindex'] = \$length;
205
    \$context['loop']['length'] = \$length;
206
    \$context['loop']['totalLength'] = \$length;
207
    \$context['loop']['last'] = 1 === \$length;
208
}
209
if(is_object(\$context["articles"]) && \$context["articles"] instanceof \SWP\Component\TemplatesSystem\Gimme\Meta\MetaCollection) {
210
    \$context['loop']['totalLength'] = \$context["articles"]->getTotalItemCount();
211
}
212
foreach (\$context["articles"] as \$_key => \$context["article"]) {
213
    // line 1
214
    echo "";
215
    ++\$context['loop']['index0'];
216
    ++\$context['loop']['index'];
217
    \$context['loop']['first'] = false;
218
    if (isset(\$context['loop']['length'])) {
219
        --\$context['loop']['revindex0'];
220
        --\$context['loop']['revindex'];
221
        \$context['loop']['last'] = 0 === \$context['loop']['revindex0'];
222
    }
223
}
224
\$_parent = \$context['_parent'];
225
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
226
unset(\$context['_collection_type_filters']);
227
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
228
EOF
229
            ],
230
            [$node4, <<<EOF
231
\$context['_collection_type_filters'] = [];
232
\$context['articles'] = null;
233
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(\$context, call_user_func_array(\$this->env->getFilter('limit')->getCallable(), array(\$context, call_user_func_array(\$this->env->getFilter('order')->getCallable(), array(\$context, \$context["articles"], array("id" => "desc"))), 10)), 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
234
\$parameters = array_merge(array(), \$context['_collection_type_filters']);
235
\$swpCollectionMetaLoader4 = \$this->env->getExtension('swp_gimme')->getLoader();
236
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader4->load("articles", \$parameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
237
\$context['_parent'] = (array) \$context;
238
\$context['loop'] = array(
239
  'parent' => \$context['_parent'],
240
  'index0' => 0,
241
  'index'  => 1,
242
  'first'  => true,
243
);
244
if (is_array(\$context["articles"]) || (is_object(\$context["articles"]) && \$context["articles"] instanceof Countable)) {
245
    \$length = count(\$context["articles"]);
246
    \$context['loop']['revindex0'] = \$length - 1;
247
    \$context['loop']['revindex'] = \$length;
248
    \$context['loop']['length'] = \$length;
249
    \$context['loop']['totalLength'] = \$length;
250
    \$context['loop']['last'] = 1 === \$length;
251
}
252
if(is_object(\$context["articles"]) && \$context["articles"] instanceof \SWP\Component\TemplatesSystem\Gimme\Meta\MetaCollection) {
253
    \$context['loop']['totalLength'] = \$context["articles"]->getTotalItemCount();
254
}
255
foreach (\$context["articles"] as \$_key => \$context["article"]) {
256
    // line 1
257
    echo "";
258
    ++\$context['loop']['index0'];
259
    ++\$context['loop']['index'];
260
    \$context['loop']['first'] = false;
261
    if (isset(\$context['loop']['length'])) {
262
        --\$context['loop']['revindex0'];
263
        --\$context['loop']['revindex'];
264
        \$context['loop']['last'] = 0 === \$context['loop']['revindex0'];
265
    }
266
}
267
\$_parent = \$context['_parent'];
268
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
269
unset(\$context['_collection_type_filters']);
270
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
271
EOF
272
            ],
273
            [$node5, <<<EOF
274
\$context['_collection_type_filters'] = [];
275
\$context['articles'] = null;
276
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(\$context, call_user_func_array(\$this->env->getFilter('limit')->getCallable(), array(\$context, call_user_func_array(\$this->env->getFilter('order')->getCallable(), array(\$context, \$context["articles"], array("id" => "desc"))), 10)), 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
277
\$parameters = array_merge(array(), \$context['_collection_type_filters']);
278
\$swpCollectionMetaLoader5 = \$this->env->getExtension('swp_gimme')->getLoader();
279
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader5->load("articles", \$parameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
280
\$context['_parent'] = (array) \$context;
281
\$context['loop'] = array(
282
  'parent' => \$context['_parent'],
283
  'index0' => 0,
284
  'index'  => 1,
285
  'first'  => true,
286
);
287
foreach (\$context["articles"] as \$_key => \$context["article"]) {
288
    if ((\$this->getAttribute((isset(\$context["article"]) ? \$context["article"] : null), "title", array(), null) == "New article")) {
289
        // line 1
290
        echo "";
291
        ++\$context['loop']['index0'];
292
        ++\$context['loop']['index'];
293
        \$context['loop']['first'] = false;
294
    }
295
}
296
\$_parent = \$context['_parent'];
297
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
298
unset(\$context['_collection_type_filters']);
299
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
300
EOF
301
            ], ];
302
    }
303
304
    protected function tearDown()
305
    {
306
        $reflection = new \ReflectionObject($this);
307
        foreach ($reflection->getProperties() as $prop) {
308
            if (!$prop->isStatic() && 0 !== strpos($prop->getDeclaringClass()->getName(), 'PHPUnit_')) {
0 ignored issues
show
introduced by
Consider using $prop->class. There is an issue with getName() and APC-enabled PHP versions.
Loading history...
309
                $prop->setAccessible(true);
310
                $prop->setValue($this, null);
311
            }
312
        }
313
    }
314
}
315