MustachePragmaImplicitIteratorTest.php 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. <?php
  2. require_once '../Mustache.php';
  3. /**
  4. * @group pragmas
  5. */
  6. class MustachePragmaImplicitIteratorTest extends PHPUnit_Framework_TestCase {
  7. public function testEnablePragma() {
  8. $m = $this->getMock('Mustache', array('_renderPragma'), array('{{%IMPLICIT-ITERATOR}}'));
  9. $m->expects($this->exactly(1))
  10. ->method('_renderPragma')
  11. ->with(array(
  12. 0 => '{{%IMPLICIT-ITERATOR}}',
  13. 1 => 'IMPLICIT-ITERATOR', 'pragma_name' => 'IMPLICIT-ITERATOR',
  14. 2 => null, 'options_string' => null
  15. ));
  16. $m->render();
  17. }
  18. public function testImplicitIterator() {
  19. $m1 = new Mustache('{{%IMPLICIT-ITERATOR}}{{#items}}{{.}}{{/items}}', array('items' => array('a', 'b', 'c')));
  20. $this->assertEquals('abc', $m1->render());
  21. $m2 = new Mustache('{{%IMPLICIT-ITERATOR}}{{#items}}{{.}}{{/items}}', array('items' => array(1, 2, 3)));
  22. $this->assertEquals('123', $m2->render());
  23. }
  24. public function testDotNotationCollision() {
  25. $m = new Mustache(null, array('items' => array('foo', 'bar', 'baz')));
  26. $this->assertEquals('foobarbaz', $m->render('{{%IMPLICIT-ITERATOR}}{{%DOT-NOTATION}}{{#items}}{{.}}{{/items}}'));
  27. $this->assertEquals('foobarbaz', $m->render('{{%DOT-NOTATION}}{{%IMPLICIT-ITERATOR}}{{#items}}{{.}}{{/items}}'));
  28. }
  29. public function testCustomIterator() {
  30. $m = new Mustache(null, array('items' => array('foo', 'bar', 'baz')));
  31. $this->assertEquals('foobarbaz', $m->render('{{%IMPLICIT-ITERATOR}}{{#items}}{{.}}{{/items}}'));
  32. $this->assertEquals('foobarbaz', $m->render('{{%IMPLICIT-ITERATOR iterator=i}}{{#items}}{{i}}{{/items}}'));
  33. $this->assertEquals('foobarbaz', $m->render('{{%IMPLICIT-ITERATOR iterator=items}}{{#items}}{{items}}{{/items}}'));
  34. }
  35. public function testDotNotationContext() {
  36. $m = new Mustache(null, array('items' => array(
  37. array('index' => 1, 'name' => 'foo'),
  38. array('index' => 2, 'name' => 'bar'),
  39. array('index' => 3, 'name' => 'baz'),
  40. )));
  41. $this->assertEquals('foobarbaz', $m->render('{{%IMPLICIT-ITERATOR}}{{#items}}{{#.}}{{name}}{{/.}}{{/items}}'));
  42. $this->assertEquals('123', $m->render('{{%IMPLICIT-ITERATOR iterator=i}}{{%DOT-NOTATION}}{{#items}}{{i.index}}{{/items}}'));
  43. $this->assertEquals('foobarbaz', $m->render('{{%IMPLICIT-ITERATOR iterator=i}}{{%DOT-NOTATION}}{{#items}}{{i.name}}{{/items}}'));
  44. }
  45. /**
  46. * @dataProvider recursiveSectionData
  47. */
  48. public function testRecursiveSections($template, $view, $result) {
  49. $m = new Mustache();
  50. $this->assertEquals($result, $m->render($template, $view));
  51. }
  52. public function recursiveSectionData() {
  53. return array(
  54. array(
  55. '{{%IMPLICIT-ITERATOR}}{{#items}}{{#.}}{{.}}{{/.}}{{/items}}',
  56. array('items' => array(array('a', 'b', 'c'), array('d', 'e', 'f'))),
  57. 'abcdef'
  58. ),
  59. array(
  60. '{{%IMPLICIT-ITERATOR}}{{#items}}{{#.}}{{#.}}{{.}}{{/.}}{{/.}}{{/items}}',
  61. array('items' => array(array(array('a', 'b'), array('c')), array(array('d'), array('e', 'f')))),
  62. 'abcdef'
  63. ),
  64. array(
  65. '{{%IMPLICIT-ITERATOR}}{{#items}}{{#.}}{{#items}}{{.}}{{/items}}{{/.}}{{/items}}',
  66. array('items' => array(
  67. array('items' => array('a', 'b', 'c')),
  68. array('items' => array('d', 'e', 'f')),
  69. )),
  70. 'abcdef'
  71. ),
  72. );
  73. }
  74. }