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/composer.json         |  1 -
 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 ++-
 36 files changed, 256 insertions(+), 246 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/composer.json b/extra/twig-extra-bundle/composer.json
index 88ee810..b37e76e 100644
--- a/extra/twig-extra-bundle/composer.json
+++ b/extra/twig-extra-bundle/composer.json
@@ -22,7 +22,6 @@
     },
     "require-dev": {
         "league/commonmark": "^1.0|^2.0",
-        "symfony/phpunit-bridge": "^6.4|^7.0",
         "twig/cache-extra": "^3.0",
         "twig/cssinliner-extra": "^3.0",
         "twig/html-extra": "^3.0",
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 3120ab1..48cd1c1 100644
--- a/tests/Cache/ChainTest.php
+++ b/tests/Cache/ChainTest.php
@@ -11,6 +11,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;
@@ -203,9 +204,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 e880562..ae4b7d0 100644
--- a/tests/Cache/FilesystemTest.php
+++ b/tests/Cache/FilesystemTest.php
@@ -11,6 +11,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;
@@ -162,9 +163,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 34bc14f..aa2eeab 100644
--- a/tests/Cache/ReadOnlyFilesystemTest.php
+++ b/tests/Cache/ReadOnlyFilesystemTest.php
@@ -11,6 +11,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;
@@ -100,9 +101,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 174ad5e..146bbdb 100644
--- a/tests/CustomExtensionTest.php
+++ b/tests/CustomExtensionTest.php
@@ -11,6 +11,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;
@@ -23,6 +24,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 43ab907..35afbe8 100644
--- a/tests/ErrorTest.php
+++ b/tests/ErrorTest.php
@@ -11,6 +11,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;
@@ -132,9 +133,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 f134052..5e60dfc 100644
--- a/tests/ExpressionParserTest.php
+++ b/tests/ExpressionParserTest.php
@@ -11,6 +11,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;
@@ -40,9 +41,7 @@ class ExpressionParserTest extends TestCase
 {
     use ExpectDeprecationTrait;
 
-    /**
-     * @dataProvider getFailingTestsForAssignment
-     */
+    #[DataProvider('getFailingTestsForAssignment')]
     public function testCanOnlyAssignToNames($template)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
@@ -70,9 +69,7 @@ class ExpressionParserTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getTestsForSequence
-     */
+    #[DataProvider('getTestsForSequence')]
     public function testSequenceExpression($template, $expected)
     {
         $env = new Environment(new ArrayLoader(), ['cache' => false, 'autoescape' => false]);
@@ -83,9 +80,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]);
@@ -222,9 +217,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]);
@@ -290,9 +283,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]);
@@ -312,9 +303,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 bbea3d5..4e83a17 100644
--- a/tests/Extension/CoreTest.php
+++ b/tests/Extension/CoreTest.php
@@ -11,6 +11,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;
@@ -22,9 +23,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));
@@ -45,9 +44,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideCycleInvalidCases
-     */
+    #[DataProvider('provideCycleInvalidCases')]
     public function testCycleFunctionThrowRuntimeError($values, mixed $position = null)
     {
         $this->expectException(RuntimeError::class);
@@ -63,9 +60,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getRandomFunctionTestData
-     */
+    #[DataProvider('getRandomFunctionTestData')]
     public function testRandomFunction(array $expectedInArray, $value1, $value2 = null)
     {
         for ($i = 0; $i < 100; ++$i) {
@@ -163,9 +158,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));
@@ -184,9 +177,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideTwigLastCases
-     */
+    #[DataProvider('provideTwigLastCases')]
     public function testTwigLast($expected, $input)
     {
         $this->assertSame($expected, CoreExtension::last('UTF-8', $input));
@@ -205,9 +196,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideArrayKeyCases
-     */
+    #[DataProvider('provideArrayKeyCases')]
     public function testArrayKeysFilter(array $expected, $input)
     {
         $this->assertSame($expected, CoreExtension::keys($input));
@@ -228,9 +217,7 @@ class CoreTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider provideInFilterCases
-     */
+    #[DataProvider('provideInFilterCases')]
     public function testInFilter($expected, $value, $compare)
     {
         $this->assertSame($expected, CoreExtension::inFilter($value, $compare));
@@ -256,9 +243,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));
@@ -285,9 +270,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 3fb1f65..fd655f7 100644
--- a/tests/Extension/SandboxTest.php
+++ b/tests/Extension/SandboxTest.php
@@ -11,6 +11,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;
@@ -76,9 +77,7 @@ class SandboxTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getSandboxedForCoreTagsTests
-     */
+    #[DataProvider('getSandboxedForCoreTagsTests')]
     public function testSandboxForCoreTags(string $tag, string $template)
     {
         $twig = $this->getEnvironment(true, [], self::$templates, []);
@@ -279,9 +278,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']);
@@ -324,9 +321,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 ed5ce06..411f9da 100644
--- a/tests/FileExtensionEscapingStrategyTest.php
+++ b/tests/FileExtensionEscapingStrategyTest.php
@@ -11,14 +11,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 3a5ff98..839f156 100644
--- a/tests/LexerTest.php
+++ b/tests/LexerTest.php
@@ -11,6 +11,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;
@@ -171,9 +172,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()));
@@ -474,9 +473,7 @@ bar
         $this->addToAssertionCount(1);
     }
 
-    /**
-     * @dataProvider getTemplateForErrorsAtTheEndOfTheStream
-     */
+    #[DataProvider('getTemplateForErrorsAtTheEndOfTheStream')]
     public function testErrorsAtTheEndOfTheStream(string $template)
     {
         $lexer = new Lexer(new Environment(new ArrayLoader()));
@@ -497,9 +494,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 c7315ea..62b0645 100644
--- a/tests/Loader/FilesystemTest.php
+++ b/tests/Loader/FilesystemTest.php
@@ -11,6 +11,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;
@@ -26,9 +27,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']);
@@ -71,9 +70,7 @@ class FilesystemTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getBasePaths
-     */
+    #[DataProvider('getBasePaths')]
     public function testPaths($basePath, $cacheKey, $rootPath)
     {
         $loader = new FilesystemLoader([$basePath.'/normal', $basePath.'/normal_bis'], $rootPath);
@@ -206,9 +203,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 13ad334..a4d3f4a 100644
--- a/tests/Node/NodeTest.php
+++ b/tests/Node/NodeTest.php
@@ -11,6 +11,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;
@@ -75,9 +76,7 @@ EOF
         $this->assertFalse($node->getAttribute('foo', false));
     }
 
-    /**
-     * @group legacy
-     */
+    #[IgnoreDeprecations]
     public function testAttributeDeprecationWithoutAlternative()
     {
         $node = new NodeForTest([], ['foo' => false]);
@@ -87,9 +86,7 @@ EOF
         $this->assertFalse($node->getAttribute('foo'));
     }
 
-    /**
-     * @group legacy
-     */
+    #[IgnoreDeprecations]
     public function testAttributeDeprecationWithAlternative()
     {
         $node = new NodeForTest([], ['foo' => false]);
@@ -107,9 +104,7 @@ EOF
         $this->assertSame($foo, $node->getNode('foo', false));
     }
 
-    /**
-     * @group legacy
-     */
+    #[IgnoreDeprecations]
     public function testNodeDeprecationWithoutAlternative()
     {
         $node = new NodeForTest(['foo' => $foo = new NodeForTest()]);
@@ -119,9 +114,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 859f417..b765b48 100644
--- a/tests/NodeVisitor/OptimizerTest.php
+++ b/tests/NodeVisitor/OptimizerTest.php
@@ -11,6 +11,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;
@@ -78,9 +79,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 1b222d0..5483791 100644
--- a/tests/ParserTest.php
+++ b/tests/ParserTest.php
@@ -11,6 +11,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;
@@ -61,9 +62,7 @@ class ParserTest extends TestCase
         $parser->parse($stream);
     }
 
-    /**
-     * @dataProvider getFilterBodyNodesData
-     */
+    #[DataProvider('getFilterBodyNodesData')]
     public function testFilterBodyNodes($input, $expected)
     {
         $parser = $this->getParser();
@@ -91,9 +90,7 @@ class ParserTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getFilterBodyNodesDataThrowsException
-     */
+    #[DataProvider('getFilterBodyNodesDataThrowsException')]
     public function testFilterBodyNodesThrowsException($input)
     {
         $parser = $this->getParser();
@@ -113,9 +110,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 706c007..86f2e2a 100644
--- a/tests/Runtime/EscaperRuntimeTest.php
+++ b/tests/Runtime/EscaperRuntimeTest.php
@@ -11,6 +11,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;
@@ -347,9 +348,7 @@ class EscaperRuntimeTest extends TestCase
         (new EscaperRuntime())->escape('foo', 'bar');
     }
 
-    /**
-     * @dataProvider provideCustomEscaperCases
-     */
+    #[DataProvider('provideCustomEscaperCases')]
     public function testCustomEscaper($expected, $string, $strategy, $charset)
     {
         $escaper = new EscaperRuntime();
@@ -366,9 +365,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 eb0e2db..afe2882 100644
--- a/tests/TemplateTest.php
+++ b/tests/TemplateTest.php
@@ -11,6 +11,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;
@@ -34,9 +35,7 @@ class TemplateTest extends TestCase
         $template->displayBlock('foo', [], ['foo' => [new \stdClass(), 'foo']]);
     }
 
-    /**
-     * @dataProvider getAttributeExceptions
-     */
+    #[DataProvider('getAttributeExceptions')]
     public function testGetAttributeExceptions($template, $message)
     {
         $templates = ['index' => $template];
@@ -84,9 +83,7 @@ class TemplateTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getGetAttributeWithSandbox
-     */
+    #[DataProvider('getGetAttributeWithSandbox')]
     public function testGetAttributeWithSandbox($object, $item, $allowed)
     {
         $twig = new Environment(new ArrayLoader());
@@ -123,9 +120,7 @@ class TemplateTest extends TestCase
         ];
     }
 
-    /**
-     * @dataProvider getRenderTemplateWithoutOutputData
-     */
+    #[DataProvider('getRenderTemplateWithoutOutputData')]
     public function testRenderTemplateWithoutOutput(string $template)
     {
         $twig = new Environment(new ArrayLoader(['index' => $template]));
@@ -206,9 +201,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());
@@ -217,9 +210,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]);
@@ -236,9 +227,7 @@ class TemplateTest extends TestCase
         }
     }
 
-    /**
-     * @dataProvider getGetAttributeTests
-     */
+    #[DataProvider('getGetAttributeTests')]
     public function testGetAttributeDefined($defined, $value, $object, $item, $arguments, $type)
     {
         $twig = new Environment(new ArrayLoader());
@@ -247,9 +236,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 0acbb4d..428b059 100644
--- a/tests/TokenParser/TypesTokenParserTest.php
+++ b/tests/TokenParser/TypesTokenParserTest.php
@@ -2,6 +2,7 @@
 
 namespace Twig\Tests\TokenParser;
 
+use PHPUnit\Framework\Attributes\DataProvider;
 use PHPUnit\Framework\TestCase;
 use Twig\Environment;
 use Twig\Loader\ArrayLoader;
@@ -10,7 +11,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]);
