From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
Date: Sat, 22 Feb 2025 12:42:49 +0100
Subject: Modernize PHPUnit syntax

---
 tests/functional/AbstractLocalDataTestCase.php     |  4 +-
 tests/functional/AbstractSpecTestCase.php          |  4 +-
 .../Delimiter/DelimiterProcessingTest.php          |  5 +-
 .../Extension/Autolink/EmailAutolinkParserTest.php |  5 +-
 .../Extension/Autolink/UrlAutolinkParserTest.php   |  9 ++--
 .../CommonMark/CommonMarkCoreExtensionTest.php     |  4 +-
 .../DefaultAttributesExtensionTest.php             |  4 +-
 .../ExternalLink/ExternalLinkExtensionTest.php     |  5 +-
 .../Extension/Footnote/FootnoteExtensionTest.php   |  8 ++-
 .../FrontMatterExtensionTest.php                   | 25 +++------
 .../HeadingPermalinkExtensionTest.php              |  9 ++--
 .../InlinesOnly/InlinesOnlyFunctionalTest.php      |  4 +-
 .../Strikethrough/StrikethroughExtensionTest.php   |  5 +-
 tests/functional/MaxDelimitersPerLineTest.php      |  5 +-
 .../Delimiter/DelimiterProcessorCollectionTest.php |  3 ++
 .../Attributes/Util/AttributesHelperTest.php       | 10 ++--
 .../Node/Inline/AbstractWebResourceTest.php        |  3 ++
 .../Parser/Inline/BacktickParserTest.php           |  5 +-
 .../Renderer/Block/BlockQuoteRendererTest.php      |  2 +
 .../Renderer/Block/FencedCodeRendererTest.php      |  2 +
 .../Renderer/Block/HeadingRendererTest.php         |  7 +--
 .../Renderer/Block/HtmlBlockRendererTest.php       |  2 +
 .../Renderer/Block/IndentedCodeRendererTest.php    |  2 +
 .../Renderer/Block/ListBlockRendererTest.php       |  6 ++-
 .../Renderer/Block/ListItemRendererTest.php        |  2 +
 .../Renderer/Block/ThematicBreakRendererTest.php   |  2 +
 .../Renderer/Inline/CodeRendererTest.php           |  2 +
 .../Renderer/Inline/EmphasisRendererTest.php       |  2 +
 .../Renderer/Inline/HtmlInlineRendererTest.php     |  2 +
 .../Renderer/Inline/ImageRendererTest.php          |  2 +
 .../Renderer/Inline/LinkRendererTest.php           |  2 +
 .../Renderer/Inline/StrongRendererTest.php         |  2 +
 .../Renderer/DescriptionListRendererTest.php       |  2 +
 .../Renderer/DescriptionRendererTest.php           |  2 +
 .../Renderer/DescriptionTermRendererTest.php       |  2 +
 .../DisallowedRawHtmlRendererTest.php              |  9 ++--
 tests/unit/Extension/Embed/EmbedParserTest.php     |  2 +
 tests/unit/Extension/Embed/EmbedProcessorTest.php  |  3 ++
 tests/unit/Extension/Embed/EmbedRendererTest.php   |  2 +
 .../ExternalLink/ExternalLinkProcessorTest.php     |  8 ++-
 .../Data/SymfonyYamlFrontMatterParserTest.php      |  4 +-
 .../ReplaceUnpairedQuotesListenerTest.php          |  4 +-
 .../TaskList/TaskListItemMarkerRendererTest.php    |  4 ++
 tests/unit/Node/Block/AbstractBlockTest.php        |  5 ++
 tests/unit/Normalizer/SlugNormalizerTest.php       |  9 ++--
 tests/unit/Normalizer/TextNormalizerTest.php       |  5 +-
 tests/unit/Parser/CursorTest.php                   | 60 ++++++----------------
 tests/unit/Parser/Inline/InlineParserMatchTest.php |  5 +-
 tests/unit/Reference/ReferenceMapTest.php          |  5 +-
 tests/unit/Renderer/Block/DocumentRendererTest.php |  2 +
 tests/unit/Renderer/Block/HtmlDecoratorTest.php    |  2 +
 .../unit/Renderer/Block/ParagraphRendererTest.php  |  2 +
 tests/unit/Renderer/Inline/NewlineRendererTest.php |  2 +
 tests/unit/Renderer/Inline/TextRendererTest.php    |  2 +
 tests/unit/Util/Html5EntityDecoderTest.php         |  5 +-
 tests/unit/Util/LinkParserHelperTest.php           |  9 ++--
 tests/unit/Util/RegexHelperTest.php                | 17 ++----
 tests/unit/Util/UrlEncoderTest.php                 |  5 +-
 tests/unit/Util/XmlTest.php                        |  5 +-
 59 files changed, 161 insertions(+), 175 deletions(-)

diff --git a/tests/functional/AbstractLocalDataTestCase.php b/tests/functional/AbstractLocalDataTestCase.php
index 2b33d12..aa9b8dc 100644
--- a/tests/functional/AbstractLocalDataTestCase.php
+++ b/tests/functional/AbstractLocalDataTestCase.php
@@ -16,6 +16,7 @@ namespace League\CommonMark\Tests\Functional;
 use League\CommonMark\ConverterInterface;
 use League\CommonMark\Extension\FrontMatter\Data\SymfonyYamlFrontMatterParser;
 use League\CommonMark\Extension\FrontMatter\FrontMatterParser;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Symfony\Component\Finder\Finder;
 use Symfony\Component\Finder\SplFileInfo;
@@ -39,13 +40,12 @@ abstract class AbstractLocalDataTestCase extends TestCase
     abstract public static function dataProvider(): iterable;
 
     /**
-     * @dataProvider dataProvider
-     *
      * @param string               $markdown Markdown to parse
      * @param string               $html     Expected result
      * @param array<string, mixed> $config   Configuration loaded from front matter
      * @param string               $testName Name of the test
      */
+    #[DataProvider('dataProvider')]
     public function testWithLocalData(string $markdown, string $html, array $config, string $testName): void
     {
         $actualResult = (string) $this->createConverter($config)->convert($markdown);
diff --git a/tests/functional/AbstractSpecTestCase.php b/tests/functional/AbstractSpecTestCase.php
index 86cf6dd..b42d4f3 100644
--- a/tests/functional/AbstractSpecTestCase.php
+++ b/tests/functional/AbstractSpecTestCase.php
@@ -18,6 +18,7 @@ namespace League\CommonMark\Tests\Functional;
 
 use League\CommonMark\CommonMarkConverter;
 use League\CommonMark\MarkdownConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 abstract class AbstractSpecTestCase extends TestCase
@@ -30,11 +31,10 @@ abstract class AbstractSpecTestCase extends TestCase
     }
 
     /**
-     * @dataProvider dataProvider
-     *
      * @param string $input  Markdown to parse
      * @param string $output Expected result
      */
+    #[DataProvider('dataProvider')]
     public function testSpecExample(string $input, string $output, string $type = '', string $section = '', int $number = -1): void
     {
         $actualResult = (string) $this->converter->convert($input);
diff --git a/tests/functional/Delimiter/DelimiterProcessingTest.php b/tests/functional/Delimiter/DelimiterProcessingTest.php
index 72c0b2f..4d0df1b 100644
--- a/tests/functional/Delimiter/DelimiterProcessingTest.php
+++ b/tests/functional/Delimiter/DelimiterProcessingTest.php
@@ -20,6 +20,7 @@ use League\CommonMark\Environment\Environment;
 use League\CommonMark\Exception\InvalidArgumentException;
 use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
 use League\CommonMark\MarkdownConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class DelimiterProcessingTest extends TestCase
@@ -37,9 +38,7 @@ final class DelimiterProcessingTest extends TestCase
         $this->assertEquals("<p>;test;</p>\n", $c->convert(';test;'));
     }
 
-    /**
-     * @dataProvider asymmetricDelimiterDataProvider
-     */
+    #[DataProvider('asymmetricDelimiterDataProvider')]
     public function testAsymmetricDelimiterProcessing(string $input, string $expected): void
     {
         $e = new Environment();
diff --git a/tests/functional/Extension/Autolink/EmailAutolinkParserTest.php b/tests/functional/Extension/Autolink/EmailAutolinkParserTest.php
index 82a44aa..2cd0949 100644
--- a/tests/functional/Extension/Autolink/EmailAutolinkParserTest.php
+++ b/tests/functional/Extension/Autolink/EmailAutolinkParserTest.php
@@ -17,13 +17,12 @@ use League\CommonMark\Environment\Environment;
 use League\CommonMark\Extension\Autolink\AutolinkExtension;
 use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
 use League\CommonMark\MarkdownConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class EmailAutolinkParserTest extends TestCase
 {
-    /**
-     * @dataProvider dataProviderForEmailAutolinks
-     */
+    #[DataProvider('dataProviderForEmailAutolinks')]
     public function testEmailAutolinks(string $input, string $expected): void
     {
         $environment = new Environment();
diff --git a/tests/functional/Extension/Autolink/UrlAutolinkParserTest.php b/tests/functional/Extension/Autolink/UrlAutolinkParserTest.php
index b9f856e..b32f2ff 100644
--- a/tests/functional/Extension/Autolink/UrlAutolinkParserTest.php
+++ b/tests/functional/Extension/Autolink/UrlAutolinkParserTest.php
@@ -18,13 +18,12 @@ use League\CommonMark\Extension\Autolink\AutolinkExtension;
 use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
 use League\CommonMark\Extension\Strikethrough\StrikethroughExtension;
 use League\CommonMark\MarkdownConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class UrlAutolinkParserTest extends TestCase
 {
-    /**
-     * @dataProvider dataProviderForAutolinkTests
-     */
+    #[DataProvider('dataProviderForAutolinkTests')]
     public function testUrlAutolinks(string $input, string $expected): void
     {
         $environment = new Environment();
@@ -126,9 +125,7 @@ final class UrlAutolinkParserTest extends TestCase
         $this->assertSame("<p>http://insecure.example.com</p>\n", $html);
     }
 
-    /**
-     * @dataProvider dataProviderForSchemes
-     */
+    #[DataProvider('dataProviderForSchemes')]
     public function testUrlAutolinksWithConfigurableSchemes(string $scheme): void
     {
         $markdown = 'www.example.com';
diff --git a/tests/functional/Extension/CommonMark/CommonMarkCoreExtensionTest.php b/tests/functional/Extension/CommonMark/CommonMarkCoreExtensionTest.php
index 172573f..4aea943 100644
--- a/tests/functional/Extension/CommonMark/CommonMarkCoreExtensionTest.php
+++ b/tests/functional/Extension/CommonMark/CommonMarkCoreExtensionTest.php
@@ -14,15 +14,15 @@ declare(strict_types=1);
 namespace League\CommonMark\Tests\Functional\Extension\CommonMark;
 
 use League\CommonMark\CommonMarkConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class CommonMarkCoreExtensionTest extends TestCase
 {
     /**
-     * @dataProvider getTestData
-     *
      * @param array<string, mixed> $config
      */
+    #[DataProvider('getTestData')]
     public function testConfiguration(string $markdown, array $config, string $expected): void
     {
         $converter = new CommonMarkConverter($config);
diff --git a/tests/functional/Extension/DefaultAttributes/DefaultAttributesExtensionTest.php b/tests/functional/Extension/DefaultAttributes/DefaultAttributesExtensionTest.php
index 237fb1a..2e65487 100644
--- a/tests/functional/Extension/DefaultAttributes/DefaultAttributesExtensionTest.php
+++ b/tests/functional/Extension/DefaultAttributes/DefaultAttributesExtensionTest.php
@@ -23,15 +23,15 @@ use League\CommonMark\Extension\Table\Table;
 use League\CommonMark\Extension\Table\TableExtension;
 use League\CommonMark\MarkdownConverter;
 use League\CommonMark\Node\Block\Paragraph;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class DefaultAttributesExtensionTest extends TestCase
 {
     /**
-     * @dataProvider provideTestCases
-     *
      * @param array<string, mixed> $config
      */
+    #[DataProvider('provideTestCases')]
     public function testExample(string $markdown, array $config, string $expectedHtml): void
     {
         $environment = new Environment($config);
diff --git a/tests/functional/Extension/ExternalLink/ExternalLinkExtensionTest.php b/tests/functional/Extension/ExternalLink/ExternalLinkExtensionTest.php
index 1df16d7..4faa407 100644
--- a/tests/functional/Extension/ExternalLink/ExternalLinkExtensionTest.php
+++ b/tests/functional/Extension/ExternalLink/ExternalLinkExtensionTest.php
@@ -21,13 +21,12 @@ use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
 use League\CommonMark\Extension\ExternalLink\ExternalLinkExtension;
 use League\CommonMark\Parser\MarkdownParser;
 use League\CommonMark\Renderer\HtmlRenderer;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class ExternalLinkExtensionTest extends TestCase
 {
-    /**
-     * @dataProvider provideEnvironmentForTestingExtensionWithAutolinks
-     */
+    #[DataProvider('provideEnvironmentForTestingExtensionWithAutolinks')]
     public function testExtensionWithAutolinks(EnvironmentInterface $environment): void
     {
         $markdown     = 'Email me at colinodell@gmail.com or read the docs at https://commonmark.thephpleague.com';
diff --git a/tests/functional/Extension/Footnote/FootnoteExtensionTest.php b/tests/functional/Extension/Footnote/FootnoteExtensionTest.php
index 38e0c0b..dd03357 100644
--- a/tests/functional/Extension/Footnote/FootnoteExtensionTest.php
+++ b/tests/functional/Extension/Footnote/FootnoteExtensionTest.php
@@ -17,15 +17,15 @@ use League\CommonMark\Environment\Environment;
 use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
 use League\CommonMark\Extension\Footnote\FootnoteExtension;
 use League\CommonMark\MarkdownConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class FootnoteExtensionTest extends TestCase
 {
     /**
-     * @dataProvider dataForIntegrationTest
-     *
      * @param array<string, mixed> $config
      */
+    #[DataProvider('dataForIntegrationTest')]
     public function testFootnote(string $string, string $expected, array $config = []): void
     {
         $environment = new Environment(['footnote' => $config]);
@@ -59,9 +59,7 @@ final class FootnoteExtensionTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataProviderForTestFootnotesWithCustomOptions
-     */
+    #[DataProvider('dataProviderForTestFootnotesWithCustomOptions')]
     public function testFootnotesWithCustomOptions(string $input, string $expected): void
     {
         $environment = new Environment([
diff --git a/tests/functional/Extension/FrontMatterExtension/FrontMatterExtensionTest.php b/tests/functional/Extension/FrontMatterExtension/FrontMatterExtensionTest.php
index ac030bf..babe748 100644
--- a/tests/functional/Extension/FrontMatterExtension/FrontMatterExtensionTest.php
+++ b/tests/functional/Extension/FrontMatterExtension/FrontMatterExtensionTest.php
@@ -17,6 +17,7 @@ use League\CommonMark\MarkdownConverter;
 use League\CommonMark\Output\RenderedContentInterface;
 use League\CommonMark\Parser\MarkdownParser;
 use League\CommonMark\Xml\XmlRenderer;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class FrontMatterExtensionTest extends TestCase
@@ -48,9 +49,7 @@ final class FrontMatterExtensionTest extends TestCase
         }
     }
 
-    /**
-     * @dataProvider parserProvider
-     */
+    #[DataProvider('parserProvider')]
     public function testWithSampleData(FrontMatterDataParserInterface $parser, bool $shouldTest): void
     {
         $this->skipIfParserNotAvailable($parser, $shouldTest);
@@ -100,9 +99,7 @@ EOT;
         $this->assertSame(9, $result->getDocument()->firstChild()->getStartLine());
     }
 
-    /**
-     * @dataProvider parserProvider
-     */
+    #[DataProvider('parserProvider')]
     public function testWithMultipleYamlDocuments(FrontMatterDataParserInterface $parser, bool $shouldTest): void
     {
         $this->skipIfParserNotAvailable($parser, $shouldTest);
@@ -154,9 +151,7 @@ EOT;
         $this->assertSame(9, $result->getDocument()->firstChild()->getStartLine());
     }
 
-    /**
-     * @dataProvider parserProvider
-     */
+    #[DataProvider('parserProvider')]
     public function testWithWindowsLineEndings(FrontMatterDataParserInterface $parser, bool $shouldTest): void
     {
         $this->skipIfParserNotAvailable($parser, $shouldTest);
@@ -182,9 +177,7 @@ EOT;
         $this->assertSame(5, $result->getDocument()->firstChild()->getStartLine());
     }
 
-    /**
-     * @dataProvider parserProvider
-     */
+    #[DataProvider('parserProvider')]
     public function testWithNoFrontMatter(FrontMatterDataParserInterface $parser, bool $shouldTest): void
     {
         $this->skipIfParserNotAvailable($parser, $shouldTest);
@@ -206,9 +199,7 @@ EOT;
         $this->assertSame(1, $result->getDocument()->firstChild()->getStartLine());
     }
 
-    /**
-     * @dataProvider parserProvider
-     */
+    #[DataProvider('parserProvider')]
     public function testWithInvalidYaml(FrontMatterDataParserInterface $parser, bool $shouldTest): void
     {
         $this->skipIfParserNotAvailable($parser, $shouldTest);
@@ -229,9 +220,7 @@ EOT;
         $converter->convert($markdown);
     }
 
-    /**
-     * @dataProvider parserProvider
-     */
+    #[DataProvider('parserProvider')]
     public function testRenderXml(FrontMatterDataParserInterface $parser, bool $shouldTest): void
     {
         $this->skipIfParserNotAvailable($parser, $shouldTest);
diff --git a/tests/functional/Extension/HeadingPermalink/HeadingPermalinkExtensionTest.php b/tests/functional/Extension/HeadingPermalink/HeadingPermalinkExtensionTest.php
index 86b25ca..9d4fe5a 100644
--- a/tests/functional/Extension/HeadingPermalink/HeadingPermalinkExtensionTest.php
+++ b/tests/functional/Extension/HeadingPermalink/HeadingPermalinkExtensionTest.php
@@ -22,13 +22,12 @@ use League\CommonMark\MarkdownConverter;
 use League\CommonMark\Parser\MarkdownParser;
 use League\CommonMark\Xml\XmlRenderer;
 use League\Config\Exception\InvalidConfigurationException;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class HeadingPermalinkExtensionTest extends TestCase
 {
-    /**
-     * @dataProvider dataProviderForTestHeadingPermalinksWithDefaultOptions
-     */
+    #[DataProvider('dataProviderForTestHeadingPermalinksWithDefaultOptions')]
     public function testHeadingPermalinksWithDefaultOptions(string $input, string $expected): void
     {
         $environment = new Environment();
@@ -49,9 +48,7 @@ final class HeadingPermalinkExtensionTest extends TestCase
         yield ["# Hello World!\n\n# Hello World!", \sprintf("<h1><a id=\"content-hello-world\" href=\"#content-hello-world\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">%s</a>Hello World!</h1>\n<h1><a id=\"content-hello-world-1\" href=\"#content-hello-world-1\" class=\"heading-permalink\" aria-hidden=\"true\" title=\"Permalink\">%s</a>Hello World!</h1>", HeadingPermalinkRenderer::DEFAULT_SYMBOL, HeadingPermalinkRenderer::DEFAULT_SYMBOL)];
     }
 
-    /**
-     * @dataProvider dataProviderForTestHeadingPermalinksWithCustomOptions
-     */
+    #[DataProvider('dataProviderForTestHeadingPermalinksWithCustomOptions')]
     public function testHeadingPermalinksWithCustomOptions(string $input, string $expected): void
     {
         $environment = new Environment([
diff --git a/tests/functional/Extension/InlinesOnly/InlinesOnlyFunctionalTest.php b/tests/functional/Extension/InlinesOnly/InlinesOnlyFunctionalTest.php
index 3cdd6eb..8056537 100644
--- a/tests/functional/Extension/InlinesOnly/InlinesOnlyFunctionalTest.php
+++ b/tests/functional/Extension/InlinesOnly/InlinesOnlyFunctionalTest.php
@@ -16,6 +16,7 @@ namespace League\CommonMark\Tests\Functional\Extension\InlinesOnly;
 use League\CommonMark\Environment\Environment;
 use League\CommonMark\Extension\InlinesOnly\InlinesOnlyExtension;
 use League\CommonMark\MarkdownConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 /**
@@ -33,11 +34,10 @@ final class InlinesOnlyFunctionalTest extends TestCase
     }
 
     /**
-     * @dataProvider dataProvider
-     *
      * @param string $markdown Markdown to parse
      * @param string $html     Expected result
      */
+    #[DataProvider('dataProvider')]
     public function testExample(string $markdown, string $html): void
     {
         $actualResult = $this->converter->convert($markdown);
diff --git a/tests/functional/Extension/Strikethrough/StrikethroughExtensionTest.php b/tests/functional/Extension/Strikethrough/StrikethroughExtensionTest.php
index 2c27fad..3bc9378 100644
--- a/tests/functional/Extension/Strikethrough/StrikethroughExtensionTest.php
+++ b/tests/functional/Extension/Strikethrough/StrikethroughExtensionTest.php
@@ -18,13 +18,12 @@ use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
 use League\CommonMark\Extension\Strikethrough\StrikethroughExtension;
 use League\CommonMark\Parser\MarkdownParser;
 use League\CommonMark\Renderer\HtmlRenderer;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class StrikethroughExtensionTest extends TestCase
 {
-    /**
-     * @dataProvider dataForIntegrationTest
-     */
+    #[DataProvider('dataForIntegrationTest')]
     public function testStrikethrough(string $string, string $expected): void
     {
         $environment = new Environment();
diff --git a/tests/functional/MaxDelimitersPerLineTest.php b/tests/functional/MaxDelimitersPerLineTest.php
index 44f6bbd..90542cf 100644
--- a/tests/functional/MaxDelimitersPerLineTest.php
+++ b/tests/functional/MaxDelimitersPerLineTest.php
@@ -14,13 +14,12 @@ declare(strict_types=1);
 namespace League\CommonMark\Tests\Functional;
 
 use League\CommonMark\CommonMarkConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class MaxDelimitersPerLineTest extends TestCase
 {
-    /**
-     * @dataProvider provideTestCases
-     */
+    #[DataProvider('provideTestCases')]
     public function testIt(string $input, int $maxDelimsPerLine, string $expectedOutput): void
     {
         $converter = new CommonMarkConverter(['max_delimiters_per_line' => $maxDelimsPerLine]);
diff --git a/tests/unit/Delimiter/DelimiterProcessorCollectionTest.php b/tests/unit/Delimiter/DelimiterProcessorCollectionTest.php
index ac14b2d..45f9c49 100644
--- a/tests/unit/Delimiter/DelimiterProcessorCollectionTest.php
+++ b/tests/unit/Delimiter/DelimiterProcessorCollectionTest.php
@@ -16,10 +16,12 @@ namespace League\CommonMark\Tests\Unit\Delimiter;
 use League\CommonMark\Delimiter\Processor\DelimiterProcessorCollection;
 use League\CommonMark\Delimiter\Processor\DelimiterProcessorInterface;
 use League\CommonMark\Exception\InvalidArgumentException;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class DelimiterProcessorCollectionTest extends TestCase
 {
+    #[RequiresPhpunit('< 12')]
     public function testAddNewProcessor(): void
     {
         $collection = new DelimiterProcessorCollection();
@@ -38,6 +40,7 @@ final class DelimiterProcessorCollectionTest extends TestCase
         $this->assertSame($processor2, $collection->getDelimiterProcessor('_'));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testAddProcessorForCharacterAlreadyRegistered(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/Attributes/Util/AttributesHelperTest.php b/tests/unit/Extension/Attributes/Util/AttributesHelperTest.php
index 84bdc51..592b2ec 100644
--- a/tests/unit/Extension/Attributes/Util/AttributesHelperTest.php
+++ b/tests/unit/Extension/Attributes/Util/AttributesHelperTest.php
@@ -20,15 +20,15 @@ use League\CommonMark\Node\Inline\AbstractInline;
 use League\CommonMark\Parser\Cursor;
 use League\CommonMark\Tests\Unit\Environment\FakeBlock1;
 use League\CommonMark\Tests\Unit\Environment\FakeInline1;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class AttributesHelperTest extends TestCase
 {
     /**
-     * @dataProvider dataForTestParseAttributes
-     *
      * @param array<string, mixed> $expectedResult
      */
+    #[DataProvider('dataForTestParseAttributes')]
     public function testParseAttributes(Cursor $input, array $expectedResult, string $expectedRemainder = ''): void
     {
         $this->assertSame($expectedResult, AttributesHelper::parseAttributes($input));
@@ -114,12 +114,11 @@ final class AttributesHelperTest extends TestCase
     }
 
     /**
-     * @dataProvider dataForTestMergeAttributes
-     *
      * @param AbstractBlock|AbstractInline|array<string, mixed> $a1
      * @param AbstractBlock|AbstractInline|array<string, mixed> $a2
      * @param array<string, mixed>                              $expected
      */
+    #[DataProvider('dataForTestMergeAttributes')]
     public function testMergeAttributes($a1, $a2, array $expected): void
     {
         $this->assertEquals($expected, AttributesHelper::mergeAttributes($a1, $a2));
@@ -196,12 +195,11 @@ final class AttributesHelperTest extends TestCase
     }
 
     /**
-     * @dataProvider dataForTestFilterAttributes
-     *
      * @param array<string, mixed> $attributes
      * @param list<string>         $allowList
      * @param array<string, mixed> $expected
      */
+     #[DataProvider('dataForTestFilterAttributes')]
     public function testFilterAttributes(array $attributes, array $allowList, bool $allowUnsafeLinks, array $expected): void
     {
         $this->assertEquals($expected, AttributesHelper::filterAttributes($attributes, $allowList, $allowUnsafeLinks));
diff --git a/tests/unit/Extension/CommonMark/Node/Inline/AbstractWebResourceTest.php b/tests/unit/Extension/CommonMark/Node/Inline/AbstractWebResourceTest.php
index f67d559..237ec07 100644
--- a/tests/unit/Extension/CommonMark/Node/Inline/AbstractWebResourceTest.php
+++ b/tests/unit/Extension/CommonMark/Node/Inline/AbstractWebResourceTest.php
@@ -17,6 +17,7 @@ declare(strict_types=1);
 namespace League\CommonMark\Tests\Unit\Extension\CommonMark\Node\Inline;
 
 use League\CommonMark\Extension\CommonMark\Node\Inline\AbstractWebResource;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class AbstractWebResourceTest extends TestCase
@@ -24,6 +25,7 @@ final class AbstractWebResourceTest extends TestCase
     /**
      * Tests the URL constructor parameter and getUrl() method
      */
+    #[RequiresPhpunit('< 12')]
     public function testConstructorAndGetUrl(): void
     {
         $url = 'https://www.example.com/foo';
@@ -39,6 +41,7 @@ final class AbstractWebResourceTest extends TestCase
     /**
      * Tests the setUrl() method
      */
+    #[RequiresPhpunit('< 12')]
     public function testSetUrl(): void
     {
         $url1 = 'https://www.example.com/foo';
diff --git a/tests/unit/Extension/CommonMark/Parser/Inline/BacktickParserTest.php b/tests/unit/Extension/CommonMark/Parser/Inline/BacktickParserTest.php
index 44dbd2c..4fc9b52 100644
--- a/tests/unit/Extension/CommonMark/Parser/Inline/BacktickParserTest.php
+++ b/tests/unit/Extension/CommonMark/Parser/Inline/BacktickParserTest.php
@@ -22,13 +22,12 @@ use League\CommonMark\Node\Block\Paragraph;
 use League\CommonMark\Parser\Cursor;
 use League\CommonMark\Parser\InlineParserContext;
 use League\CommonMark\Reference\ReferenceMapInterface;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class BacktickParserTest extends TestCase
 {
-    /**
-     * @dataProvider dataForTestParse
-     */
+    #[DataProvider('dataForTestParse')]
     public function testParse(string $string, string $expectedContents): void
     {
         $paragraph     = new Paragraph();
diff --git a/tests/unit/Extension/CommonMark/Renderer/Block/BlockQuoteRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Block/BlockQuoteRendererTest.php
index 3150773..85c71c8 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Block/BlockQuoteRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Block/BlockQuoteRendererTest.php
@@ -22,6 +22,7 @@ use League\CommonMark\Extension\CommonMark\Renderer\Block\BlockQuoteRenderer;
 use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class BlockQuoteRendererTest extends TestCase
@@ -62,6 +63,7 @@ final class BlockQuoteRendererTest extends TestCase
         $this->assertEquals(['id' => 'id'], $result->getAllAttributes());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Block/FencedCodeRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Block/FencedCodeRendererTest.php
index c47e7e6..88ccb06 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Block/FencedCodeRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Block/FencedCodeRendererTest.php
@@ -23,6 +23,7 @@ use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Node\Block\Document;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class FencedCodeRendererTest extends TestCase
@@ -83,6 +84,7 @@ final class FencedCodeRendererTest extends TestCase
         $this->assertStringContainsString('hello world', $code->getContents(true));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Block/HeadingRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Block/HeadingRendererTest.php
index 616800c..238ba53 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Block/HeadingRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Block/HeadingRendererTest.php
@@ -22,6 +22,8 @@ use League\CommonMark\Extension\CommonMark\Renderer\Block\HeadingRenderer;
 use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class HeadingRendererTest extends TestCase
@@ -33,9 +35,7 @@ final class HeadingRendererTest extends TestCase
         $this->renderer = new HeadingRenderer();
     }
 
-    /**
-     * @dataProvider dataForTestRender
-     */
+    #[DataProvider('dataForTestRender')]
     public function testRender(int $level, string $expectedTag): void
     {
         $block = new Heading($level);
@@ -66,6 +66,7 @@ final class HeadingRendererTest extends TestCase
         ];
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Block/HtmlBlockRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Block/HtmlBlockRendererTest.php
index eea8d1d..298b562 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Block/HtmlBlockRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Block/HtmlBlockRendererTest.php
@@ -25,6 +25,7 @@ use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlFilter;
 use League\Config\ConfigurationInterface;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class HtmlBlockRendererTest extends TestCase
@@ -101,6 +102,7 @@ final class HtmlBlockRendererTest extends TestCase
         $this->assertEquals('', $result);
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Block/IndentedCodeRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Block/IndentedCodeRendererTest.php
index 558108a..ec45cf4 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Block/IndentedCodeRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Block/IndentedCodeRendererTest.php
@@ -23,6 +23,7 @@ use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Node\Block\Document;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class IndentedCodeRendererTest extends TestCase
@@ -59,6 +60,7 @@ final class IndentedCodeRendererTest extends TestCase
         $this->assertStringContainsString('hello world', $code->getContents(true));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Block/ListBlockRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Block/ListBlockRendererTest.php
index b145f8c..2d82a4a 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Block/ListBlockRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Block/ListBlockRendererTest.php
@@ -23,6 +23,8 @@ use League\CommonMark\Extension\CommonMark\Renderer\Block\ListBlockRenderer;
 use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class ListBlockRendererTest extends TestCase
@@ -35,10 +37,9 @@ final class ListBlockRendererTest extends TestCase
     }
 
     /**
-     * @dataProvider dataForTestOrderedListStartingNumber
-     *
      * @param mixed $expectedAttributeValue
      */
+    #[DataProvider('dataForTestOrderedListStartingNumber')]
     public function testRenderOrderedList(?int $listStart = null, $expectedAttributeValue = null): void
     {
         $list         = $this->createOrderedListBlock($listStart);
@@ -82,6 +83,7 @@ final class ListBlockRendererTest extends TestCase
         $this->assertEquals(['id' => 'foo'], $result->getAllAttributes());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Block/ListItemRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Block/ListItemRendererTest.php
index 7eeed7b..de52617 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Block/ListItemRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Block/ListItemRendererTest.php
@@ -23,6 +23,7 @@ use League\CommonMark\Extension\CommonMark\Renderer\Block\ListItemRenderer;
 use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class ListItemRendererTest extends TestCase
@@ -48,6 +49,7 @@ final class ListItemRendererTest extends TestCase
         $this->assertEquals('<li id="foo">::children::</li>', $result->__toString());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Block/ThematicBreakRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Block/ThematicBreakRendererTest.php
index 0dc8a70..0893ce2 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Block/ThematicBreakRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Block/ThematicBreakRendererTest.php
@@ -22,6 +22,7 @@ use League\CommonMark\Extension\CommonMark\Renderer\Block\ThematicBreakRenderer;
 use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class ThematicBreakRendererTest extends TestCase
@@ -44,6 +45,7 @@ final class ThematicBreakRendererTest extends TestCase
         $this->assertEquals('hr', $result->getTagName());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Inline/CodeRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Inline/CodeRendererTest.php
index 788e849..8c7b27e 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Inline/CodeRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Inline/CodeRendererTest.php
@@ -22,6 +22,7 @@ use League\CommonMark\Extension\CommonMark\Renderer\Inline\CodeRenderer;
 use League\CommonMark\Node\Inline\AbstractInline;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class CodeRendererTest extends TestCase
@@ -47,6 +48,7 @@ final class CodeRendererTest extends TestCase
         $this->assertEquals(['id' => 'foo'], $result->getAllAttributes());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Inline/EmphasisRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Inline/EmphasisRendererTest.php
index d641362..201caab 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Inline/EmphasisRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Inline/EmphasisRendererTest.php
@@ -22,6 +22,7 @@ use League\CommonMark\Extension\CommonMark\Renderer\Inline\EmphasisRenderer;
 use League\CommonMark\Node\Inline\AbstractInline;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class EmphasisRendererTest extends TestCase
@@ -48,6 +49,7 @@ final class EmphasisRendererTest extends TestCase
         $this->assertEquals(['id' => 'foo'], $result->getAllAttributes());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Inline/HtmlInlineRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Inline/HtmlInlineRendererTest.php
index 89fcd89..89e0afd 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Inline/HtmlInlineRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Inline/HtmlInlineRendererTest.php
@@ -25,6 +25,7 @@ use League\CommonMark\Node\Inline\AbstractInline;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlFilter;
 use League\Config\ConfigurationInterface;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class HtmlInlineRendererTest extends TestCase
@@ -93,6 +94,7 @@ final class HtmlInlineRendererTest extends TestCase
         $this->assertEquals('', $result);
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Inline/ImageRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Inline/ImageRendererTest.php
index c062dff..2a8d9c9 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Inline/ImageRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Inline/ImageRendererTest.php
@@ -27,6 +27,7 @@ use League\CommonMark\Node\Inline\Text;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
 use League\Config\ConfigurationInterface;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class ImageRendererTest extends TestCase
@@ -120,6 +121,7 @@ final class ImageRendererTest extends TestCase
         $this->assertEquals('', $result->getAttribute('src'));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Inline/LinkRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Inline/LinkRendererTest.php
index f73699f..4a3d717 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Inline/LinkRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Inline/LinkRendererTest.php
@@ -25,6 +25,7 @@ use League\CommonMark\Node\Inline\AbstractInline;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
 use League\Config\ConfigurationInterface;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class LinkRendererTest extends TestCase
@@ -97,6 +98,7 @@ final class LinkRendererTest extends TestCase
         $this->assertEquals('', $result->getAttribute('href'));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/CommonMark/Renderer/Inline/StrongRendererTest.php b/tests/unit/Extension/CommonMark/Renderer/Inline/StrongRendererTest.php
index e2b15b1..57ec49d 100644
--- a/tests/unit/Extension/CommonMark/Renderer/Inline/StrongRendererTest.php
+++ b/tests/unit/Extension/CommonMark/Renderer/Inline/StrongRendererTest.php
@@ -22,6 +22,7 @@ use League\CommonMark\Extension\CommonMark\Renderer\Inline\StrongRenderer;
 use League\CommonMark\Node\Inline\AbstractInline;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class StrongRendererTest extends TestCase
@@ -48,6 +49,7 @@ final class StrongRendererTest extends TestCase
         $this->assertEquals(['id' => 'foo'], $result->getAllAttributes());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/DescriptionList/Renderer/DescriptionListRendererTest.php b/tests/unit/Extension/DescriptionList/Renderer/DescriptionListRendererTest.php
index 2a8f1a5..b9665fe 100644
--- a/tests/unit/Extension/DescriptionList/Renderer/DescriptionListRendererTest.php
+++ b/tests/unit/Extension/DescriptionList/Renderer/DescriptionListRendererTest.php
@@ -21,6 +21,7 @@ use League\CommonMark\Extension\DescriptionList\Renderer\DescriptionListRenderer
 use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class DescriptionListRendererTest extends TestCase
@@ -45,6 +46,7 @@ final class DescriptionListRendererTest extends TestCase
         $this->assertStringContainsString('::children::', $result->getContents(true));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/DescriptionList/Renderer/DescriptionRendererTest.php b/tests/unit/Extension/DescriptionList/Renderer/DescriptionRendererTest.php
index 0b9e5d4..0c3b0ba 100644
--- a/tests/unit/Extension/DescriptionList/Renderer/DescriptionRendererTest.php
+++ b/tests/unit/Extension/DescriptionList/Renderer/DescriptionRendererTest.php
@@ -20,6 +20,7 @@ use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Node\Block\Paragraph;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class DescriptionRendererTest extends TestCase
@@ -43,6 +44,7 @@ final class DescriptionRendererTest extends TestCase
         $this->assertStringContainsString('::children::', $result->getContents(true));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/DescriptionList/Renderer/DescriptionTermRendererTest.php b/tests/unit/Extension/DescriptionList/Renderer/DescriptionTermRendererTest.php
index 41ababa..4eed4e0 100644
--- a/tests/unit/Extension/DescriptionList/Renderer/DescriptionTermRendererTest.php
+++ b/tests/unit/Extension/DescriptionList/Renderer/DescriptionTermRendererTest.php
@@ -20,6 +20,7 @@ use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Node\Inline\Text;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class DescriptionTermRendererTest extends TestCase
@@ -43,6 +44,7 @@ final class DescriptionTermRendererTest extends TestCase
         $this->assertStringContainsString('::children::', $result->getContents(true));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Extension/DisallowedRawHtml/DisallowedRawHtmlRendererTest.php b/tests/unit/Extension/DisallowedRawHtml/DisallowedRawHtmlRendererTest.php
index c1557fe..66c4bad 100644
--- a/tests/unit/Extension/DisallowedRawHtml/DisallowedRawHtmlRendererTest.php
+++ b/tests/unit/Extension/DisallowedRawHtml/DisallowedRawHtmlRendererTest.php
@@ -20,6 +20,7 @@ use League\CommonMark\Node\Node;
 use League\CommonMark\Renderer\NodeRendererInterface;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\Config\ConfigurationInterface;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class DisallowedRawHtmlRendererTest extends TestCase
@@ -35,9 +36,7 @@ final class DisallowedRawHtmlRendererTest extends TestCase
         $this->assertSame('', $renderer->render($this->createMock(Node::class), new FakeChildNodeRenderer()));
     }
 
-    /**
-     * @dataProvider dataProviderForTestWithDefaultSettings
-     */
+    #[DataProvider('dataProviderForTestWithDefaultSettings')]
     public function testWithDefaultSettings(string $input, string $expectedOutput): void
     {
         $mockRenderer = $this->createMock(NodeRendererInterface::class);
@@ -75,9 +74,7 @@ final class DisallowedRawHtmlRendererTest extends TestCase
         yield ['<strong>', '<strong>'];
     }
 
-    /**
-     * @dataProvider dataProviderForTestWithCustomSettings
-     */
+    #[DataProvider('dataProviderForTestWithCustomSettings')]
     public function testWithCustomSettings(string $input, string $expectedOutput): void
     {
         $mockRenderer = $this->createMock(NodeRendererInterface::class);
diff --git a/tests/unit/Extension/Embed/EmbedParserTest.php b/tests/unit/Extension/Embed/EmbedParserTest.php
index b384e6c..071de0d 100644
--- a/tests/unit/Extension/Embed/EmbedParserTest.php
+++ b/tests/unit/Extension/Embed/EmbedParserTest.php
@@ -16,10 +16,12 @@ namespace League\CommonMark\Tests\Unit\Extension\Embed;
 use League\CommonMark\Extension\Embed\Embed;
 use League\CommonMark\Extension\Embed\EmbedParser;
 use League\CommonMark\Node\Block\AbstractBlock;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class EmbedParserTest extends TestCase
 {
+    #[RequiresPhpunit('< 12')]
     public function testEverything(): void
     {
         $url    = 'https://www.youtube.com/watch?v=dQw4w9WgXcQ';
diff --git a/tests/unit/Extension/Embed/EmbedProcessorTest.php b/tests/unit/Extension/Embed/EmbedProcessorTest.php
index 0130a16..ac03060 100644
--- a/tests/unit/Extension/Embed/EmbedProcessorTest.php
+++ b/tests/unit/Extension/Embed/EmbedProcessorTest.php
@@ -20,6 +20,7 @@ use League\CommonMark\Extension\Embed\EmbedAdapterInterface;
 use League\CommonMark\Extension\Embed\EmbedProcessor;
 use League\CommonMark\Node\Block\Document;
 use League\CommonMark\Node\Block\Paragraph;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class EmbedProcessorTest extends TestCase
@@ -52,6 +53,7 @@ final class EmbedProcessorTest extends TestCase
         $processor(new DocumentParsedEvent($document));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testWithFallbackRemove(): void
     {
         // A fake adapter that doesn't do anything (like updating the embed codes)
@@ -68,6 +70,7 @@ final class EmbedProcessorTest extends TestCase
         $this->assertFalse($document->hasChildren());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testWithFallbackLink(): void
     {
         // A fake adapter that doesn't do anything (like updating the embed codes)
diff --git a/tests/unit/Extension/Embed/EmbedRendererTest.php b/tests/unit/Extension/Embed/EmbedRendererTest.php
index f984ec5..2cdd80e 100644
--- a/tests/unit/Extension/Embed/EmbedRendererTest.php
+++ b/tests/unit/Extension/Embed/EmbedRendererTest.php
@@ -16,10 +16,12 @@ namespace League\CommonMark\Tests\Unit\Extension\Embed;
 use League\CommonMark\Extension\Embed\Embed;
 use League\CommonMark\Extension\Embed\EmbedRenderer;
 use League\CommonMark\Renderer\ChildNodeRendererInterface;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class EmbedRendererTest extends TestCase
 {
+    #[RequiresPhpunit('< 12')]
     public function testRender(): void
     {
         $renderer = new EmbedRenderer();
diff --git a/tests/unit/Extension/ExternalLink/ExternalLinkProcessorTest.php b/tests/unit/Extension/ExternalLink/ExternalLinkProcessorTest.php
index 6a93b14..74a75cf 100644
--- a/tests/unit/Extension/ExternalLink/ExternalLinkProcessorTest.php
+++ b/tests/unit/Extension/ExternalLink/ExternalLinkProcessorTest.php
@@ -18,6 +18,7 @@ use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;
 use League\CommonMark\Extension\ExternalLink\ExternalLinkExtension;
 use League\CommonMark\Extension\ExternalLink\ExternalLinkProcessor;
 use League\CommonMark\MarkdownConverter;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class ExternalLinkProcessorTest extends TestCase
@@ -70,10 +71,9 @@ final class ExternalLinkProcessorTest extends TestCase
     }
 
     /**
-     * @dataProvider dataProviderForTestHostMatches
-     *
      * @param mixed $compareTo
      */
+    #[DataProvider('dataProviderForTestHostMatches')]
     public function testHostMatches(string $host, $compareTo, bool $expected): void
     {
         $this->assertEquals($expected, ExternalLinkProcessor::hostMatches($host, $compareTo));
@@ -100,9 +100,7 @@ final class ExternalLinkProcessorTest extends TestCase
         yield ['www.colinodell.com', ['/colinodell\.com/', 'aol.com'], true];
     }
 
-    /**
-     * @dataProvider dataProviderForTestRelOptions
-     */
+    #[DataProvider('dataProviderForTestRelOptions')]
     public function testRelOptions(string $nofollow, string $noopener, string $noreferrer, string $expectedOutput): void
     {
         $config = [
diff --git a/tests/unit/Extension/FrontMatter/Data/SymfonyYamlFrontMatterParserTest.php b/tests/unit/Extension/FrontMatter/Data/SymfonyYamlFrontMatterParserTest.php
index 73ea6a2..f4bd5ea 100644
--- a/tests/unit/Extension/FrontMatter/Data/SymfonyYamlFrontMatterParserTest.php
+++ b/tests/unit/Extension/FrontMatter/Data/SymfonyYamlFrontMatterParserTest.php
@@ -15,16 +15,16 @@ namespace League\CommonMark\Tests\Unit\Extension\FrontMatter\Data;
 
 use League\CommonMark\Extension\FrontMatter\Data\SymfonyYamlFrontMatterParser;
 use League\CommonMark\Extension\FrontMatter\Exception\InvalidFrontMatterException;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use PackageVersions\Versions as InstalledComposerPackages;
 
 final class SymfonyYamlFrontMatterParserTest extends TestCase
 {
     /**
-     * @dataProvider provideValidYamlExamples
-     *
      * @param mixed $expected
      */
+    #[DataProvider('provideValidYamlExamples')]
     public function testParseWithValidYaml(string $input, $expected): void
     {
         $dataParser = new SymfonyYamlFrontMatterParser();
diff --git a/tests/unit/Extension/SmartPunct/ReplaceUnpairedQuotesListenerTest.php b/tests/unit/Extension/SmartPunct/ReplaceUnpairedQuotesListenerTest.php
index c15f722..dedfb4a 100644
--- a/tests/unit/Extension/SmartPunct/ReplaceUnpairedQuotesListenerTest.php
+++ b/tests/unit/Extension/SmartPunct/ReplaceUnpairedQuotesListenerTest.php
@@ -21,15 +21,15 @@ use League\CommonMark\Node\Block\Document;
 use League\CommonMark\Node\Block\Paragraph;
 use League\CommonMark\Node\Inline\Text;
 use League\CommonMark\Node\Node;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class ReplaceUnpairedQuotesListenerTest extends TestCase
 {
     /**
-     * @dataProvider provideTestData
-     *
      * @param array<int, Node> $paragraphNodes
      */
+    #[DataProvider('provideTestData')]
     public function testWithConsecutiveMerging(array $paragraphNodes, string $expectedText): void
     {
         $document = new Document();
diff --git a/tests/unit/Extension/TaskList/TaskListItemMarkerRendererTest.php b/tests/unit/Extension/TaskList/TaskListItemMarkerRendererTest.php
index 6f6ec64..988478b 100644
--- a/tests/unit/Extension/TaskList/TaskListItemMarkerRendererTest.php
+++ b/tests/unit/Extension/TaskList/TaskListItemMarkerRendererTest.php
@@ -19,10 +19,12 @@ use League\CommonMark\Extension\TaskList\TaskListItemMarkerRenderer;
 use League\CommonMark\Node\Inline\AbstractInline;
 use League\CommonMark\Renderer\ChildNodeRendererInterface;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class TaskListItemMarkerRendererTest extends TestCase
 {
+    #[RequiresPhpunit('< 12')]
     public function testWithCheckedItem(): void
     {
         $renderer     = new TaskListItemMarkerRenderer();
@@ -38,6 +40,7 @@ final class TaskListItemMarkerRendererTest extends TestCase
         $this->assertNotNull($result->getAttribute('checked'));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testWithUncheckedItem(): void
     {
         $renderer     = new TaskListItemMarkerRenderer();
@@ -53,6 +56,7 @@ final class TaskListItemMarkerRendererTest extends TestCase
         $this->assertNull($result->getAttribute('checked'));
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testWithInvalidInlineElement(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Node/Block/AbstractBlockTest.php b/tests/unit/Node/Block/AbstractBlockTest.php
index d71bf05..7976dcb 100644
--- a/tests/unit/Node/Block/AbstractBlockTest.php
+++ b/tests/unit/Node/Block/AbstractBlockTest.php
@@ -19,10 +19,12 @@ namespace League\CommonMark\Tests\Unit\Node\Block;
 use League\CommonMark\Exception\InvalidArgumentException;
 use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Node\Inline\AbstractInline;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class AbstractBlockTest extends TestCase
 {
+    #[RequiresPhpunit('< 12')]
     public function testSetParent(): void
     {
         $block = $this->getMockForAbstractClass(AbstractBlock::class);
@@ -35,6 +37,7 @@ final class AbstractBlockTest extends TestCase
         $this->assertNull($block->parent());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testSetParentWithInvalidNode(): void
     {
         $this->expectException(InvalidArgumentException::class);
@@ -45,6 +48,7 @@ final class AbstractBlockTest extends TestCase
         self::getMethod('setParent')->invoke($block, $inline);
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testGetStartLine(): void
     {
         $block = $this->getMockForAbstractClass(AbstractBlock::class);
@@ -53,6 +57,7 @@ final class AbstractBlockTest extends TestCase
         $this->assertEquals(42, $block->getStartLine());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testGetSetEndLine(): void
     {
         $block = $this->getMockForAbstractClass(AbstractBlock::class);
diff --git a/tests/unit/Normalizer/SlugNormalizerTest.php b/tests/unit/Normalizer/SlugNormalizerTest.php
index 0a71927..9f21af2 100644
--- a/tests/unit/Normalizer/SlugNormalizerTest.php
+++ b/tests/unit/Normalizer/SlugNormalizerTest.php
@@ -15,13 +15,12 @@ namespace League\CommonMark\Tests\Unit\Normalizer;
 
 use League\CommonMark\Normalizer\SlugNormalizer;
 use League\Config\ConfigurationInterface;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class SlugNormalizerTest extends TestCase
 {
-    /**
-     * @dataProvider dataProviderForTestNormalize
-     */
+    #[DataProvider('dataProviderForTestNormalize')]
     public function testNormalize(string $input, string $expectedOutput): void
     {
         $this->assertSame($expectedOutput, (new SlugNormalizer())->normalize($input));
@@ -70,9 +69,7 @@ final class SlugNormalizerTest extends TestCase
         yield ['試験タイトル', '試験タイトル'];
     }
 
-    /**
-     * @dataProvider dataProviderForTestNormalizeWithMaxLength
-     */
+    #[DataProvider('dataProviderForTestNormalizeWithMaxLength')]
     public function testNormalizeWithMaxLength(string $input, int $maxLength, string $expectedOutput): void
     {
         $this->assertSame($expectedOutput, (new SlugNormalizer())->normalize($input, ['length' => $maxLength]));
diff --git a/tests/unit/Normalizer/TextNormalizerTest.php b/tests/unit/Normalizer/TextNormalizerTest.php
index 945cf04..40f18dd 100644
--- a/tests/unit/Normalizer/TextNormalizerTest.php
+++ b/tests/unit/Normalizer/TextNormalizerTest.php
@@ -14,13 +14,12 @@ declare(strict_types=1);
 namespace League\CommonMark\Tests\Unit\Normalizer;
 
 use League\CommonMark\Normalizer\TextNormalizer;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class TextNormalizerTest extends TestCase
 {
-    /**
-     * @dataProvider dataProviderForTestNormalize
-     */
+    #[DataProvider('dataProviderForTestNormalize')]
     public function testNormalize(string $input, string $expectedOutput): void
     {
         $this->assertEquals($expectedOutput, (new TextNormalizer())->normalize($input));
diff --git a/tests/unit/Parser/CursorTest.php b/tests/unit/Parser/CursorTest.php
index 4fddbb0..75095c8 100644
--- a/tests/unit/Parser/CursorTest.php
+++ b/tests/unit/Parser/CursorTest.php
@@ -15,6 +15,7 @@ namespace League\CommonMark\Tests\Unit\Parser;
 
 use League\CommonMark\Exception\UnexpectedEncodingException;
 use League\CommonMark\Parser\Cursor;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class CursorTest extends TestCase
@@ -32,9 +33,7 @@ final class CursorTest extends TestCase
         new Cursor(\hex2bin('A5A5A5'));
     }
 
-    /**
-     * @dataProvider dataForTestingNextNonSpaceMethods
-     */
+    #[DataProvider('dataForTestingNextNonSpaceMethods')]
     public function testGetNextNonSpacePosition(string $string, int $expectedPosition, ?string $expectedCharacter): void
     {
         $cursor = new Cursor($string);
@@ -43,9 +42,7 @@ final class CursorTest extends TestCase
         $this->assertEquals($expectedPosition, $cursor->getNextNonSpacePosition());
     }
 
-    /**
-     * @dataProvider dataForTestingNextNonSpaceMethods
-     */
+    #[DataProvider('dataForTestingNextNonSpaceMethods')]
     public function testGetNextNonSpaceCharacter(string $string, int $expectedPosition, ?string $expectedCharacter): void
     {
         $cursor = new Cursor($string);
@@ -71,9 +68,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForGetIndentTest
-     */
+    #[DataProvider('dataForGetIndentTest')]
     public function testGetIndent(string $string, int $position, int $expectedValue): void
     {
         $cursor = new Cursor($string);
@@ -110,9 +105,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForGetCharacterTest
-     */
+    #[DataProvider('dataForGetCharacterTest')]
     public function testGetCharacter(string $string, ?int $index, string $expectedValue): void
     {
         $cursor = new Cursor($string);
@@ -120,9 +113,7 @@ final class CursorTest extends TestCase
         $this->assertEquals($expectedValue, $cursor->getCharacter($index));
     }
 
-    /**
-     * @dataProvider dataForGetCharacterTest
-     */
+    #[DataProvider('dataForGetCharacterTest')]
     public function testGetCurrentCharacter(string $string, ?int $index, string $expectedValue): void
     {
         $cursor = new Cursor($string);
@@ -154,9 +145,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForPeekTest
-     */
+    #[DataProvider('dataForPeekTest')]
     public function testPeek(string $string, int $position, string $expectedValue): void
     {
         $cursor = new Cursor($string);
@@ -180,9 +169,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForIsLineBlankTest
-     */
+    #[DataProvider('dataForIsLineBlankTest')]
     public function testIsLineBlank(string $string, bool $expectedValue): void
     {
         $cursor = new Cursor($string);
@@ -205,9 +192,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForAdvanceTest
-     */
+    #[DataProvider('dataForAdvanceTest')]
     public function testAdvance(string $string, int $numberOfAdvances, int $expectedPosition): void
     {
         $cursor = new Cursor($string);
@@ -241,9 +226,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForAdvanceTestBy
-     */
+    #[DataProvider('dataForAdvanceTestBy')]
     public function testAdvanceBy(string $string, int $advance, int $expectedPosition): void
     {
         $cursor = new Cursor($string);
@@ -301,9 +284,7 @@ final class CursorTest extends TestCase
         $this->assertEquals(7, $cursor->getColumn());
     }
 
-    /**
-     * @dataProvider dataForAdvanceToNextNonSpaceTest
-     */
+    #[DataProvider('dataForAdvanceToNextNonSpaceTest')]
     public function testAdvanceToNextNonSpace(string $subject, int $startPos, int $expectedResult): void
     {
         $cursor = new Cursor($subject);
@@ -342,9 +323,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForAdvanceToNextNonSpaceOrNewlineTest
-     */
+    #[DataProvider('dataForAdvanceToNextNonSpaceOrNewlineTest')]
     public function testAdvanceToNextNonSpaceOrNewline(string $subject, int $startPos, int $expectedResult): void
     {
         $cursor = new Cursor($subject);
@@ -380,9 +359,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForGetRemainderTest
-     */
+    #[DataProvider('dataForGetRemainderTest')]
     public function testGetRemainder(string $string, int $position, string $expectedResult): void
     {
         $cursor = new Cursor($string);
@@ -407,10 +384,9 @@ final class CursorTest extends TestCase
     }
 
     /**
-     * @dataProvider dataForIsAtEndTest
-     *
      * @param int|false|null $advanceBy
      */
+    #[DataProvider('dataForIsAtEndTest')]
     public function testIsAtEnd(string $string, $advanceBy, bool $expectedValue): void
     {
         $cursor = new Cursor($string);
@@ -439,9 +415,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForTestMatch
-     */
+    #[DataProvider('dataForTestMatch')]
     public function testMatch(string $string, string $regex, int $initialPosition, int $expectedPosition, string $expectedResult): void
     {
         $cursor = new Cursor($string);
@@ -469,9 +443,7 @@ final class CursorTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider dataForTestGetSubstring
-     */
+    #[DataProvider('dataForTestGetSubstring')]
     public function testGetSubstring(string $string, int $start, ?int $length, string $expectedResult): void
     {
         $cursor = new Cursor($string);
diff --git a/tests/unit/Parser/Inline/InlineParserMatchTest.php b/tests/unit/Parser/Inline/InlineParserMatchTest.php
index 864cec5..eb72912 100644
--- a/tests/unit/Parser/Inline/InlineParserMatchTest.php
+++ b/tests/unit/Parser/Inline/InlineParserMatchTest.php
@@ -15,13 +15,12 @@ namespace League\CommonMark\Tests\Unit\Parser\Inline;
 
 use League\CommonMark\Exception\InvalidArgumentException;
 use League\CommonMark\Parser\Inline\InlineParserMatch;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class InlineParserMatchTest extends TestCase
 {
-    /**
-     * @dataProvider provideDataForTesting
-     */
+    #[DataProvider('provideDataForTesting')]
     public function testGetRegex(InlineParserMatch $definition, string $expectedRegex): void
     {
         $this->assertSame($expectedRegex, $definition->getRegex());
diff --git a/tests/unit/Reference/ReferenceMapTest.php b/tests/unit/Reference/ReferenceMapTest.php
index acee287..f9e09e7 100644
--- a/tests/unit/Reference/ReferenceMapTest.php
+++ b/tests/unit/Reference/ReferenceMapTest.php
@@ -18,6 +18,7 @@ namespace League\CommonMark\Tests\Unit\Reference;
 
 use League\CommonMark\Reference\Reference;
 use League\CommonMark\Reference\ReferenceMap;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class ReferenceMapTest extends TestCase
@@ -33,9 +34,7 @@ final class ReferenceMapTest extends TestCase
         $this->assertSame($reference, $map->get('foo'));
     }
 
-    /**
-     * @dataProvider provideLabelsForCaseFoldingTest
-     */
+    #[DataProvider('provideLabelsForCaseFoldingTest')]
     public function testUnicodeCaseFolding(string $label): void
     {
         $map = new ReferenceMap();
diff --git a/tests/unit/Renderer/Block/DocumentRendererTest.php b/tests/unit/Renderer/Block/DocumentRendererTest.php
index 2ea82bb..60a41b6 100644
--- a/tests/unit/Renderer/Block/DocumentRendererTest.php
+++ b/tests/unit/Renderer/Block/DocumentRendererTest.php
@@ -22,6 +22,7 @@ use League\CommonMark\Node\Block\AbstractBlock;
 use League\CommonMark\Node\Block\Document;
 use League\CommonMark\Renderer\Block\DocumentRenderer;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class DocumentRendererTest extends TestCase
@@ -56,6 +57,7 @@ final class DocumentRendererTest extends TestCase
         $this->assertStringContainsString('::children::', $result);
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Renderer/Block/HtmlDecoratorTest.php b/tests/unit/Renderer/Block/HtmlDecoratorTest.php
index cee2251..c20cb69 100644
--- a/tests/unit/Renderer/Block/HtmlDecoratorTest.php
+++ b/tests/unit/Renderer/Block/HtmlDecoratorTest.php
@@ -20,10 +20,12 @@ use League\CommonMark\Node\Node;
 use League\CommonMark\Renderer\ChildNodeRendererInterface;
 use League\CommonMark\Renderer\HtmlDecorator;
 use League\CommonMark\Renderer\NodeRendererInterface;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class HtmlDecoratorTest extends TestCase
 {
+    #[RequiresPhpunit('< 12')]
     public function testRender(): void
     {
         $inner = $this->getMockForAbstractClass(NodeRendererInterface::class);
diff --git a/tests/unit/Renderer/Block/ParagraphRendererTest.php b/tests/unit/Renderer/Block/ParagraphRendererTest.php
index a11c00a..b6d6f21 100644
--- a/tests/unit/Renderer/Block/ParagraphRendererTest.php
+++ b/tests/unit/Renderer/Block/ParagraphRendererTest.php
@@ -22,6 +22,7 @@ use League\CommonMark\Node\Block\Paragraph;
 use League\CommonMark\Renderer\Block\ParagraphRenderer;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\CommonMark\Util\HtmlElement;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class ParagraphRendererTest extends TestCase
@@ -48,6 +49,7 @@ final class ParagraphRendererTest extends TestCase
         $this->assertEquals(['id' => 'foo'], $result->getAllAttributes());
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Renderer/Inline/NewlineRendererTest.php b/tests/unit/Renderer/Inline/NewlineRendererTest.php
index 2f720c8..29b4589 100644
--- a/tests/unit/Renderer/Inline/NewlineRendererTest.php
+++ b/tests/unit/Renderer/Inline/NewlineRendererTest.php
@@ -24,6 +24,7 @@ use League\CommonMark\Node\Inline\Newline;
 use League\CommonMark\Renderer\Inline\NewlineRenderer;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
 use League\Config\ConfigurationInterface;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class NewlineRendererTest extends TestCase
@@ -58,6 +59,7 @@ final class NewlineRendererTest extends TestCase
         $this->assertStringContainsString('::softbreakChar::', $result);
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Renderer/Inline/TextRendererTest.php b/tests/unit/Renderer/Inline/TextRendererTest.php
index 370ed0d..3a5986b 100644
--- a/tests/unit/Renderer/Inline/TextRendererTest.php
+++ b/tests/unit/Renderer/Inline/TextRendererTest.php
@@ -21,6 +21,7 @@ use League\CommonMark\Node\Inline\AbstractInline;
 use League\CommonMark\Node\Inline\Text;
 use League\CommonMark\Renderer\Inline\TextRenderer;
 use League\CommonMark\Tests\Unit\Renderer\FakeChildNodeRenderer;
+use PHPUnit\Framework\Attributes\RequiresPhpunit;
 use PHPUnit\Framework\TestCase;
 
 final class TextRendererTest extends TestCase
@@ -43,6 +44,7 @@ final class TextRendererTest extends TestCase
         $this->assertStringContainsString('foo bar', $result);
     }
 
+    #[RequiresPhpunit('< 12')]
     public function testRenderWithInvalidType(): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Util/Html5EntityDecoderTest.php b/tests/unit/Util/Html5EntityDecoderTest.php
index a3435a8..c163fd0 100644
--- a/tests/unit/Util/Html5EntityDecoderTest.php
+++ b/tests/unit/Util/Html5EntityDecoderTest.php
@@ -5,6 +5,7 @@ declare(strict_types=1);
 namespace League\CommonMark\Tests\Unit\Util;
 
 use League\CommonMark\Util\Html5EntityDecoder;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class Html5EntityDecoderTest extends TestCase
@@ -19,9 +20,7 @@ final class Html5EntityDecoderTest extends TestCase
         $this->assertEquals('Ď', Html5EntityDecoder::decode('&Dcaron;'));
     }
 
-    /**
-     * @dataProvider htmlEntityDataProvider
-     */
+    #[DataProvider('htmlEntityDataProvider')]
     public function testAllHtml5EntityReferences(string $entity, string $decoded): void
     {
         $this->assertEquals($decoded, \html_entity_decode($entity, ENT_QUOTES | ENT_HTML5, 'UTF-8'), \sprintf('Failed parsing the "%s" entity', $entity));
diff --git a/tests/unit/Util/LinkParserHelperTest.php b/tests/unit/Util/LinkParserHelperTest.php
index 87db7ac..11a5539 100644
--- a/tests/unit/Util/LinkParserHelperTest.php
+++ b/tests/unit/Util/LinkParserHelperTest.php
@@ -15,13 +15,12 @@ namespace League\CommonMark\Tests\Unit\Util;
 
 use League\CommonMark\Parser\Cursor;
 use League\CommonMark\Util\LinkParserHelper;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class LinkParserHelperTest extends TestCase
 {
-    /**
-     * @dataProvider dataProviderForTestParseLinkDestination
-     */
+    #[DataProvider('dataProviderForTestParseLinkDestination')]
     public function testParseLinkDestination(string $input, string $expected): void
     {
         $cursor = new Cursor($input);
@@ -39,9 +38,7 @@ final class LinkParserHelperTest extends TestCase
         yield ['\\b\\', '%5Cb%5C']; // Regression test for https://github.com/thephpleague/commonmark/issues/403
     }
 
-    /**
-     * @dataProvider dataProviderForTestParseLinkLabel
-     */
+    #[DataProvider('dataProviderForTestParseLinkLabel')]
     public function testParseLinkLabel(string $input, int $expected): void
     {
         $cursor = new Cursor($input);
diff --git a/tests/unit/Util/RegexHelperTest.php b/tests/unit/Util/RegexHelperTest.php
index ed9c5af..a03825e 100644
--- a/tests/unit/Util/RegexHelperTest.php
+++ b/tests/unit/Util/RegexHelperTest.php
@@ -16,6 +16,7 @@ namespace League\CommonMark\Tests\Unit\Util;
 use League\CommonMark\Exception\InvalidArgumentException;
 use League\CommonMark\Extension\CommonMark\Node\Block\HtmlBlock;
 use League\CommonMark\Util\RegexHelper;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 /**
@@ -291,9 +292,7 @@ final class RegexHelperTest extends TestCase
         $this->assertTrue(RegexHelper::isWhitespace("\r"));
     }
 
-    /**
-     * @dataProvider dataForTestMatchAt
-     */
+    #[DataProvider('dataForTestMatchAt')]
     public function testMatchAt(string $regex, string $string, ?int $offset, int $expectedResult): void
     {
         if ($offset === null) {
@@ -328,9 +327,7 @@ final class RegexHelperTest extends TestCase
         $this->assertSame(['brown fox', 'brown', 'fox'], RegexHelper::matchFirst('/(quick|brown|lazy) (fox|dog)/', 'The quick brown fox jumps over the lazy dog'));
     }
 
-    /**
-     * @dataProvider blockTypesWithValidOpenerRegexes
-     */
+    #[DataProvider('blockTypesWithValidOpenerRegexes')]
     public function testValidHtmlBlockOpenRegex(int $type): void
     {
         $this->assertNotEmpty(RegexHelper::getHtmlBlockOpenRegex($type));
@@ -357,9 +354,7 @@ final class RegexHelperTest extends TestCase
         RegexHelper::getHtmlBlockOpenRegex(8);
     }
 
-    /**
-     * @dataProvider blockTypesWithValidCloserRegexes
-     */
+    #[DataProvider('blockTypesWithValidCloserRegexes')]
     public function testValidHtmlBlockCloseRegex(int $type): void
     {
         $this->assertNotEmpty(RegexHelper::getHtmlBlockOpenRegex($type));
@@ -377,9 +372,7 @@ final class RegexHelperTest extends TestCase
         yield [HtmlBlock::TYPE_5_CDATA];
     }
 
-    /**
-     * @dataProvider blockTypesWithInvalidCloserRegexes
-     */
+    #[DataProvider('blockTypesWithInvalidCloserRegexes')]
     public function testInvalidHtmlBlockCloseRegex(int $type): void
     {
         $this->expectException(InvalidArgumentException::class);
diff --git a/tests/unit/Util/UrlEncoderTest.php b/tests/unit/Util/UrlEncoderTest.php
index 8a26500..6089121 100644
--- a/tests/unit/Util/UrlEncoderTest.php
+++ b/tests/unit/Util/UrlEncoderTest.php
@@ -18,13 +18,12 @@ namespace League\CommonMark\Tests\Unit\Util;
 
 use League\CommonMark\Exception\UnexpectedEncodingException;
 use League\CommonMark\Util\UrlEncoder;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class UrlEncoderTest extends TestCase
 {
-    /**
-     * @dataProvider unescapeAndEncodeTestProvider
-     */
+    #[DataProvider('unescapeAndEncodeTestProvider')]
     public function testUnescapeAndEncode(string $input, string $expected): void
     {
         $this->assertEquals($expected, UrlEncoder::unescapeAndEncode($input));
diff --git a/tests/unit/Util/XmlTest.php b/tests/unit/Util/XmlTest.php
index 2020af8..ba1d6d9 100644
--- a/tests/unit/Util/XmlTest.php
+++ b/tests/unit/Util/XmlTest.php
@@ -17,13 +17,12 @@ declare(strict_types=1);
 namespace League\CommonMark\Tests\Unit\Util;
 
 use League\CommonMark\Util\Xml;
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 
 final class XmlTest extends TestCase
 {
-    /**
-     * @dataProvider dataProviderForTestEscape
-     */
+    #[DataProvider('dataProviderForTestEscape')]
     public function testEscape(string $input, string $expectedOutput): void
     {
         $this->assertEquals($expectedOutput, Xml::escape($input));
