@@ -179,4 +179,186 @@ public function varDirectiveDataProvider()
179
179
],
180
180
];
181
181
}
182
+
183
+ /**
184
+ * @covers \Magento\Framework\Filter\Template::filterFor
185
+ * @dataProvider loopPatternDataProvider
186
+ */
187
+ public function testLoopPattern ($ construction , $ variables , $ expectedResult )
188
+ {
189
+
190
+ $ this ->templateFilter ->setVariables ($ variables );
191
+ $ this ->assertEquals ($ expectedResult , $ this ->invokeMethod ($ this ->templateFilter , 'filterFor ' , [$ construction ]));
192
+ }
193
+
194
+
195
+ /**
196
+ * @return array
197
+ */
198
+ public function loopPatternDataProvider ()
199
+ {
200
+
201
+ return [
202
+ 'no loop tag ' => $ this ->getTemplateAndExpectedResults ('noLoopTag ' ),
203
+ 'no loop body tag ' => $ this ->getTemplateAndExpectedResults ('noBodyTag ' ),
204
+ 'no item tag ' => $ this ->getTemplateAndExpectedResults ('noItemTag ' ),
205
+ 'no item, no body tags ' => $ this ->getTemplateAndExpectedResults ('noItemNoBodyTag ' ),
206
+ 'no item, no data, no body tags ' => $ this ->getTemplateAndExpectedResults ('noItemNoDataNoBodyTag ' ),
207
+
208
+ ];
209
+ }
210
+
211
+ /**
212
+ * Call protected/private method of a class.
213
+ *
214
+ * @param object &$object
215
+ * @param string $methodName
216
+ * @param array $parameters
217
+ *
218
+ * @return mixed Method return.
219
+ */
220
+ private function invokeMethod (&$ object , $ methodName , array $ parameters = [])
221
+ {
222
+ $ reflection = new \ReflectionClass (get_class ($ object ));
223
+ $ method = $ reflection ->getMethod ($ methodName );
224
+ $ method ->setAccessible (true );
225
+
226
+ return $ method ->invokeArgs ($ object , $ parameters );
227
+ }
228
+
229
+ /**
230
+ * @param $type
231
+ * @return array
232
+ */
233
+ public function getTemplateAndExpectedResults ($ type )
234
+ {
235
+
236
+ switch ($ type ) {
237
+ case 'noLoopTag ' :
238
+ $ template = $ expected = '' ;
239
+ break ;
240
+ case 'noBodyTag ' :
241
+ $ template = <<<TEMPLATE
242
+ <ul>
243
+ {{for item in order.all_visible_items}}{{/for}}
244
+ </ul>
245
+ TEMPLATE ;
246
+ $ expected = <<<TEMPLATE
247
+ <ul>
248
+ {{for item in order.all_visible_items}}{{/for}}
249
+ </ul>
250
+ TEMPLATE ;
251
+ break ;
252
+ case 'noItemTag ' :
253
+ $ template = <<<TEMPLATE
254
+ <ul>
255
+ {{for in order.all_visible_items}}
256
+ <li>
257
+ {{var loop.index}} name: {{var thing.name}}, lastname: {{var thing.lastname}}, age: {{var thing.age}}
258
+ </li>
259
+ {{/for}}
260
+ </ul>
261
+ TEMPLATE ;
262
+ $ expected = <<<TEMPLATE
263
+ <ul>
264
+ {{for in order.all_visible_items}}
265
+ <li>
266
+ {{var loop.index}} name: {{var thing.name}}, lastname: {{var thing.lastname}}, age: {{var thing.age}}
267
+ </li>
268
+ {{/for}}
269
+ </ul>
270
+ TEMPLATE ;
271
+ break ;
272
+ case 'noItemNoBodyTag ' :
273
+ $ template = <<<TEMPLATE
274
+ <ul>
275
+ {{for in order.all_visible_items}}
276
+
277
+ {{/for}}
278
+ </ul>
279
+ TEMPLATE ;
280
+ $ expected = <<<TEMPLATE
281
+ <ul>
282
+ {{for in order.all_visible_items}}
283
+
284
+ {{/for}}
285
+ </ul>
286
+ TEMPLATE ;
287
+ break ;
288
+ case 'noItemNoDataNoBodyTag ' :
289
+ $ template = <<<TEMPLATE
290
+ <ul>
291
+ {{for in }}
292
+
293
+ {{/for}}
294
+ </ul>
295
+ TEMPLATE ;
296
+ $ expected = <<<TEMPLATE
297
+ <ul>
298
+ {{for in }}
299
+
300
+ {{/for}}
301
+ </ul>
302
+ TEMPLATE ;
303
+ break ;
304
+ default :
305
+ $ template = <<<TEMPLATE
306
+ <ul>
307
+ {{for item in order.all_visible_items}}
308
+ <li>
309
+ index: {{var loop.index}} sku: {{var item.sku}} name: {{var item.name}} price: {{var item.price}} quantity: {{var item.ordered_qty}}
310
+ </li>
311
+ {{/for}}
312
+ </ul>
313
+ TEMPLATE ;
314
+ $ expected = <<<TEMPLATE
315
+ <ul>
316
+
317
+ <li>
318
+ index: 0 sku: ABC123 name: Product ABC price: 123 quantity: 2
319
+ </li>
320
+
321
+ <li>
322
+ index: 1 sku: DOREMI name: Product DOREMI price: 456 quantity: 1
323
+ </li>
324
+
325
+ </ul>
326
+ TEMPLATE ;
327
+
328
+ }
329
+ return [
330
+ $ template ,
331
+ ['order ' => $ this ->getObjectData ()],
332
+ $ expected
333
+ ];
334
+ }
335
+
336
+ /**
337
+ * @return object
338
+ */
339
+ private function getObjectData ()
340
+ {
341
+ $ objectManager = new \Magento \Framework \TestFramework \Unit \Helper \ObjectManager ($ this );
342
+ $ dataObject = $ objectManager ->getObject ('\Magento\Framework\DataObject ' );
343
+
344
+ /* $var @dataObject \Magento\Framework\DataObject */
345
+
346
+ $ visibleItems = [
347
+ [
348
+ 'sku ' => 'ABC123 ' ,
349
+ 'name ' => 'Product ABC ' ,
350
+ 'price ' => '123 ' ,
351
+ 'ordered_qty ' => '2 '
352
+ ],
353
+ [
354
+ 'sku ' => 'DOREMI ' ,
355
+ 'name ' => 'Product DOREMI ' ,
356
+ 'price ' => '456 ' ,
357
+ 'ordered_qty ' => '1 '
358
+ ]
359
+ ];
360
+
361
+ $ dataObject ->setAllVisibleItems ($ visibleItems );
362
+ return $ dataObject ;
363
+ }
182
364
}
0 commit comments