NodeWalkerTest.php 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <?php
  2. declare(strict_types=1);
  3. /*
  4. * This file is part of the league/commonmark package.
  5. *
  6. * (c) Colin O'Dell <colinodell@gmail.com>
  7. *
  8. * Original code based on the CommonMark JS reference parser (https://bitly.com/commonmark-js)
  9. * - (c) John MacFarlane
  10. *
  11. * For the full copyright and license information, please view the LICENSE
  12. * file that was distributed with this source code.
  13. */
  14. namespace League\CommonMark\Tests\Unit\Node;
  15. use League\CommonMark\Extension\CommonMark\Node\Inline\Emphasis;
  16. use League\CommonMark\Node\Block\Document;
  17. use League\CommonMark\Node\Block\Paragraph;
  18. use League\CommonMark\Node\Inline\Text;
  19. use PHPUnit\Framework\TestCase;
  20. final class NodeWalkerTest extends TestCase
  21. {
  22. public function testWalkEmptyBlockNode(): void
  23. {
  24. $node = new Document();
  25. $walker = $node->walker();
  26. $event = $walker->next();
  27. $this->assertSame($node, $event->getNode());
  28. $this->assertTrue($event->isEntering());
  29. $event = $walker->next();
  30. $this->assertSame($node, $event->getNode());
  31. $this->assertFalse($event->isEntering());
  32. $event = $walker->next();
  33. $this->assertNull($event);
  34. $event = $walker->next();
  35. $this->assertNull($event);
  36. }
  37. public function testWalkEmptyInlineNode(): void
  38. {
  39. $node = new Text();
  40. $walker = $node->walker();
  41. $event = $walker->next();
  42. $this->assertSame($node, $event->getNode());
  43. $this->assertTrue($event->isEntering());
  44. $event = $walker->next();
  45. $this->assertNull($event);
  46. $event = $walker->next();
  47. $this->assertNull($event);
  48. }
  49. public function testWalkNestedNodes(): void
  50. {
  51. $document = new Document();
  52. $document->appendChild($paragraph = new Paragraph());
  53. $paragraph->appendChild($text1 = new Text());
  54. $paragraph->appendChild($emphasis = new Emphasis('*'));
  55. $emphasis->appendChild($text2 = new Text());
  56. $walker = $document->walker();
  57. $event = $walker->next();
  58. $this->assertSame($document, $event->getNode());
  59. $this->assertTrue($event->isEntering());
  60. $event = $walker->next();
  61. $this->assertSame($paragraph, $event->getNode());
  62. $this->assertTrue($event->isEntering());
  63. $event = $walker->next();
  64. $this->assertSame($text1, $event->getNode());
  65. $this->assertTrue($event->isEntering());
  66. $event = $walker->next();
  67. $this->assertSame($emphasis, $event->getNode());
  68. $this->assertTrue($event->isEntering());
  69. $event = $walker->next();
  70. $this->assertSame($text2, $event->getNode());
  71. $this->assertTrue($event->isEntering());
  72. $event = $walker->next();
  73. $this->assertSame($emphasis, $event->getNode());
  74. $this->assertFalse($event->isEntering());
  75. $event = $walker->next();
  76. $this->assertSame($paragraph, $event->getNode());
  77. $this->assertFalse($event->isEntering());
  78. $event = $walker->next();
  79. $this->assertSame($document, $event->getNode());
  80. $this->assertFalse($event->isEntering());
  81. $event = $walker->next();
  82. $this->assertNull($event);
  83. $event = $walker->next();
  84. $this->assertNull($event);
  85. }
  86. public function testResumeAt(): void
  87. {
  88. $document = new Document();
  89. $document->appendChild($paragraph = new Paragraph());
  90. $paragraph->appendChild($text = new Text());
  91. $walker = $document->walker();
  92. $walker->next();
  93. $walker->next();
  94. $event = $walker->next();
  95. $this->assertSame($text, $event->getNode());
  96. $this->assertTrue($event->isEntering());
  97. $walker->resumeAt($text);
  98. $event = $walker->next();
  99. $this->assertSame($text, $event->getNode());
  100. $this->assertTrue($event->isEntering());
  101. $walker->resumeAt($paragraph, true);
  102. $event = $walker->next();
  103. $this->assertSame($paragraph, $event->getNode());
  104. $this->assertTrue($event->isEntering());
  105. $event = $walker->next();
  106. $this->assertSame($text, $event->getNode());
  107. $this->assertTrue($event->isEntering());
  108. }
  109. }