From: "Alexander M. Turek" <me@derrabus.de>
Date: Mon, 2 Sep 2024 16:34:53 +0200
Subject: PHPUnit 11

Origin: upstream, https://github.com/twigphp/twig/commit/f2053bbea0fec2635681846c181c69ca2b22d410
Bug-Debian: https://bugs.debian.org/1039841
---
 .gitignore                                    |  3 ++-
 extra/cache-extra/composer.json               |  3 ---
 extra/cache-extra/phpunit.xml.dist            | 32 +++++++++++++++--------
 extra/cssinliner-extra/composer.json          |  3 ---
 extra/cssinliner-extra/phpunit.xml.dist       | 32 +++++++++++++++--------
 extra/html-extra/Tests/CvaTest.php            |  9 +++----
 extra/html-extra/composer.json                |  3 ---
 extra/html-extra/phpunit.xml.dist             | 32 +++++++++++++++--------
 extra/inky-extra/composer.json                |  3 ---
 extra/inky-extra/phpunit.xml.dist             | 32 +++++++++++++++--------
 extra/intl-extra/composer.json                |  3 ---
 extra/intl-extra/phpunit.xml.dist             | 32 +++++++++++++++--------
 extra/markdown-extra/Tests/FunctionalTest.php |  5 ++--
 extra/markdown-extra/phpunit.xml.dist         | 32 +++++++++++++++--------
 extra/string-extra/composer.json              |  3 ---
 extra/string-extra/phpunit.xml.dist           | 32 +++++++++++++++--------
 extra/twig-extra-bundle/phpunit-bootstrap.php |  8 ++++++
 extra/twig-extra-bundle/phpunit.xml.dist      | 32 +++++++++++++++--------
 tests/Cache/ChainTest.php                     |  5 ++--
 tests/Cache/FilesystemTest.php                |  4 +--
 tests/Cache/ReadOnlyFilesystemTest.php        |  4 +--
 tests/CustomExtensionTest.php                 |  2 ++
 tests/ErrorTest.php                           |  5 ++--
 tests/ExpressionParserTest.php                | 25 +++++-------------
 tests/Extension/CoreTest.php                  | 37 ++++++++-------------------
 tests/Extension/SandboxTest.php               | 13 +++-------
 tests/FileExtensionEscapingStrategyTest.php   |  5 ++--
 tests/LexerTest.php                           | 13 +++-------
 tests/Loader/FilesystemTest.php               | 13 +++-------
 tests/Node/NodeTest.php                       | 17 ++++--------
 tests/NodeVisitor/OptimizerTest.php           |  5 ++--
 tests/ParserTest.php                          | 13 +++-------
 tests/Runtime/EscaperRuntimeTest.php          |  9 +++----
 tests/TemplateTest.php                        | 29 ++++++---------------
 tests/TokenParser/TypesTokenParserTest.php    |  3 ++-
 35 files changed, 256 insertions(+), 245 deletions(-)
 create mode 100644 extra/twig-extra-bundle/phpunit-bootstrap.php

diff --git a/.gitignore b/.gitignore
index b197246..a568c6d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,7 @@
 /doc/_build/vendor
 /doc/_build/output
 /composer.lock
+/phpunit.phar
 /phpunit.xml
 /vendor
-.phpunit.result.cache
+.phpunit.cache
diff --git a/extra/cache-extra/composer.json b/extra/cache-extra/composer.json
index d14bbbe..32d29fc 100644
--- a/extra/cache-extra/composer.json
+++ b/extra/cache-extra/composer.json
@@ -19,9 +19,6 @@
         "symfony/cache": "^5.4|^6.4|^7.0",
         "twig/twig": "^3.21|^4.0"
     },
-    "require-dev": {
-        "symfony/phpunit-bridge": "^6.4|^7.0"
-    },
     "autoload": {
         "psr-4" : { "Twig\\Extra\\Cache\\" : "" },
         "exclude-from-classmap": [
diff --git a/extra/cache-extra/phpunit.xml.dist b/extra/cache-extra/phpunit.xml.dist
index 0cfdd72..71ad7db 100644
--- a/extra/cache-extra/phpunit.xml.dist
+++ b/extra/cache-extra/phpunit.xml.dist
@@ -1,14 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="vendor/autoload.php" failOnRisky="true" failOnWarning="true">
-  <coverage>
-    <include>
-      <directory>./</directory>
-    </include>
-    <exclude>
-      <directory>./Tests</directory>
-      <directory>./vendor</directory>
-    </exclude>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         backupGlobals="false"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         bootstrap="vendor/autoload.php"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.3/phpunit.xsd"
+         cacheDirectory=".phpunit.cache"
+         backupStaticProperties="false"
+         failOnDeprecation="true"
+         failOnNotice="true"
+         failOnWarning="true"
+>
   <php>
     <ini name="error_reporting" value="-1"/>
   </php>
@@ -17,4 +20,13 @@
       <directory>./Tests/</directory>
     </testsuite>
   </testsuites>
+  <source ignoreSuppressionOfDeprecations="true">
+    <include>
+      <directory>./</directory>
+    </include>
+    <exclude>
+      <directory>./Tests</directory>
+      <directory>./vendor</directory>
+    </exclude>
+  </source>
 </phpunit>
diff --git a/extra/cssinliner-extra/composer.json b/extra/cssinliner-extra/composer.json
index f8cce58..67cacba 100644
--- a/extra/cssinliner-extra/composer.json
+++ b/extra/cssinliner-extra/composer.json
@@ -20,9 +20,6 @@
         "tijsverkoyen/css-to-inline-styles": "^2.0",
         "twig/twig": "^3.13|^4.0"
     },
-    "require-dev": {
-        "symfony/phpunit-bridge": "^6.4|^7.0"
-    },
     "autoload": {
         "files": [ "Resources/functions.php" ],
         "psr-4" : { "Twig\\Extra\\CssInliner\\" : "" },
diff --git a/extra/cssinliner-extra/phpunit.xml.dist b/extra/cssinliner-extra/phpunit.xml.dist
index de3fc99..0aaee1b 100644
--- a/extra/cssinliner-extra/phpunit.xml.dist
+++ b/extra/cssinliner-extra/phpunit.xml.dist
@@ -1,14 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="vendor/autoload.php" failOnRisky="true" failOnWarning="true">
-  <coverage>
-    <include>
-      <directory>./</directory>
-    </include>
-    <exclude>
-      <directory>./Tests</directory>
-      <directory>./vendor</directory>
-    </exclude>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         backupGlobals="false"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         bootstrap="vendor/autoload.php"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.3/phpunit.xsd"
+         cacheDirectory=".phpunit.cache"
+         backupStaticProperties="false"
+         failOnDeprecation="true"
+         failOnNotice="true"
+         failOnWarning="true"
+>
   <php>
     <ini name="error_reporting" value="-1"/>
   </php>
@@ -17,4 +20,13 @@
       <directory>./Tests/</directory>
     </testsuite>
   </testsuites>
+  <source ignoreSuppressionOfDeprecations="true">
+    <include>
+      <directory>./</directory>
+    </include>
+    <exclude>
+      <directory>./Tests</directory>
+      <directory>./vendor</directory>
+    </exclude>
+  </source>
 </phpunit>
diff --git a/extra/html-extra/Tests/CvaTest.php b/extra/html-extra/Tests/CvaTest.php
index b8b32fb..449cd0a 100644
--- a/extra/html-extra/Tests/CvaTest.php
+++ b/extra/html-extra/Tests/CvaTest.php
@@ -11,14 +11,13 @@
 
 namespace Twig\Extra\Html\Tests;
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Extra\Html\Cva;
 
 class CvaTest extends TestCase
 {
-    /**
-     * @dataProvider recipeProvider
-     */
+    #[DataProvider('recipeProvider')]
     public function testRecipes(array $recipe, array $recipes, string $expected)
     {
         $recipeClass = new Cva($recipe['base'] ?? '', $recipe['variants'] ?? [], $recipe['compounds'] ?? [], $recipe['defaultVariants'] ?? []);
@@ -620,9 +619,7 @@ class CvaTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideAdditionalClassesCases
-     */
+    #[DataProvider('provideAdditionalClassesCases')]
     public function testAdditionalClasses(string|array $base, array|string $additionals, string $expected)
     {
         $cva = new Cva($base);
diff --git a/extra/html-extra/composer.json b/extra/html-extra/composer.json
index 55555a0..d31ca13 100644
--- a/extra/html-extra/composer.json
+++ b/extra/html-extra/composer.json
@@ -20,9 +20,6 @@
         "symfony/mime": "^5.4|^6.4|^7.0",
         "twig/twig": "^3.13|^4.0"
     },
-    "require-dev": {
-        "symfony/phpunit-bridge": "^6.4|^7.0"
-    },
     "autoload": {
         "files": [ "Resources/functions.php" ],
         "psr-4" : { "Twig\\Extra\\Html\\" : "" },
diff --git a/extra/html-extra/phpunit.xml.dist b/extra/html-extra/phpunit.xml.dist
index 1b088ff..ed3681b 100644
--- a/extra/html-extra/phpunit.xml.dist
+++ b/extra/html-extra/phpunit.xml.dist
@@ -1,14 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="vendor/autoload.php" failOnRisky="true" failOnWarning="true">
-  <coverage>
-    <include>
-      <directory>./</directory>
-    </include>
-    <exclude>
-      <directory>./Tests</directory>
-      <directory>./vendor</directory>
-    </exclude>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         backupGlobals="false"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         bootstrap="vendor/autoload.php"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.3/phpunit.xsd"
+         cacheDirectory=".phpunit.cache"
+         backupStaticProperties="false"
+         failOnDeprecation="true"
+         failOnNotice="true"
+         failOnWarning="true"
+>
   <php>
     <ini name="error_reporting" value="-1"/>
   </php>
@@ -17,4 +20,13 @@
       <directory>./Tests/</directory>
     </testsuite>
   </testsuites>
+  <source ignoreSuppressionOfDeprecations="true">
+    <include>
+      <directory>./</directory>
+    </include>
+    <exclude>
+      <directory>./Tests</directory>
+      <directory>./vendor</directory>
+    </exclude>
+  </source>
 </phpunit>
diff --git a/extra/inky-extra/composer.json b/extra/inky-extra/composer.json
index 3d6ed29..2b1ad2c 100644
--- a/extra/inky-extra/composer.json
+++ b/extra/inky-extra/composer.json
@@ -20,9 +20,6 @@
         "lorenzo/pinky": "^1.0.5",
         "twig/twig": "^3.13|^4.0"
     },
-    "require-dev": {
-        "symfony/phpunit-bridge": "^6.4|^7.0"
-    },
     "autoload": {
         "files": [ "Resources/functions.php" ],
         "psr-4" : { "Twig\\Extra\\Inky\\" : "" },
diff --git a/extra/inky-extra/phpunit.xml.dist b/extra/inky-extra/phpunit.xml.dist
index 7f759dd..facb99c 100644
--- a/extra/inky-extra/phpunit.xml.dist
+++ b/extra/inky-extra/phpunit.xml.dist
@@ -1,14 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="vendor/autoload.php" failOnRisky="true" failOnWarning="true">
-  <coverage>
-    <include>
-      <directory>./</directory>
-    </include>
-    <exclude>
-      <directory>./Tests</directory>
-      <directory>./vendor</directory>
-    </exclude>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         backupGlobals="false"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         bootstrap="vendor/autoload.php"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.3/phpunit.xsd"
+         cacheDirectory=".phpunit.cache"
+         backupStaticProperties="false"
+         failOnDeprecation="true"
+         failOnNotice="true"
+         failOnWarning="true"
+>
   <php>
     <ini name="error_reporting" value="-1"/>
   </php>
@@ -17,4 +20,13 @@
       <directory>./Tests/</directory>
     </testsuite>
   </testsuites>
+  <source ignoreSuppressionOfDeprecations="true">
+    <include>
+      <directory>./</directory>
+    </include>
+    <exclude>
+      <directory>./Tests</directory>
+      <directory>./vendor</directory>
+    </exclude>
+  </source>
 </phpunit>
diff --git a/extra/intl-extra/composer.json b/extra/intl-extra/composer.json
index b728753..40a7235 100644
--- a/extra/intl-extra/composer.json
+++ b/extra/intl-extra/composer.json
@@ -19,9 +19,6 @@
         "twig/twig": "^3.13|^4.0",
         "symfony/intl": "^5.4|^6.4|^7.0"
     },
-    "require-dev": {
-        "symfony/phpunit-bridge": "^6.4|^7.0"
-    },
     "autoload": {
         "psr-4" : { "Twig\\Extra\\Intl\\" : "" },
         "exclude-from-classmap": [
diff --git a/extra/intl-extra/phpunit.xml.dist b/extra/intl-extra/phpunit.xml.dist
index d33987d..9ba84e8 100644
--- a/extra/intl-extra/phpunit.xml.dist
+++ b/extra/intl-extra/phpunit.xml.dist
@@ -1,14 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="vendor/autoload.php" failOnRisky="true" failOnWarning="true">
-  <coverage>
-    <include>
-      <directory>./</directory>
-    </include>
-    <exclude>
-      <directory>./Tests</directory>
-      <directory>./vendor</directory>
-    </exclude>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         backupGlobals="false"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         bootstrap="vendor/autoload.php"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.3/phpunit.xsd"
+         cacheDirectory=".phpunit.cache"
+         backupStaticProperties="false"
+         failOnDeprecation="true"
+         failOnNotice="true"
+         failOnWarning="true"
+>
   <php>
     <env name="LANG" value="en_US.UTF-8" force="true"/>
     <ini name="error_reporting" value="-1"/>
@@ -18,4 +21,13 @@
       <directory>./Tests/</directory>
     </testsuite>
   </testsuites>
+  <source ignoreSuppressionOfDeprecations="true">
+    <include>
+      <directory>./</directory>
+    </include>
+    <exclude>
+      <directory>./Tests</directory>
+      <directory>./vendor</directory>
+    </exclude>
+  </source>
 </phpunit>
diff --git a/extra/markdown-extra/Tests/FunctionalTest.php b/extra/markdown-extra/Tests/FunctionalTest.php
index 72b277e..40449b3 100644
--- a/extra/markdown-extra/Tests/FunctionalTest.php
+++ b/extra/markdown-extra/Tests/FunctionalTest.php
@@ -11,6 +11,7 @@
 
 namespace Twig\Extra\Markdown\Tests;
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Extra\Markdown\DefaultMarkdown;
@@ -24,9 +25,7 @@ use Twig\RuntimeLoader\RuntimeLoaderInterface;
 
 class FunctionalTest extends TestCase
 {
-    /**
-     * @dataProvider getMarkdownTests
-     */
+    #[DataProvider('getMarkdownTests')]
     public function testMarkdown(string $template, string $expected)
     {
         foreach ([LeagueMarkdown::class, ErusevMarkdown::class, /* MichelfMarkdown::class, */ DefaultMarkdown::class] as $class) {
diff --git a/extra/markdown-extra/phpunit.xml.dist b/extra/markdown-extra/phpunit.xml.dist
index a40846e..c0c2b6c 100644
--- a/extra/markdown-extra/phpunit.xml.dist
+++ b/extra/markdown-extra/phpunit.xml.dist
@@ -1,14 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="vendor/autoload.php" failOnRisky="true" failOnWarning="true">
-  <coverage>
-    <include>
-      <directory>./</directory>
-    </include>
-    <exclude>
-      <directory>./Tests</directory>
-      <directory>./vendor</directory>
-    </exclude>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         backupGlobals="false"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         bootstrap="vendor/autoload.php"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.3/phpunit.xsd"
+         cacheDirectory=".phpunit.cache"
+         backupStaticProperties="false"
+         failOnDeprecation="true"
+         failOnNotice="true"
+         failOnWarning="true"
+>
   <php>
     <ini name="error_reporting" value="-1"/>
   </php>
@@ -17,4 +20,13 @@
       <directory>./Tests/</directory>
     </testsuite>
   </testsuites>
+  <source ignoreSuppressionOfDeprecations="true">
+    <include>
+      <directory>./</directory>
+    </include>
+    <exclude>
+      <directory>./Tests</directory>
+      <directory>./vendor</directory>
+    </exclude>
+  </source>
 </phpunit>
diff --git a/extra/string-extra/composer.json b/extra/string-extra/composer.json
index 6b366e1..ce60ee7 100644
--- a/extra/string-extra/composer.json
+++ b/extra/string-extra/composer.json
@@ -20,9 +20,6 @@
         "symfony/translation-contracts": "^1.1|^2|^3",
         "twig/twig": "^3.13|^4.0"
     },
-    "require-dev": {
-        "symfony/phpunit-bridge": "^6.4|^7.0"
-    },
     "autoload": {
         "psr-4" : { "Twig\\Extra\\String\\" : "" },
         "exclude-from-classmap": [
diff --git a/extra/string-extra/phpunit.xml.dist b/extra/string-extra/phpunit.xml.dist
index aa15cb6..b5013f7 100644
--- a/extra/string-extra/phpunit.xml.dist
+++ b/extra/string-extra/phpunit.xml.dist
@@ -1,14 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="vendor/autoload.php" failOnRisky="true" failOnWarning="true">
-  <coverage>
-    <include>
-      <directory>./</directory>
-    </include>
-    <exclude>
-      <directory>./Tests</directory>
-      <directory>./vendor</directory>
-    </exclude>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         backupGlobals="false"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         bootstrap="vendor/autoload.php"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.3/phpunit.xsd"
+         cacheDirectory=".phpunit.cache"
+         backupStaticProperties="false"
+         failOnDeprecation="true"
+         failOnNotice="true"
+         failOnWarning="true"
+>
   <php>
     <ini name="error_reporting" value="-1"/>
   </php>
@@ -17,4 +20,13 @@
       <directory>./Tests/</directory>
     </testsuite>
   </testsuites>
+  <source ignoreSuppressionOfDeprecations="true">
+    <include>
+      <directory>./</directory>
+    </include>
+    <exclude>
+      <directory>./Tests</directory>
+      <directory>./vendor</directory>
+    </exclude>
+  </source>
 </phpunit>
diff --git a/extra/twig-extra-bundle/phpunit-bootstrap.php b/extra/twig-extra-bundle/phpunit-bootstrap.php
new file mode 100644
index 0000000..d896a46
--- /dev/null
+++ b/extra/twig-extra-bundle/phpunit-bootstrap.php
@@ -0,0 +1,8 @@
+<?php
+
+use Symfony\Component\ErrorHandler\ErrorHandler;
+
+require __DIR__ . '/vendor/autoload.php';
+
+// see https://github.com/symfony/symfony/issues/53812#issuecomment-1962740145
+set_exception_handler([new ErrorHandler(), 'handleException']);
diff --git a/extra/twig-extra-bundle/phpunit.xml.dist b/extra/twig-extra-bundle/phpunit.xml.dist
index c8d88d8..33d9385 100644
--- a/extra/twig-extra-bundle/phpunit.xml.dist
+++ b/extra/twig-extra-bundle/phpunit.xml.dist
@@ -1,14 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/9.3/phpunit.xsd" backupGlobals="false" colors="true" bootstrap="vendor/autoload.php" failOnRisky="true" failOnWarning="true">
-  <coverage>
-    <include>
-      <directory>./</directory>
-    </include>
-    <exclude>
-      <directory>./Tests</directory>
-      <directory>./vendor</directory>
-    </exclude>
-  </coverage>
+<phpunit xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         backupGlobals="false"
+         colors="true"
+         processIsolation="false"
+         stopOnFailure="false"
+         bootstrap="phpunit-bootstrap.php"
+         xsi:noNamespaceSchemaLocation="https://schema.phpunit.de/11.3/phpunit.xsd"
+         cacheDirectory=".phpunit.cache"
+         backupStaticProperties="false"
+         failOnDeprecation="true"
+         failOnNotice="true"
+         failOnWarning="true"
+>
   <php>
     <ini name="error_reporting" value="-1"/>
     <server name="KERNEL_CLASS" value="Twig\Extra\TwigExtraBundle\Tests\Fixture\Kernel"/>
@@ -19,4 +22,13 @@
       <directory>./Tests/</directory>
     </testsuite>
   </testsuites>
+  <source ignoreSuppressionOfDeprecations="true">
+    <include>
+      <directory>./</directory>
+    </include>
+    <exclude>
+      <directory>./Tests</directory>
+      <directory>./vendor</directory>
+    </exclude>
+  </source>
 </phpunit>
diff --git a/tests/Cache/ChainTest.php b/tests/Cache/ChainTest.php
index 4383e60..ad6114e 100644
--- a/tests/Cache/ChainTest.php
+++ b/tests/Cache/ChainTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\Cache;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Cache\ChainCache;
 use Twig\Cache\FilesystemCache;
@@ -212,9 +213,7 @@ class ChainTest extends TestCase
         $this->assertSame(0, $this->cache->getTimestamp($this->key));
     }
 
-    /**
-     * @dataProvider provideInput
-     */
+    #[DataProvider('provideInput')]
     public function testGenerateKey($expected, $input)
     {
         $cache = new ChainCache([]);
diff --git a/tests/Cache/FilesystemTest.php b/tests/Cache/FilesystemTest.php
index 85b1e97..74dd31b 100644
--- a/tests/Cache/FilesystemTest.php
+++ b/tests/Cache/FilesystemTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\Cache;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Cache\FilesystemCache;
 use Twig\Tests\FilesystemHelper;
@@ -171,9 +172,8 @@ class FilesystemTest extends TestCase
 
     /**
      * Test file cache is tolerant towards trailing (back)slashes on the configured cache directory.
-     *
-     * @dataProvider provideDirectories
      */
+    #[DataProvider('provideDirectories')]
     public function testGenerateKey($expected, $input)
     {
         $cache = new FilesystemCache($input);
diff --git a/tests/Cache/ReadOnlyFilesystemTest.php b/tests/Cache/ReadOnlyFilesystemTest.php
index d67276b..9e77f43 100644
--- a/tests/Cache/ReadOnlyFilesystemTest.php
+++ b/tests/Cache/ReadOnlyFilesystemTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\Cache;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Cache\ReadOnlyFilesystemCache;
 use Twig\Tests\FilesystemHelper;
@@ -109,9 +110,8 @@ class ReadOnlyFilesystemTest extends TestCase
 
     /**
      * Test file cache is tolerant towards trailing (back)slashes on the configured cache directory.
-     *
-     * @dataProvider provideDirectories
      */
+    #[DataProvider('provideDirectories')]
     public function testGenerateKey($expected, $input)
     {
         $cache = new ReadOnlyFilesystemCache($input);
diff --git a/tests/CustomExtensionTest.php b/tests/CustomExtensionTest.php
index 9f1fbd3..ba2b3a0 100644
--- a/tests/CustomExtensionTest.php
+++ b/tests/CustomExtensionTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Extension\ExtensionInterface;
@@ -32,6 +33,7 @@ class CustomExtensionTest extends TestCase
      *
      * @dataProvider provideInvalidExtensions
      */
+    #[DataProvider('provideInvalidExtensions')]
     public function testGetInvalidOperators(ExtensionInterface $extension, $expectedExceptionMessage)
     {
         $env = new Environment(new ArrayLoader());
diff --git a/tests/ErrorTest.php b/tests/ErrorTest.php
index 1dc145f..79c9f09 100644
--- a/tests/ErrorTest.php
+++ b/tests/ErrorTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Attribute\YieldReady;
 use Twig\Compiler;
@@ -141,9 +142,7 @@ EOHTML,
         }
     }
 
-    /**
-     * @dataProvider getErroredTemplates
-     */
+    #[DataProvider('getErroredTemplates')]
     public function testTwigExceptionAddsFileAndLine($templates, $name, $line)
     {
         $loader = new ArrayLoader($templates);
diff --git a/tests/ExpressionParserTest.php b/tests/ExpressionParserTest.php
index 4f16858..5582b59 100644
--- a/tests/ExpressionParserTest.php
+++ b/tests/ExpressionParserTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
 use Twig\Attribute\FirstClassTwigCallableReady;
@@ -49,9 +50,7 @@ class ExpressionParserTest extends TestCase
 {
     use ExpectDeprecationTrait;
 
-    /**
-     * @dataProvider getFailingTestsForAssignment
-     */
+    #[DataProvider('getFailingTestsForAssignment')]
     public function testCanOnlyAssignToNames($template)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
@@ -79,9 +78,7 @@ class ExpressionParserTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getTestsForSequence
-     */
+    #[DataProvider('getTestsForSequence')]
     public function testSequenceExpression($template, $expected)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
@@ -92,9 +89,7 @@ class ExpressionParserTest extends TestCase
         $this->assertEquals($expected, $parser->parse($stream)->getNode('body')->getNode('0')->getNode('expr'));
     }
 
-    /**
-     * @dataProvider getFailingTestsForSequence
-     */
+    #[DataProvider('getFailingTestsForSequence')]
     public function testSequenceSyntaxError($template)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
@@ -231,9 +226,7 @@ class ExpressionParserTest extends TestCase
         $parser->parse($stream);
     }
 
-    /**
-     * @dataProvider getTestsForString
-     */
+    #[DataProvider('getTestsForString')]
     public function testStringExpression($template, $expected)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false, 'optimizations' => 0]);
@@ -299,9 +292,7 @@ class ExpressionParserTest extends TestCase
         $parser->parse($env->tokenize(new Source('{% macro foo("a") %}{% endmacro %}', 'index')));
     }
 
-    /**
-     * @dataProvider             getMacroDefinitionDoesNotSupportNonConstantDefaultValues
-     */
+    #[DataProvider('getMacroDefinitionDoesNotSupportNonConstantDefaultValues')]
     public function testMacroDefinitionDoesNotSupportNonConstantDefaultValues($template)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
@@ -321,9 +312,7 @@ class ExpressionParserTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getMacroDefinitionSupportsConstantDefaultValues
-     */
+    #[DataProvider('getMacroDefinitionSupportsConstantDefaultValues')]
     public function testMacroDefinitionSupportsConstantDefaultValues($template)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
diff --git a/tests/Extension/CoreTest.php b/tests/Extension/CoreTest.php
index 10d7e88..dc6134c 100644
--- a/tests/Extension/CoreTest.php
+++ b/tests/Extension/CoreTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\Extension;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Error\RuntimeError;
@@ -31,9 +32,7 @@ use Twig\Sandbox\SecurityPolicy;
 
 class CoreTest extends TestCase
 {
-    /**
-     * @dataProvider provideCycleCases
-     */
+    #[DataProvider('provideCycleCases')]
     public function testCycleFunction($values, $position, $expected)
     {
         $this->assertSame($expected, CoreExtension::cycle($values, $position));
@@ -54,9 +53,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideCycleInvalidCases
-     */
+    #[DataProvider('provideCycleInvalidCases')]
     public function testCycleFunctionThrowRuntimeError($values, mixed $position = null)
     {
         $this->expectException(RuntimeError::class);
@@ -72,9 +69,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getRandomFunctionTestData
-     */
+    #[DataProvider('getRandomFunctionTestData')]
     public function testRandomFunction(array $expectedInArray, $value1, $value2 = null)
     {
         for ($i = 0; $i < 100; ++$i) {
@@ -172,9 +167,7 @@ class CoreTest extends TestCase
         $this->assertEquals($output, 'éÄ');
     }
 
-    /**
-     * @dataProvider provideTwigFirstCases
-     */
+    #[DataProvider('provideTwigFirstCases')]
     public function testTwigFirst($expected, $input)
     {
         $this->assertSame($expected, CoreExtension::first('UTF-8', $input));
@@ -193,9 +186,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideTwigLastCases
-     */
+    #[DataProvider('provideTwigLastCases')]
     public function testTwigLast($expected, $input)
     {
         $this->assertSame($expected, CoreExtension::last('UTF-8', $input));
@@ -214,9 +205,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideArrayKeyCases
-     */
+    #[DataProvider('provideArrayKeyCases')]
     public function testArrayKeysFilter(array $expected, $input)
     {
         $this->assertSame($expected, CoreExtension::keys($input));
@@ -237,9 +226,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideInFilterCases
-     */
+    #[DataProvider('provideInFilterCases')]
     public function testInFilter($expected, $value, $compare)
     {
         $this->assertSame($expected, CoreExtension::inFilter($value, $compare));
@@ -265,9 +252,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideSliceFilterCases
-     */
+    #[DataProvider('provideSliceFilterCases')]
     public function testSliceFilter($expected, $input, $start, $length = null, $preserveKeys = false)
     {
         $this->assertSame($expected, CoreExtension::slice('UTF-8', $input, $start, $length, $preserveKeys));
@@ -294,9 +279,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideCompareCases
-     */
+    #[DataProvider('provideCompareCases')]
     public function testCompare($expected, $a, $b)
     {
         $this->assertSame($expected, CoreExtension::compare($a, $b));
diff --git a/tests/Extension/SandboxTest.php b/tests/Extension/SandboxTest.php
index 6d8e503..ad7fca4 100644
--- a/tests/Extension/SandboxTest.php
+++ b/tests/Extension/SandboxTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\Extension;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
 use Twig\Environment;
@@ -85,9 +86,7 @@ class SandboxTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getSandboxedForCoreTagsTests
-     */
+    #[DataProvider('getSandboxedForCoreTagsTests')]
     public function testSandboxForCoreTags(string $tag, string $template)
     {
         $twig = $this->getEnvironment(true, [], self::$templates, []);
@@ -288,9 +287,7 @@ class SandboxTest extends TestCase
         }
     }
 
-    /**
-     * @dataProvider getSandboxUnallowedToStringTests
-     */
+    #[DataProvider('getSandboxUnallowedToStringTests')]
     public function testSandboxUnallowedToString($template)
     {
         $twig = $this->getEnvironment(true, [], ['index' => $template], [], ['upper', 'join', 'replace'], ['Twig\Tests\Extension\FooObject' => 'getAnotherFooObject'], [], ['random']);
@@ -333,9 +330,7 @@ class SandboxTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getSandboxAllowedToStringTests
-     */
+    #[DataProvider('getSandboxAllowedToStringTests')]
     public function testSandboxAllowedToString($template, $output)
     {
         $twig = $this->getEnvironment(true, [], ['index' => $template], ['set'], [], ['Twig\Tests\Extension\FooObject' => ['foo', 'getAnotherFooObject']]);
diff --git a/tests/FileExtensionEscapingStrategyTest.php b/tests/FileExtensionEscapingStrategyTest.php
index 8b05810..5fa835c 100644
--- a/tests/FileExtensionEscapingStrategyTest.php
+++ b/tests/FileExtensionEscapingStrategyTest.php
@@ -20,14 +20,13 @@ namespace Twig\Tests;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\FileExtensionEscapingStrategy;
 
 class FileExtensionEscapingStrategyTest extends TestCase
 {
-    /**
-     * @dataProvider getGuessData
-     */
+    #[DataProvider('getGuessData')]
     public function testGuess($strategy, $filename)
     {
         $this->assertSame($strategy, FileExtensionEscapingStrategy::guess($filename));
diff --git a/tests/LexerTest.php b/tests/LexerTest.php
index ffc0eff..c08977a 100644
--- a/tests/LexerTest.php
+++ b/tests/LexerTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
 use Twig\Environment;
@@ -180,9 +181,7 @@ class LexerTest extends TestCase
         $this->assertEquals('922337203685477580700', $node->getValue());
     }
 
-    /**
-     * @dataProvider getStringWithEscapedDelimiter
-     */
+    #[DataProvider('getStringWithEscapedDelimiter')]
     public function testStringWithEscapedDelimiter(string $template, string $expected)
     {
         $lexer = new Lexer(new Environment(new ArrayLoader()));
@@ -483,9 +482,7 @@ bar
         $this->addToAssertionCount(1);
     }
 
-    /**
-     * @dataProvider getTemplateForErrorsAtTheEndOfTheStream
-     */
+    #[DataProvider('getTemplateForErrorsAtTheEndOfTheStream')]
     public function testErrorsAtTheEndOfTheStream(string $template)
     {
         $lexer = new Lexer(new Environment(new ArrayLoader()));
@@ -506,9 +503,7 @@ bar
         yield ['{{ ..'];
     }
 
-    /**
-     * @dataProvider getTemplateForStrings
-     */
+    #[DataProvider('getTemplateForStrings')]
     public function testStrings(string $expected)
     {
         $template = '{{ "'.$expected.'" }}';
diff --git a/tests/Loader/FilesystemTest.php b/tests/Loader/FilesystemTest.php
index f4c0b97..945072a 100644
--- a/tests/Loader/FilesystemTest.php
+++ b/tests/Loader/FilesystemTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\Loader;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Error\LoaderError;
@@ -35,9 +36,7 @@ class FilesystemTest extends TestCase
         $this->assertEquals(realpath($path.'/errors/index.html'), realpath($loader->getSourceContext('errors/index.html')->getPath()));
     }
 
-    /**
-     * @dataProvider getSecurityTests
-     */
+    #[DataProvider('getSecurityTests')]
     public function testSecurity($template)
     {
         $loader = new FilesystemLoader([__DIR__.'/../Fixtures']);
@@ -80,9 +79,7 @@ class FilesystemTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getBasePaths
-     */
+    #[DataProvider('getBasePaths')]
     public function testPaths($basePath, $cacheKey, $rootPath)
     {
         $loader = new FilesystemLoader([$basePath.'/normal', $basePath.'/normal_bis'], $rootPath);
@@ -215,9 +212,7 @@ class FilesystemTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getArrayInheritanceTests
-     */
+    #[DataProvider('getArrayInheritanceTests')]
     public function testArrayInheritance(string $templateName)
     {
         $loader = new FilesystemLoader([]);
diff --git a/tests/Node/NodeTest.php b/tests/Node/NodeTest.php
index a56b9c5..fbbe4af 100644
--- a/tests/Node/NodeTest.php
+++ b/tests/Node/NodeTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\Node;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\IgnoreDeprecations;
 use PHPUnit\Framework\TestCase;
 use Symfony\Bridge\PhpUnit\ExpectDeprecationTrait;
 use Twig\Node\NameDeprecation;
@@ -84,9 +85,7 @@ EOF
         $this->assertFalse($node->getAttribute('foo', false));
     }
 
-    /**
-     * @group legacy
-     */
+    #[IgnoreDeprecations]
     public function testAttributeDeprecationWithoutAlternative()
     {
         $node = new NodeForTest([], ['foo' => false]);
@@ -96,9 +95,7 @@ EOF
         $this->assertFalse($node->getAttribute('foo'));
     }
 
-    /**
-     * @group legacy
-     */
+    #[IgnoreDeprecations]
     public function testAttributeDeprecationWithAlternative()
     {
         $node = new NodeForTest([], ['foo' => false]);
@@ -116,9 +113,7 @@ EOF
         $this->assertSame($foo, $node->getNode('foo', false));
     }
 
-    /**
-     * @group legacy
-     */
+    #[IgnoreDeprecations]
     public function testNodeDeprecationWithoutAlternative()
     {
         $node = new NodeForTest(['foo' => $foo = new NodeForTest()]);
@@ -128,9 +123,7 @@ EOF
         $this->assertSame($foo, $node->getNode('foo'));
     }
 
-    /**
-     * @group legacy
-     */
+    #[IgnoreDeprecations]
     public function testNodeAttributeDeprecationWithAlternative()
     {
         $node = new NodeForTest(['foo' => $foo = new NodeForTest()]);
diff --git a/tests/NodeVisitor/OptimizerTest.php b/tests/NodeVisitor/OptimizerTest.php
index b333f56..c62efdf 100644
--- a/tests/NodeVisitor/OptimizerTest.php
+++ b/tests/NodeVisitor/OptimizerTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\NodeVisitor;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Loader\ArrayLoader;
@@ -87,9 +88,7 @@ class OptimizerTest extends TestCase
         }
     }
 
-    /**
-     * @dataProvider getTestsForForLoopOptimizer
-     */
+    #[DataProvider('getTestsForForLoopOptimizer')]
     public function testForLoopOptimizer($template, $expected)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false]);
diff --git a/tests/ParserTest.php b/tests/ParserTest.php
index d103fef..255589f 100644
--- a/tests/ParserTest.php
+++ b/tests/ParserTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Error\SyntaxError;
@@ -70,9 +71,7 @@ class ParserTest extends TestCase
         $parser->parse($stream);
     }
 
-    /**
-     * @dataProvider getFilterBodyNodesData
-     */
+    #[DataProvider('getFilterBodyNodesData')]
     public function testFilterBodyNodes($input, $expected)
     {
         $parser = $this->getParser();
@@ -100,9 +99,7 @@ class ParserTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getFilterBodyNodesDataThrowsException
-     */
+    #[DataProvider('getFilterBodyNodesDataThrowsException')]
     public function testFilterBodyNodesThrowsException($input)
     {
         $parser = $this->getParser();
@@ -122,9 +119,7 @@ class ParserTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getFilterBodyNodesWithBOMData
-     */
+    #[DataProvider('getFilterBodyNodesWithBOMData')]
     public function testFilterBodyNodesWithBOM($emptyNode)
     {
         $parser = $this->getParser();
diff --git a/tests/Runtime/EscaperRuntimeTest.php b/tests/Runtime/EscaperRuntimeTest.php
index 606ca29..3e35e2f 100644
--- a/tests/Runtime/EscaperRuntimeTest.php
+++ b/tests/Runtime/EscaperRuntimeTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests\Runtime;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Error\RuntimeError;
 use Twig\Runtime\EscaperRuntime;
@@ -356,9 +357,7 @@ class EscaperRuntimeTest extends TestCase
         (new EscaperRuntime())->escape('foo', 'bar');
     }
 
-    /**
-     * @dataProvider provideCustomEscaperCases
-     */
+    #[DataProvider('provideCustomEscaperCases')]
     public function testCustomEscaper($expected, $string, $strategy, $charset)
     {
         $escaper = new EscaperRuntime();
@@ -375,9 +374,7 @@ class EscaperRuntimeTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideObjectsForEscaping
-     */
+    #[DataProvider('provideObjectsForEscaping')]
     public function testObjectEscaping(string $escapedHtml, string $escapedJs, array $safeClasses)
     {
         $obj = new Extension_TestClass();
diff --git a/tests/TemplateTest.php b/tests/TemplateTest.php
index 0d851ab..b110bb3 100644
--- a/tests/TemplateTest.php
+++ b/tests/TemplateTest.php
@@ -20,6 +20,7 @@ namespace Twig\Tests;
  * file that was distributed with this source code.
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Error\RuntimeError;
@@ -43,9 +44,7 @@ class TemplateTest extends TestCase
         $template->displayBlock('foo', [], ['foo' => [new \stdClass(), 'foo']]);
     }
 
-    /**
-     * @dataProvider getAttributeExceptions
-     */
+    #[DataProvider('getAttributeExceptions')]
     public function testGetAttributeExceptions($template, $message)
     {
         $templates = ['index' => $template];
@@ -93,9 +92,7 @@ class TemplateTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getGetAttributeWithSandbox
-     */
+    #[DataProvider('getGetAttributeWithSandbox')]
     public function testGetAttributeWithSandbox($object, $item, $allowed)
     {
         $twig = new Environment(new ArrayLoader());
@@ -132,9 +129,7 @@ class TemplateTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getRenderTemplateWithoutOutputData
-     */
+    #[DataProvider('getRenderTemplateWithoutOutputData')]
     public function testRenderTemplateWithoutOutput(string $template)
     {
         $twig = new Environment(new ArrayLoader(['index' => $template]));
@@ -215,9 +210,7 @@ class TemplateTest extends TestCase
         $this->assertSame('EmptyString', CoreExtension::getAttribute($twig, $template->getSourceContext(), $array, null), 'null is treated as "" when accessing a sequence/mapping (equals PHP behavior)');
     }
 
-    /**
-     * @dataProvider getGetAttributeTests
-     */
+    #[DataProvider('getGetAttributeTests')]
     public function testGetAttribute($defined, $value, $object, $item, $arguments, $type)
     {
         $twig = new Environment(new ArrayLoader());
@@ -226,9 +219,7 @@ class TemplateTest extends TestCase
         $this->assertEquals($value, CoreExtension::getAttribute($twig, $template->getSourceContext(), $object, $item, $arguments, $type));
     }
 
-    /**
-     * @dataProvider getGetAttributeTests
-     */
+    #[DataProvider('getGetAttributeTests')]
     public function testGetAttributeStrict($defined, $value, $object, $item, $arguments, $type, $exceptionMessage = null)
     {
         $twig = new Environment(new ArrayLoader(), ['strict_variables' => true]);
@@ -245,9 +236,7 @@ class TemplateTest extends TestCase
         }
     }
 
-    /**
-     * @dataProvider getGetAttributeTests
-     */
+    #[DataProvider('getGetAttributeTests')]
     public function testGetAttributeDefined($defined, $value, $object, $item, $arguments, $type)
     {
         $twig = new Environment(new ArrayLoader());
@@ -256,9 +245,7 @@ class TemplateTest extends TestCase
         $this->assertEquals($defined, CoreExtension::getAttribute($twig, $template->getSourceContext(), $object, $item, $arguments, $type, true));
     }
 
-    /**
-     * @dataProvider getGetAttributeTests
-     */
+    #[DataProvider('getGetAttributeTests')]
     public function testGetAttributeDefinedStrict($defined, $value, $object, $item, $arguments, $type)
     {
         $twig = new Environment(new ArrayLoader(), ['strict_variables' => true]);
diff --git a/tests/TokenParser/TypesTokenParserTest.php b/tests/TokenParser/TypesTokenParserTest.php
index 49e0ac0..c285368 100644
--- a/tests/TokenParser/TypesTokenParserTest.php
+++ b/tests/TokenParser/TypesTokenParserTest.php
@@ -11,6 +11,7 @@
 
 namespace Twig\Tests\TokenParser;
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Loader\ArrayLoader;
@@ -19,7 +20,7 @@ use Twig\Source;
 
 class TypesTokenParserTest extends TestCase
 {
-    /** @dataProvider getMappingTests */
+    #[DataProvider('getMappingTests')]
     public function testMappingParsing(string $template, array $expected): void
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
