packages/requirements/tests/Unit/Config/Markdown/Profile/BlockKindTest.php
1<?php
2
3declare(strict_types=1);
4
5namespace Tests\Unit\Config\Markdown\Profile;
6
7use League\CommonMark\Environment\Environment;
8use League\CommonMark\Exception\CommonMarkException;
9use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
10use League\CommonMark\Extension\CommonMark\Node\Block\ListBlock;
11use League\CommonMark\Node\Node;
12use League\CommonMark\Parser\MarkdownParser;
13use PHPUnit\Framework\Attributes\CoversClass;
14use PHPUnit\Framework\Attributes\DataProvider;
15use PHPUnit\Framework\Attributes\Small;
16use PHPUnit\Framework\TestCase;
17use Requirements\Config\Markdown\Profile\BlockKind;
18
19#[CoversClass(BlockKind::class)]
20#[Small]
21final class BlockKindTest extends TestCase
22{
23 /**
24 * @throws CommonMarkException
25 */
26 #[DataProvider('providerBlocks')]
27 public function testOfNamesBlockKind(string $markdown, string $kind): void
28 {
29 $environment = new Environment();
30 $environment->addExtension(new CommonMarkCoreExtension());
31 $node = (new MarkdownParser($environment))->parse($markdown)->firstChild();
32 self::assertInstanceOf(Node::class, $node);
33 self::assertSame($kind, BlockKind::of($node));
34 }
35
36 /**
37 * @return array<string, array{string, string}>
38 */
39 public static function providerBlocks(): array
40 {
41 return [
42 'paragraph' => ["Some text.\n", 'paragraph'],
43 'quote' => ["> Quoted.\n", 'quote'],
44 'dash bullet list' => ["- one\n- two\n", 'bullet-list'],
45 'star bullet list' => ["* one\n", 'bullet-list'],
46 'plus bullet list' => ["+ one\n", 'bullet-list'],
47 'dot ordered list' => ["1. one\n", 'ordered-list'],
48 'parenthesis ordered list' => ["3) three\n", 'ordered-list'],
49 'heading' => ["# Title\n", 'unsupported'],
50 'code fence' => ["```\ncode\n```\n", 'unsupported'],
51 'indented code' => [" code\n", 'unsupported'],
52 'thematic break' => ["***\n", 'unsupported'],
53 'html comment' => ["<!-- note -->\n", 'unsupported'],
54 ];
55 }
56
57 /**
58 * @throws CommonMarkException
59 */
60 public function testOfNamesListItemUnsupported(): void
61 {
62 $environment = new Environment();
63 $environment->addExtension(new CommonMarkCoreExtension());
64 $list = (new MarkdownParser($environment))->parse("- one\n")->firstChild();
65 self::assertInstanceOf(ListBlock::class, $list);
66 $item = $list->firstChild();
67 self::assertInstanceOf(Node::class, $item);
68 self::assertSame('unsupported', BlockKind::of($item));
69 }
70}
71