From: =?utf-8?q?David_Pr=C3=A9vot?= <taffit@debian.org>
Date: Sun, 16 Feb 2025 12:39:55 +0100
Subject: Modernize PHPUnit syntax

---
 tests/Functional/Net/SCPSSH2UserStoryTest.php |   8 +-
 tests/Functional/Net/SFTPUserStoryTest.php    | 157 ++++++++------------------
 tests/Functional/Net/SSH2AgentTest.php        |   6 +-
 tests/Functional/Net/SSH2Test.php             |  37 +++---
 tests/Unit/Crypt/AES/TestCase.php             |   5 +
 tests/Unit/Crypt/BlowfishTest.php             |   3 +
 tests/Unit/Crypt/Hash/MD5Test.php             |   4 +
 tests/Unit/Crypt/Hash/SHA256Test.php          |   4 +
 tests/Unit/Crypt/Hash/SHA256_96Test.php       |   4 +
 tests/Unit/Crypt/Hash/SHA512Test.php          |   4 +
 tests/Unit/Crypt/Hash/SHA512_96Test.php       |   4 +
 tests/Unit/Crypt/RC2Test.php                  |   6 +-
 tests/Unit/Crypt/RC4Test.php                  |   3 +
 tests/Unit/Crypt/RandomTest.php               |   4 +-
 tests/Unit/Crypt/TripleDESTest.php            |   8 +-
 tests/Unit/Net/SSH1Test.php                   |   3 +
 tests/Unit/Net/SSH2UnitTest.php               |  18 +--
 17 files changed, 122 insertions(+), 156 deletions(-)

diff --git a/tests/Functional/Net/SCPSSH2UserStoryTest.php b/tests/Functional/Net/SCPSSH2UserStoryTest.php
index 762559a..02ffb8b 100644
--- a/tests/Functional/Net/SCPSSH2UserStoryTest.php
+++ b/tests/Functional/Net/SCPSSH2UserStoryTest.php
@@ -6,6 +6,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\Depends;
+
 class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
 {
     protected static $remoteFile;
@@ -32,7 +34,7 @@ class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /** @depends testConstructSSH2 */
+    #[Depends('testConstructSSH2')]
     public function testConstructor($ssh)
     {
         $scp = new Net_SCP($ssh);
@@ -43,7 +45,7 @@ class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
         return $scp;
     }
 
-    /** @depends testConstructor */
+    #[Depends('testConstructor')]
     public function testPutGetString($scp)
     {
         $this->assertTrue(
@@ -65,7 +67,7 @@ class Functional_Net_SCPSSH2UserStoryTest extends PhpseclibFunctionalTestCase
         return $scp;
     }
 
-    /** @depends testPutGetString */
+    #[Depends('testPutGetString')]
     public function testGetFile($scp)
     {
         $localFilename = $this->createTempFile();
diff --git a/tests/Functional/Net/SFTPUserStoryTest.php b/tests/Functional/Net/SFTPUserStoryTest.php
index d5fa31a..e881221 100644
--- a/tests/Functional/Net/SFTPUserStoryTest.php
+++ b/tests/Functional/Net/SFTPUserStoryTest.php
@@ -6,6 +6,9 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\Depends;
+use PHPUnit\Framework\Attributes\Group;
+
 class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
 {
     protected static $scratchDir;
@@ -35,9 +38,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testConstructor
-     */
+    #[Depends('testConstructor')]
     public function testPasswordLogin($sftp)
     {
         $username = $this->getEnv('SSH_USERNAME');
@@ -50,9 +51,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testPasswordLogin
-     */
+    #[Depends('testPasswordLogin')]
     public function testPwdHome($sftp)
     {
         $this->assertEquals(
@@ -64,9 +63,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testPwdHome
-     */
+    #[Depends('testPwdHome')]
     public function testMkDirScratch($sftp)
     {
         $dirname = self::$scratchDir;
@@ -86,9 +83,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testMkDirScratch
-     */
+    #[Depends('testMkDirScratch')]
     public function testChDirScratch($sftp)
     {
         $this->assertTrue(
@@ -119,9 +114,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChDirScratch
-     */
+    #[Depends('testChDirScratch')]
     public function testStatOnDir($sftp)
     {
         $this->assertNotSame(
@@ -143,9 +136,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return null;
     }
 
-    /**
-     * @depends testStatOnDir
-     */
+    #[Depends('testStatOnDir')]
     public function testPutSizeGetFileCallback($sftp)
     {
         self::$buffer =  self::$exampleData;
@@ -169,9 +160,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testStatOnDir
-     */
+    #[Depends('testStatOnDir')]
     public function testPutSizeGetFile($sftp)
     {
         $this->assertTrue(
@@ -194,9 +183,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testPutSizeGetFile
-     */
+    #[Depends('testPutSizeGetFile')]
     public function testTouch($sftp)
     {
         $this->assertTrue(
@@ -212,9 +199,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testTouch
-     */
+    #[Depends('testTouch')]
     public function testTruncate($sftp)
     {
         $this->assertTrue(
@@ -236,10 +221,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testTruncate
-     * @group github850
-     */
+    #[Depends('testTruncate')]
+    #[Group('github850')]
     public function testChModOnFile($sftp)
     {
         $this->assertNotFalse(
@@ -250,9 +233,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChModOnFile
-     */
+    #[Depends('testChModOnFile')]
     public function testChDirOnFile($sftp)
     {
         $this->assertFalse(
@@ -263,9 +244,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChDirOnFile
-     */
+    #[Depends('testChDirOnFile')]
     public function testFileExistsIsFileIsDirFile($sftp)
     {
         $this->assertTrue(
@@ -286,9 +265,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testFileExistsIsFileIsDirFile
-     */
+    #[Depends('testFileExistsIsFileIsDirFile')]
     public function testFileExistsIsFileIsDirFileNonexistent($sftp)
     {
         $this->assertFalse(
@@ -309,9 +286,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testFileExistsIsFileIsDirFileNonexistent
-     */
+    #[Depends('testFileExistsIsFileIsDirFileNonexistent')]
     public function testSortOrder($sftp)
     {
         $this->assertTrue(
@@ -362,9 +337,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testSortOrder
-     */
+    #[Depends('testSortOrder')]
     public function testResourceXfer($sftp)
     {
         $fp = fopen('res.txt', 'w+');
@@ -382,9 +355,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testResourceXfer
-     */
+    #[Depends('testResourceXfer')]
     public function testSymlink($sftp)
     {
         $this->assertTrue(
@@ -395,9 +366,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testSymlink
-     */
+    #[Depends('testSymlink')]
     public function testStatLstatCache($sftp)
     {
         $stat = $sftp->stat('symlink');
@@ -411,9 +380,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testStatLstatCache
-     */
+    #[Depends('testStatLstatCache')]
     public function testLinkFile($sftp)
     {
         $this->assertTrue(
@@ -432,9 +399,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testLinkFile
-     */
+    #[Depends('testLinkFile')]
     public function testReadlink($sftp)
     {
         $this->assertIsString(
@@ -445,10 +410,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testReadlink
-     * @group github716
-     */
+    #[Depends('testReadlink')]
+    #[Group('github716')]
     public function testStatOnCWD($sftp)
     {
         $stat = $sftp->stat('.');
@@ -467,9 +430,9 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
 
     /**
      * on older versions this would result in a fatal error
-     * @depends testStatOnCWD
-     * @group github402
      */
+    #[Depends('testStatOnCWD')]
+    #[Group('github402')]
     public function testStatcacheFix($sftp)
     {
         // Name used for both directory and file.
@@ -490,9 +453,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testStatcacheFix
-     */
+    #[Depends('testStatcacheFix')]
     public function testChDirUpHome($sftp)
     {
         $this->assertTrue(
@@ -509,9 +470,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChDirUpHome
-     */
+    #[Depends('testChDirUpHome')]
     public function testFileExistsIsFileIsDirDir($sftp)
     {
         $this->assertTrue(
@@ -532,9 +491,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testFileExistsIsFileIsDirDir
-     */
+    #[Depends('testFileExistsIsFileIsDirDir')]
     public function testTruncateLargeFile($sftp)
     {
         $filesize = (4 * 1024 + 16) * 1024 * 1024;
@@ -546,9 +503,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testTruncateLargeFile
-     */
+    #[Depends('testTruncateLargeFile')]
     public function testRmDirScratch($sftp)
     {
         $this->assertFalse(
@@ -560,9 +515,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testRmDirScratch
-     */
+    #[Depends('testRmDirScratch')]
     public function testDeleteRecursiveScratch($sftp)
     {
         $this->assertTrue(
@@ -574,9 +527,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testDeleteRecursiveScratch
-     */
+    #[Depends('testDeleteRecursiveScratch')]
     public function testRmDirScratchNonexistent($sftp)
     {
         $this->assertFalse(
@@ -588,10 +539,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testRmDirScratchNonexistent
-     * @group github706
-     */
+    #[Depends('testRmDirScratchNonexistent')]
+    #[Group('github706')]
     public function testDeleteEmptyDir($sftp)
     {
         $this->assertTrue(
@@ -622,10 +571,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testDeleteEmptyDir
-     * @group github735
-     */
+    #[Depends('testDeleteEmptyDir')]
+    #[Group('github735')]
     public function testStatVsLstat($sftp)
     {
         $this->assertTrue($sftp->mkdir(self::$scratchDir));
@@ -669,10 +616,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testStatVsLstat
-     * @group github830
-     */
+    #[Depends('testStatVsLstat')]
+    #[Group('github830')]
     public function testUploadOffsets($sftp)
     {
         $sftp->put('offset.txt', 'res.txt', NET_SFTP_LOCAL_FILE, 0, 10);
@@ -692,9 +637,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testUploadOffsets
-     */
+    #[Depends('testUploadOffsets')]
     public function testReadableWritable($sftp)
     {
         $sftp->chmod(0000, 'offset.txt');
@@ -714,10 +657,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testReadableWritable
-     * @group github999
-     */
+    #[Depends('testReadableWritable')]
+    #[Group('github999')]
     public function testExecNlist($sftp)
     {
         $sftp->enablePTY();
@@ -730,9 +671,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testExecNlist
-     */
+    #[Depends('testExecNlist')]
     public function testRawlistDisabledStatCache($sftp)
     {
         $this->assertTrue($sftp->mkdir(self::$scratchDir));
@@ -756,9 +695,7 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testRawlistDisabledStatCache
-     */
+    #[Depends('testRawlistDisabledStatCache')]
     public function testChownChgrp($sftp)
     {
         $stat = $sftp->stat(self::$scratchDir);
@@ -773,10 +710,8 @@ class Functional_Net_SFTPUserStoryTest extends PhpseclibFunctionalTestCase
         return $sftp;
     }
 
-    /**
-     * @depends testChownChgrp
-     * @group github1934
-     */
+    #[Depends('testChownChgrp')]
+    #[Group('github1934')]
     public function testCallableGetWithLength($sftp)
     {
         $sftp->put('test.txt', 'zzzzz');
diff --git a/tests/Functional/Net/SSH2AgentTest.php b/tests/Functional/Net/SSH2AgentTest.php
index ee18ce6..2a0d53d 100644
--- a/tests/Functional/Net/SSH2AgentTest.php
+++ b/tests/Functional/Net/SSH2AgentTest.php
@@ -6,6 +6,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\Depends;
+
 class Functional_Net_SSH2AgentTest extends PhpseclibFunctionalTestCase
 {
     public static function setUpBeforeClass(): void
@@ -31,9 +33,7 @@ class Functional_Net_SSH2AgentTest extends PhpseclibFunctionalTestCase
         return array('ssh' => $ssh, 'ssh-agent' => $agent);
     }
 
-    /**
-     * @depends testAgentLogin
-     */
+    #[Depends('testAgentLogin')]
     public function testAgentForward($args)
     {
         $ssh = $args['ssh'];
diff --git a/tests/Functional/Net/SSH2Test.php b/tests/Functional/Net/SSH2Test.php
index 3bfca88..db437da 100644
--- a/tests/Functional/Net/SSH2Test.php
+++ b/tests/Functional/Net/SSH2Test.php
@@ -6,6 +6,9 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\Depends;
+use PHPUnit\Framework\Attributes\Group;
+
 class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
 {
     public function testConstructor()
@@ -20,11 +23,9 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testConstructor
-     * @group github408
-     * @group github412
-     */
+    #[Depends('testConstructor')]
+    #[Group('github408')]
+    #[Group('github412')]
     public function testPreLogin($ssh)
     {
         $this->assertFalse(
@@ -55,9 +56,7 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testPreLogin
-     */
+    #[Depends('testPreLogin')]
     public function testBadPassword($ssh)
     {
         $username = $this->getEnv('SSH_USERNAME');
@@ -80,9 +79,7 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testBadPassword
-     */
+    #[Depends('testBadPassword')]
     public function testPasswordLogin($ssh)
     {
         $username = $this->getEnv('SSH_USERNAME');
@@ -100,10 +97,8 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testPasswordLogin
-     * @group github280
-     */
+    #[Depends('testPasswordLogin')]
+    #[Group('github280')]
     public function testExecWithMethodCallback($ssh)
     {
         $callbackObject = $this->getMockBuilder('stdClass')
@@ -138,10 +133,8 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         );
     }
 
-    /**
-     * @depends testExecWithMethodCallback
-     * @group github1009
-     */
+    #[Depends('testExecWithMethodCallback')]
+    #[Group('github1009')]
     public function testDisablePTY($ssh)
     {
         $ssh->enablePTY();
@@ -154,10 +147,8 @@ class Functional_Net_SSH2Test extends PhpseclibFunctionalTestCase
         return $ssh;
     }
 
-    /**
-     * @depends testDisablePTY
-     * @group github1167
-     */
+    #[Depends('testDisablePTY')]
+    #[Group('github1167')]
     public function testChannelDataAfterOpen($ssh)
     {
         // Ubuntu's OpenSSH from 5.8 to 6.9 didn't work with multiple channels. see
diff --git a/tests/Unit/Crypt/AES/TestCase.php b/tests/Unit/Crypt/AES/TestCase.php
index c7c47cd..2fccdd2 100644
--- a/tests/Unit/Crypt/AES/TestCase.php
+++ b/tests/Unit/Crypt/AES/TestCase.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 require_once 'Crypt/AES.php';
 
 abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
@@ -72,6 +74,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
     /**
      * @dataProvider continuousBufferCombos
      */
+    #[DataProvider('continuousBufferCombos')]
     public function testEncryptDecryptWithContinuousBuffer($mode, $plaintext, $iv, $key)
     {
         $aes = new Crypt_AES(constant($mode));
@@ -169,6 +172,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
     /**
      * @dataProvider continuousBufferBatteryCombos
      */
+    #[DataProvider('continuousBufferBatteryCombos')]
     public function testContinuousBufferBattery($op, $mode, $test)
     {
         $iv = str_repeat('x', 16);
@@ -216,6 +220,7 @@ abstract class Unit_Crypt_AES_TestCase extends PhpseclibTestCase
      *
      * @dataProvider continuousBufferBatteryCombos
      */
+    #[DataProvider('continuousBufferBatteryCombos')]
     public function testNonContinuousBufferBattery($op, $mode, $test)
     {
         if (count($test) == 1) {
diff --git a/tests/Unit/Crypt/BlowfishTest.php b/tests/Unit/Crypt/BlowfishTest.php
index 5ed327e..45997f0 100644
--- a/tests/Unit/Crypt/BlowfishTest.php
+++ b/tests/Unit/Crypt/BlowfishTest.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 require_once 'Crypt/Blowfish.php';
 require_once 'Crypt/Random.php';
 
@@ -71,6 +73,7 @@ class Unit_Crypt_BlowfishTest extends PhpseclibTestCase
     /**
      * @dataProvider engineVectors
      */
+    #[DataProvider('engineVectors')]
     public function testVectors($engine, $engineName, $key, $plaintext, $expected)
     {
         $bf = new Crypt_Blowfish();
diff --git a/tests/Unit/Crypt/Hash/MD5Test.php b/tests/Unit/Crypt/Hash/MD5Test.php
index a296959..b6207fb 100644
--- a/tests/Unit/Crypt/Hash/MD5Test.php
+++ b/tests/Unit/Crypt/Hash/MD5Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 class Unit_Crypt_Hash_MD5Test extends Unit_Crypt_Hash_TestCase
 {
     public function getInstance()
@@ -15,6 +17,7 @@ class Unit_Crypt_Hash_MD5Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $result)
     {
         $this->assertHashesTo($this->getInstance(), $message, $result);
@@ -32,6 +35,7 @@ class Unit_Crypt_Hash_MD5Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $result)
     {
         $this->assertHMACsTo($this->getInstance(), $key, $message, $result);
diff --git a/tests/Unit/Crypt/Hash/SHA256Test.php b/tests/Unit/Crypt/Hash/SHA256Test.php
index b4b1995..f1e687b 100644
--- a/tests/Unit/Crypt/Hash/SHA256Test.php
+++ b/tests/Unit/Crypt/Hash/SHA256Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 class Unit_Crypt_Hash_SHA256Test extends Unit_Crypt_Hash_TestCase
 {
     public function getInstance()
@@ -15,6 +17,7 @@ class Unit_Crypt_Hash_SHA256Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $result)
     {
         $this->assertHashesTo($this->getInstance(), $message, $result);
@@ -41,6 +44,7 @@ class Unit_Crypt_Hash_SHA256Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $result)
     {
         $this->assertHMACsTo($this->getInstance(), $key, $message, $result);
diff --git a/tests/Unit/Crypt/Hash/SHA256_96Test.php b/tests/Unit/Crypt/Hash/SHA256_96Test.php
index 5e1f113..a9cab69 100644
--- a/tests/Unit/Crypt/Hash/SHA256_96Test.php
+++ b/tests/Unit/Crypt/Hash/SHA256_96Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 require_once 'SHA256Test.php';
 
 class Unit_Crypt_Hash_SHA256_96Test extends Unit_Crypt_Hash_SHA256Test
@@ -17,6 +19,7 @@ class Unit_Crypt_Hash_SHA256_96Test extends Unit_Crypt_Hash_SHA256Test
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $longResult)
     {
         parent::testHash($message, substr($longResult, 0, 24));
@@ -25,6 +28,7 @@ class Unit_Crypt_Hash_SHA256_96Test extends Unit_Crypt_Hash_SHA256Test
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $longResult)
     {
         parent::testHMAC($key, $message, substr($longResult, 0, 24));
diff --git a/tests/Unit/Crypt/Hash/SHA512Test.php b/tests/Unit/Crypt/Hash/SHA512Test.php
index 0a0e581..abe48b6 100644
--- a/tests/Unit/Crypt/Hash/SHA512Test.php
+++ b/tests/Unit/Crypt/Hash/SHA512Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 class Unit_Crypt_Hash_SHA512Test extends Unit_Crypt_Hash_TestCase
 {
     public function getInstance()
@@ -15,6 +17,7 @@ class Unit_Crypt_Hash_SHA512Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $result)
     {
         $this->assertHashesTo($this->getInstance(), $message, $result);
@@ -41,6 +44,7 @@ class Unit_Crypt_Hash_SHA512Test extends Unit_Crypt_Hash_TestCase
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $result)
     {
         $this->assertHMACsTo($this->getInstance(), $key, $message, $result);
diff --git a/tests/Unit/Crypt/Hash/SHA512_96Test.php b/tests/Unit/Crypt/Hash/SHA512_96Test.php
index f5cdce8..cb490c5 100644
--- a/tests/Unit/Crypt/Hash/SHA512_96Test.php
+++ b/tests/Unit/Crypt/Hash/SHA512_96Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 require_once 'SHA512Test.php';
 
 class Unit_Crypt_Hash_SHA512_96Test extends Unit_Crypt_Hash_SHA512Test
@@ -17,6 +19,7 @@ class Unit_Crypt_Hash_SHA512_96Test extends Unit_Crypt_Hash_SHA512Test
     /**
      * @dataProvider hashData()
      */
+    #[DataProvider('hashData')]
     public function testHash($message, $longResult)
     {
         parent::testHash($message, substr($longResult, 0, 24));
@@ -25,6 +28,7 @@ class Unit_Crypt_Hash_SHA512_96Test extends Unit_Crypt_Hash_SHA512Test
     /**
      * @dataProvider hmacData()
      */
+    #[DataProvider('hmacData')]
     public function testHMAC($key, $message, $longResult)
     {
         parent::testHMAC($key, $message, substr($longResult, 0, 24));
diff --git a/tests/Unit/Crypt/RC2Test.php b/tests/Unit/Crypt/RC2Test.php
index 9be7448..cf47dd1 100644
--- a/tests/Unit/Crypt/RC2Test.php
+++ b/tests/Unit/Crypt/RC2Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\Group;
+
 require_once 'Crypt/RC2.php';
 
 class Unit_Crypt_RC2Test extends PhpseclibTestCase
@@ -104,9 +106,7 @@ class Unit_Crypt_RC2Test extends PhpseclibTestCase
         }
     }
 
-    /**
-     * @group nophpunit11
-     */
+    #[Group('nophpunit11')]
     public function testVectors($engine, $engineName, $key, $keyLen, $plaintext, $ciphertext)
     {
         $rc2 = new Crypt_RC2();
diff --git a/tests/Unit/Crypt/RC4Test.php b/tests/Unit/Crypt/RC4Test.php
index ec893d5..5e8334c 100644
--- a/tests/Unit/Crypt/RC4Test.php
+++ b/tests/Unit/Crypt/RC4Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 require_once 'Crypt/RC4.php';
 
 class Unit_Crypt_RC4Test extends PhpseclibTestCase
@@ -197,6 +199,7 @@ class Unit_Crypt_RC4Test extends PhpseclibTestCase
     /**
      * @dataProvider engineVectors
      */
+    #[DataProvider('engineVectors')]
     public function testVectors($engine, $engineName, $key, $offset, $expected)
     {
         $rc4 = new Crypt_RC4();
diff --git a/tests/Unit/Crypt/RandomTest.php b/tests/Unit/Crypt/RandomTest.php
index 5ba389b..767d19d 100644
--- a/tests/Unit/Crypt/RandomTest.php
+++ b/tests/Unit/Crypt/RandomTest.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\Group;
+
 class Unit_Crypt_RandomTest extends PhpseclibTestCase
 {
     public static function stringLengthData()
@@ -16,7 +18,7 @@ class Unit_Crypt_RandomTest extends PhpseclibTestCase
         ));
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testStringLength($length)
     {
         $this->assertSame(
diff --git a/tests/Unit/Crypt/TripleDESTest.php b/tests/Unit/Crypt/TripleDESTest.php
index a1f23af..4d48d85 100644
--- a/tests/Unit/Crypt/TripleDESTest.php
+++ b/tests/Unit/Crypt/TripleDESTest.php
@@ -5,6 +5,9 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\Attributes\Group;
+
 require_once 'Crypt/TripleDES.php';
 
 class Unit_Crypt_TripleDESTest extends PhpseclibTestCase
@@ -98,9 +101,7 @@ class Unit_Crypt_TripleDESTest extends PhpseclibTestCase
         return $result;
     }
 
-    /**
-     * @group nophpunit11
-     */
+    #[Group('nophpunit11')]
     public function testVectors($engine, $engineName, $key, $plaintext, $expected)
     {
         $des = new Crypt_TripleDES();
@@ -152,6 +153,7 @@ class Unit_Crypt_TripleDESTest extends PhpseclibTestCase
     /**
      * @dataProvider engineIVVectors
      */
+    #[DataProvider('engineIVVectors')]
     public function testVectorsWithIV($engine, $engineName, $key, $iv, $plaintext, $expected)
     {
         $des = new Crypt_TripleDES();
diff --git a/tests/Unit/Net/SSH1Test.php b/tests/Unit/Net/SSH1Test.php
index ac08287..600d1fd 100644
--- a/tests/Unit/Net/SSH1Test.php
+++ b/tests/Unit/Net/SSH1Test.php
@@ -5,6 +5,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\DataProvider;
+
 class Unit_Net_SSH1Test extends PhpseclibTestCase
 {
     public static function formatLogDataProvider()
@@ -27,6 +29,7 @@ class Unit_Net_SSH1Test extends PhpseclibTestCase
     /**
      * @dataProvider formatLogDataProvider
      */
+    #[DataProvider('formatLogDataProvider')]
     public function testFormatLog(array $message_log, array $message_number_log, $expected)
     {
         $ssh = $this->getMockBuilder('Net_SSH1')
diff --git a/tests/Unit/Net/SSH2UnitTest.php b/tests/Unit/Net/SSH2UnitTest.php
index 3b2fe00..8866028 100644
--- a/tests/Unit/Net/SSH2UnitTest.php
+++ b/tests/Unit/Net/SSH2UnitTest.php
@@ -6,6 +6,8 @@
  * @license   http://www.opensource.org/licenses/mit-license.html  MIT License
  */
 
+use PHPUnit\Framework\Attributes\Group;
+
 class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
 {
     public static function formatLogDataProvider()
@@ -25,9 +27,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         );
     }
 
-    /**
-     * @group nophpunit11
-     */
+    #[Group('nophpunit11')]
     public function testFormatLog(array $message_log, array $message_number_log, $expected)
     {
         $ssh = $this->createSSHMock();
@@ -36,7 +36,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         $this->assertEquals($expected, $result);
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testGenerateIdentifier()
     {
         $identifier = $this->createSSHMock()->_generate_identifier();
@@ -65,7 +65,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         }
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testGetExitStatusIfNotConnected()
     {
         $ssh = $this->createSSHMock();
@@ -73,14 +73,14 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         $this->assertFalse($ssh->getExitStatus());
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testPTYIDefaultValue()
     {
         $ssh = $this->createSSHMock();
         $this->assertFalse($ssh->isPTYEnabled());
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testEnablePTY()
     {
         $ssh = $this->createSSHMock();
@@ -92,7 +92,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         $this->assertFalse($ssh->isPTYEnabled());
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testQuietModeDefaultValue()
     {
         $ssh = $this->createSSHMock();
@@ -100,7 +100,7 @@ class Unit_Net_SSH2UnitTest extends PhpseclibTestCase
         $this->assertFalse($ssh->isQuietModeEnabled());
     }
 
-    /** @group nophpunit11 */
+    #[Group('nophpunit11')]
     public function testEnableQuietMode()
     {
         $ssh = $this->createSSHMock();
