Completed
Push — master ( bb050e...36e41a )
by Paweł
11:10
created

GimmeListNodeTest::testConstructor()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 30
rs 9.44
c 0
b 0
f 0
cc 1
nc 1
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
        $withParameters = new \Twig_Node_Expression_Array([], 1);
57
        $withoutParameters = new \Twig_Node_Expression_Array([], 1);
58
        $else = new \Twig_Node_Text('', 1);
59
        $body = new \Twig_Node_Text('', 1);
60
        $ignoreContext = new \Twig_Node_Expression_Array([], 1);
61
62
        $node = new GimmeListNode($variable, $collectionType, $collectionFilters, $withParameters, $withoutParameters, $ignoreContext, $ifExpression, $else, $body, 0, 'gimmelist');
63
        $this->assertEquals($variable, $node->getNode('variable'));
64
        $this->assertEquals($withParameters, $node->getNode('withParameters'));
65
        $this->assertEquals($withoutParameters, $node->getNode('withoutParameters'));
66
67
        $body = new \Twig_Node([$body, new \Twig_Node_ForLoop(0, 'gimmelist')]);
68
        $body = new \Twig_Node_If(new \Twig_Node([$ifExpression, $body]), null, 0, 'gimmelist');
69
        $this->assertEquals($body, $node->getNode('body'));
70
    }
71
72
    public function getTests()
73
    {
74
        $variable = new \Twig_Node([new \Twig_Node_Expression_AssignName('article', 1)]);
75
        $collectionType = new \Twig_Node([new \Twig_Node_Expression_AssignName('articles', 1)]);
76
        $collectionFilters = new \Twig_Node_Expression_Filter(
77
            new \Twig_Node([$collectionType], [], 0),
78
            new \Twig_Node_Expression_Constant('start', 0),
79
            new \Twig_Node([new \Twig_Node_Expression_Constant(0, 0)]),
80
            0
81
        );
82
        $collectionFiltersFull = new \Twig_Node_Expression_Filter(
83
                new \Twig_Node([new \Twig_Node_Expression_Filter(
84
                    new \Twig_Node([
85
                        new \Twig_Node([new \Twig_Node_Expression_Filter(
86
                            new \Twig_Node([$collectionType], [], 0),
87
                            new \Twig_Node_Expression_Constant('order', 0),
88
                            new \Twig_Node([new \Twig_Node_Expression_Array([new \Twig_Node_Expression_Constant('id', 0), new \Twig_Node_Expression_Constant('desc', 0)], 0)]),
89
                            0
90
                        ),
91
                        ], [], 0),
92
                    ], [], 0),
93
                    new \Twig_Node_Expression_Constant('limit', 0),
94
                    new \Twig_Node([new \Twig_Node_Expression_Constant(10, 0)]),
95
                    0
96
                ),
97
                ], [], 0),
98
            new \Twig_Node_Expression_Constant('start', 0),
99
            new \Twig_Node([new \Twig_Node_Expression_Constant(0, 0)]),
100
            0
101
        );
102
        $parameters = new \Twig_Node_Expression_Array([], 1);
103
        $withoutParameters = new \Twig_Node_Expression_Array([], 1);
104
        $ignoreContext = new \Twig_Node_Expression_Array([], 1);
105
        $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),
106
            new \Twig_Node_Expression_Constant('New article', 0),
107
            0
108
        );
109
        $else = new \Twig_Node_Text('', 1);
110
        $body = new \Twig_Node_Text('', 1);
111
112
        $node1 = new GimmeListNode($variable, $collectionType, null, null, null, null, null, null, $body, 0, 'gimmelist');
113
        $node2 = new GimmeListNode($variable, $collectionType, $collectionFilters, $parameters, null, null, $ifExpression, $else, $body, 0, 'gimmelist');
114
        $node3 = new GimmeListNode($variable, $collectionType, $collectionFiltersFull, null, null, null, null, null, $body, 0, 'gimmelist');
115
        $node4 = new GimmeListNode($variable, $collectionType, $collectionFiltersFull, $parameters, $withoutParameters, null, null, null, $body, 0, 'gimmelist');
116
        $node5 = new GimmeListNode($variable, $collectionType, $collectionFiltersFull, $parameters, $withoutParameters, null, $ifExpression, null, $body, 0, 'gimmelist');
117
        $node6 = new GimmeListNode($variable, $collectionType, $collectionFiltersFull, $parameters, $withoutParameters, $ignoreContext, $ifExpression, null, $body, 0, 'gimmelist');
118
119
        return [
120
            [$node1, <<<EOF
121
\$withParameters = [];
122
\$withoutParameters = [];
123
\$swpCollectionMetaLoader1 = \$this->env->getExtension('SWP\Component\TemplatesSystem\Twig\Extension\GimmeExtension')->getLoader();
124
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader1->load("articles", \$withParameters, \$withoutParameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
125
\$context['_parent'] = (array) \$context;
126
\$context['loop'] = array(
127
  'parent' => \$context['_parent'],
128
  'index0' => 0,
129
  'index'  => 1,
130
  'first'  => true,
131
);
132
if (is_array(\$context["articles"]) || (is_object(\$context["articles"]) && \$context["articles"] instanceof Countable)) {
133
    \$length = count(\$context["articles"]);
134
    \$context['loop']['revindex0'] = \$length - 1;
135
    \$context['loop']['revindex'] = \$length;
136
    \$context['loop']['length'] = \$length;
137
    \$context['loop']['totalLength'] = \$length;
138
    \$context['loop']['last'] = 1 === \$length;
139
}
140
if(is_object(\$context["articles"]) && \$context["articles"] instanceof \SWP\Component\TemplatesSystem\Gimme\Meta\MetaCollection) {
141
    \$context['loop']['totalLength'] = \$context["articles"]->getTotalItemsCount();
142
}
143
foreach (\$context["articles"] as \$_key => \$context["article"]) {
144
    // line 1
145
    echo "";
146
    ++\$context['loop']['index0'];
147
    ++\$context['loop']['index'];
148
    \$context['loop']['first'] = false;
149
    if (isset(\$context['loop']['length'])) {
150
        --\$context['loop']['revindex0'];
151
        --\$context['loop']['revindex'];
152
        \$context['loop']['last'] = 0 === \$context['loop']['revindex0'];
153
    }
154
}
155
\$_parent = \$context['_parent'];
156
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
157
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
158
EOF
159
            ],
160
            [$node2, <<<EOF
161
\$context['_collection_type_filters'] = [];
162
\$context['articles'] = null;
163
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(\$context["articles"], 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
164
\$withParameters = array_merge(array(), \$context['_collection_type_filters']);
165
\$withoutParameters = [];
166
\$swpCollectionMetaLoader2 = \$this->env->getExtension('SWP\Component\TemplatesSystem\Twig\Extension\GimmeExtension')->getLoader();
167
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader2->load("articles", \$withParameters, \$withoutParameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
168
\$context['_parent'] = (array) \$context;
169
\$context['_iterated'] = false;
170
\$context['loop'] = array(
171
  'parent' => \$context['_parent'],
172
  'index0' => 0,
173
  'index'  => 1,
174
  'first'  => true,
175
);
176
foreach (\$context["articles"] as \$_key => \$context["article"]) {
177
    if ((twig_get_attribute(\$this->env, \$this->source, (\$context["article"] ?? null), "title", array(), null) == "New article")) {
178
        // line 1
179
        echo "";
180
        \$context['_iterated'] = true;
181
        ++\$context['loop']['index0'];
182
        ++\$context['loop']['index'];
183
        \$context['loop']['first'] = false;
184
    }
185
}
186
if (!\$context['_iterated']) {
187
    echo "";
188
}
189
\$_parent = \$context['_parent'];
190
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
191
unset(\$context['_collection_type_filters']);
192
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
193
EOF
194
            ],
195
            [$node3, <<<EOF
196
\$context['_collection_type_filters'] = [];
197
\$context['articles'] = null;
198
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(call_user_func_array(\$this->env->getFilter('limit')->getCallable(), array(call_user_func_array(\$this->env->getFilter('order')->getCallable(), array(\$context["articles"], array("id" => "desc"))), 10)), 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
199
\$withParameters = \$context['_collection_type_filters'];
200
\$withoutParameters = [];
201
\$swpCollectionMetaLoader3 = \$this->env->getExtension('SWP\Component\TemplatesSystem\Twig\Extension\GimmeExtension')->getLoader();
202
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader3->load("articles", \$withParameters, \$withoutParameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
203
\$context['_parent'] = (array) \$context;
204
\$context['loop'] = array(
205
  'parent' => \$context['_parent'],
206
  'index0' => 0,
207
  'index'  => 1,
208
  'first'  => true,
209
);
210
if (is_array(\$context["articles"]) || (is_object(\$context["articles"]) && \$context["articles"] instanceof Countable)) {
211
    \$length = count(\$context["articles"]);
212
    \$context['loop']['revindex0'] = \$length - 1;
213
    \$context['loop']['revindex'] = \$length;
214
    \$context['loop']['length'] = \$length;
215
    \$context['loop']['totalLength'] = \$length;
216
    \$context['loop']['last'] = 1 === \$length;
217
}
218
if(is_object(\$context["articles"]) && \$context["articles"] instanceof \SWP\Component\TemplatesSystem\Gimme\Meta\MetaCollection) {
219
    \$context['loop']['totalLength'] = \$context["articles"]->getTotalItemsCount();
220
}
221
foreach (\$context["articles"] as \$_key => \$context["article"]) {
222
    // line 1
223
    echo "";
224
    ++\$context['loop']['index0'];
225
    ++\$context['loop']['index'];
226
    \$context['loop']['first'] = false;
227
    if (isset(\$context['loop']['length'])) {
228
        --\$context['loop']['revindex0'];
229
        --\$context['loop']['revindex'];
230
        \$context['loop']['last'] = 0 === \$context['loop']['revindex0'];
231
    }
232
}
233
\$_parent = \$context['_parent'];
234
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
235
unset(\$context['_collection_type_filters']);
236
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
237
EOF
238
            ],
239
            [$node4, <<<EOF
240
\$context['_collection_type_filters'] = [];
241
\$context['articles'] = null;
242
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(call_user_func_array(\$this->env->getFilter('limit')->getCallable(), array(call_user_func_array(\$this->env->getFilter('order')->getCallable(), array(\$context["articles"], array("id" => "desc"))), 10)), 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
243
\$withParameters = array_merge(array(), \$context['_collection_type_filters']);
244
\$withoutParameters = array();
245
\$swpCollectionMetaLoader4 = \$this->env->getExtension('SWP\Component\TemplatesSystem\Twig\Extension\GimmeExtension')->getLoader();
246
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader4->load("articles", \$withParameters, \$withoutParameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
247
\$context['_parent'] = (array) \$context;
248
\$context['loop'] = array(
249
  'parent' => \$context['_parent'],
250
  'index0' => 0,
251
  'index'  => 1,
252
  'first'  => true,
253
);
254
if (is_array(\$context["articles"]) || (is_object(\$context["articles"]) && \$context["articles"] instanceof Countable)) {
255
    \$length = count(\$context["articles"]);
256
    \$context['loop']['revindex0'] = \$length - 1;
257
    \$context['loop']['revindex'] = \$length;
258
    \$context['loop']['length'] = \$length;
259
    \$context['loop']['totalLength'] = \$length;
260
    \$context['loop']['last'] = 1 === \$length;
261
}
262
if(is_object(\$context["articles"]) && \$context["articles"] instanceof \SWP\Component\TemplatesSystem\Gimme\Meta\MetaCollection) {
263
    \$context['loop']['totalLength'] = \$context["articles"]->getTotalItemsCount();
264
}
265
foreach (\$context["articles"] as \$_key => \$context["article"]) {
266
    // line 1
267
    echo "";
268
    ++\$context['loop']['index0'];
269
    ++\$context['loop']['index'];
270
    \$context['loop']['first'] = false;
271
    if (isset(\$context['loop']['length'])) {
272
        --\$context['loop']['revindex0'];
273
        --\$context['loop']['revindex'];
274
        \$context['loop']['last'] = 0 === \$context['loop']['revindex0'];
275
    }
276
}
277
\$_parent = \$context['_parent'];
278
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
279
unset(\$context['_collection_type_filters']);
280
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
281
EOF
282
            ],
283
            [$node5, <<<EOF
284
\$context['_collection_type_filters'] = [];
285
\$context['articles'] = null;
286
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(call_user_func_array(\$this->env->getFilter('limit')->getCallable(), array(call_user_func_array(\$this->env->getFilter('order')->getCallable(), array(\$context["articles"], array("id" => "desc"))), 10)), 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
287
\$withParameters = array_merge(array(), \$context['_collection_type_filters']);
288
\$withoutParameters = array();
289
\$swpCollectionMetaLoader5 = \$this->env->getExtension('SWP\Component\TemplatesSystem\Twig\Extension\GimmeExtension')->getLoader();
290
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader5->load("articles", \$withParameters, \$withoutParameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
291
\$context['_parent'] = (array) \$context;
292
\$context['loop'] = array(
293
  'parent' => \$context['_parent'],
294
  'index0' => 0,
295
  'index'  => 1,
296
  'first'  => true,
297
);
298
foreach (\$context["articles"] as \$_key => \$context["article"]) {
299
    if ((twig_get_attribute(\$this->env, \$this->source, (\$context["article"] ?? null), "title", array(), null) == "New article")) {
300
        // line 1
301
        echo "";
302
        ++\$context['loop']['index0'];
303
        ++\$context['loop']['index'];
304
        \$context['loop']['first'] = false;
305
    }
306
}
307
\$_parent = \$context['_parent'];
308
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
309
unset(\$context['_collection_type_filters']);
310
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
311
EOF
312
            ],
313
            [$node6, <<<EOF
314
\$context['_collection_type_filters'] = [];
315
\$context['articles'] = null;
316
\$context['_collection_type_filters'] = call_user_func_array(\$this->env->getFilter('start')->getCallable(), array(call_user_func_array(\$this->env->getFilter('limit')->getCallable(), array(call_user_func_array(\$this->env->getFilter('order')->getCallable(), array(\$context["articles"], array("id" => "desc"))), 10)), 0))['_collection_type_filters']; unset(\$context['articles']['_collection_type_filters']);
317
\$withParameters = array_merge(array(), \$context['_collection_type_filters']);
318
\$withoutParameters = array();
319
\$swpCollectionMetaLoader6 = \$this->env->getExtension('SWP\Component\TemplatesSystem\Twig\Extension\GimmeExtension')->getLoader();
320
\$swpContext6GimmeList = \$this->env->getExtension('SWP\Component\TemplatesSystem\Twig\Extension\GimmeExtension')->getContext();
321
\$swpIgnoreContext6GimmeList = \$swpContext6GimmeList->temporaryUnset(array());
322
\$context["articles"] = twig_ensure_traversable(\$swpCollectionMetaLoader6->load("articles", \$withParameters, \$withoutParameters, \SWP\Component\TemplatesSystem\Gimme\Loader\LoaderInterface::COLLECTION));
323
\$context['_parent'] = (array) \$context;
324
\$context['loop'] = array(
325
  'parent' => \$context['_parent'],
326
  'index0' => 0,
327
  'index'  => 1,
328
  'first'  => true,
329
);
330
foreach (\$context["articles"] as \$_key => \$context["article"]) {
331
    if ((twig_get_attribute(\$this->env, \$this->source, (\$context["article"] ?? null), "title", array(), null) == "New article")) {
332
        // line 1
333
        echo "";
334
        ++\$context['loop']['index0'];
335
        ++\$context['loop']['index'];
336
        \$context['loop']['first'] = false;
337
    }
338
}
339
\$swpContext6GimmeList->restoreTemporaryUnset(\$swpIgnoreContext6GimmeList);
340
\$_parent = \$context['_parent'];
341
unset(\$context['article'], \$context['_iterated'], \$context['articles'], \$context['_parent'], \$context['loop']);
342
unset(\$context['_collection_type_filters']);
343
\$context = array_intersect_key(\$context, \$_parent) + \$_parent;
344
EOF
345
            ],
346
        ];
347
    }
348
349 View Code Duplication
    protected function tearDown()
0 ignored issues
show
Duplication introduced by
This method seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
350
    {
351
        $reflection = new \ReflectionObject($this);
352
        foreach ($reflection->getProperties() as $prop) {
353
            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...
354
                $prop->setAccessible(true);
355
                $prop->setValue($this, null);
356
            }
357
        }
358
    }
359
}
360