ReferenceMapTest.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  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\Reference;
  15. use League\CommonMark\Reference\Reference;
  16. use League\CommonMark\Reference\ReferenceMap;
  17. use PHPUnit\Framework\TestCase;
  18. final class ReferenceMapTest extends TestCase
  19. {
  20. public function testAddNewReference(): void
  21. {
  22. $map = new ReferenceMap();
  23. $reference = new Reference('foo', 'bar', 'baz');
  24. $map->add($reference);
  25. $this->assertTrue($map->contains('foo'));
  26. $this->assertSame($reference, $map->get('foo'));
  27. }
  28. /**
  29. * @dataProvider provideLabelsForCaseFoldingTest
  30. */
  31. public function testUnicodeCaseFolding(string $label): void
  32. {
  33. $map = new ReferenceMap();
  34. $reference = new Reference($label, 'bar', 'baz');
  35. $map->add($reference);
  36. $this->assertTrue($map->contains('ẞ'));
  37. $this->assertTrue($map->contains('ß'));
  38. $this->assertTrue($map->contains('SS'));
  39. $this->assertTrue($map->contains('ss'));
  40. }
  41. /**
  42. * @return iterable<array<string>>
  43. */
  44. public function provideLabelsForCaseFoldingTest(): iterable
  45. {
  46. yield ['ẞ'];
  47. yield ['ß'];
  48. yield ['SS'];
  49. yield ['ss'];
  50. }
  51. public function testOverwriteReference(): void
  52. {
  53. $map = new ReferenceMap();
  54. $reference1 = new Reference('foo', 'bar', 'baz');
  55. $map->add($reference1);
  56. $reference2 = new Reference('foo', 'baz', 'baz');
  57. $map->add($reference2);
  58. $this->assertTrue($map->contains('foo'));
  59. $this->assertSame($reference2, $map->get('foo'));
  60. $this->assertCount(1, $map);
  61. }
  62. public function testGetReferenceWhenNotExists(): void
  63. {
  64. $map = new ReferenceMap();
  65. $this->assertNull($map->get('foo'));
  66. }
  67. public function testGetIterator(): void
  68. {
  69. $map = new ReferenceMap();
  70. $map->add($ref1 = new Reference('foo', 'aaa', 'aaa'));
  71. $map->add($ref2 = new Reference('bar', 'bbb', 'bbb'));
  72. $references = \iterator_to_array($map->getIterator());
  73. $this->assertCount(2, $references);
  74. $this->assertContains($ref1, $references);
  75. $this->assertContains($ref2, $references);
  76. }
  77. public function testCount(): void
  78. {
  79. $map = new ReferenceMap();
  80. $map->add($ref1 = new Reference('foo', 'aaa', 'aaa'));
  81. $map->add($ref2 = new Reference('bar', 'bbb', 'bbb'));
  82. $this->assertSame(2, $map->count());
  83. $this->assertCount(2, $map);
  84. }
  85. }