diff --git a/ecrire/inc/nfslock.php b/ecrire/inc/nfslock.php
index e66921892c08b0ad09958b20eb489798f75173eb..c238c4469ad784518d102dd38868cf1ff6be7c09 100644
--- a/ecrire/inc/nfslock.php
+++ b/ecrire/inc/nfslock.php
@@ -225,7 +225,7 @@ function spip_nfslock($fichier, $max_age = 0) {
  * @see spip_nfslock()
  *
  * @param string $fichier Chemin du fichier
- * @param bool $birth Timestamp de l'heure de création du verrou
+ * @param int $birth Timestamp de l'heure de création du verrou
  * @param int $max_age Age maximum du verrou
  * @param bool $test Mode de test
  * return bool true si déverrouillé, false sinon
@@ -314,7 +314,7 @@ function spip_nfsunlock($fichier, $birth, $max_age = 0, $test = false) {
  * @see spip_nfsunlock() about lost and stolen locks.
  *
  * @param string $fichier Chemin du fichier
- * @param bool $birth Timestamp de l'heure de création du verrou
+ * @param int $birth Timestamp de l'heure de création du verrou
  * @param int $max_age Age maximum du verrou
  * return bool true si déverrouillé, false sinon
  */
diff --git a/ecrire/tests/Filesystem/FlockTest.php b/ecrire/tests/Filesystem/FlockTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..8814d7a65c96e53d5e1946957629d763d6633faa
--- /dev/null
+++ b/ecrire/tests/Filesystem/FlockTest.php
@@ -0,0 +1,29 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Spip\Test\Filesystem;
+
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\TestCase;
+
+class FlockTest extends TestCase
+{
+	public static function setUpBeforeClass(): void {
+		include_spip('inc/flock');
+	}
+
+	public function testSousRepertoire(): void {
+		$sous_repertoire = 'test' . md5(strval(random_int(0, mt_getrandmax())));
+		$this->assertSame(
+			sous_repertoire(_DIR_VAR, $sous_repertoire),
+			_DIR_VAR . $sous_repertoire . '/'
+		);
+		$this->assertTrue(file_exists(_DIR_VAR . $sous_repertoire));
+		$this->assertTrue(is_dir(_DIR_VAR . $sous_repertoire));
+
+		// Nettoyage
+		@unlink(_DIR_VAR . $sous_repertoire . '/.ok');
+		@rmdir(_DIR_VAR . $sous_repertoire);
+	}
+}
diff --git a/ecrire/tests/Filesystem/NfslockTest.php b/ecrire/tests/Filesystem/NfslockTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..d34679ff2df983ebc42b3154a54ba9b37f2e6d99
--- /dev/null
+++ b/ecrire/tests/Filesystem/NfslockTest.php
@@ -0,0 +1,27 @@
+<?php
+
+declare(strict_types=1);
+
+namespace Spip\Test\Filesystem;
+
+use PHPUnit\Framework\Attributes\DataProvider;
+use PHPUnit\Framework\TestCase;
+
+class NfslockTest extends TestCase
+{
+	public static function setUpBeforeClass(): void {
+		include_spip('inc/nfslock');
+	}
+
+	public function testNfslock(): void {
+		$verrou = spip_nfslock('monfichier');
+		$this->assertNotFalse($verrou, 'Echec: pose du verrou');
+
+		$this->assertTrue(spip_nfslock_test('monfichier', $verrou), 'Échec: Ne valide pas le verrou posé sur le fichier');
+		$this->assertFalse(spip_nfslock_test('un autre', $verrou), 'Échec: valide le verrou sur un autre fichier');
+		$this->assertTrue(spip_nfsunlock('monfichier', $verrou), 'Échec: déverrouillage du verrou sur notre fichier');
+
+		$this->assertFalse(spip_nfslock_test('monfichier', $verrou), 'Échec: verrou toujours présent sur notre fichier');
+		$this->assertFalse(spip_nfslock_test('monfichier', 0));
+	}
+}
diff --git a/ecrire/tests/legacy/unit/entrees_sorties/flock_sous_repertoire.php b/ecrire/tests/legacy/unit/entrees_sorties/flock_sous_repertoire.php
deleted file mode 100644
index d4b5eca9f37fc65e66f5a3cd1358314a0d02c13b..0000000000000000000000000000000000000000
--- a/ecrire/tests/legacy/unit/entrees_sorties/flock_sous_repertoire.php
+++ /dev/null
@@ -1,34 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-/**
- * Tests unitaires de sous_repertoire() du fichier ecrire/inc/flock.php
- */
-
-$test = 'sous_repertoire';
-$remonte = __DIR__ . '/';
-while (!is_file($remonte . 'test.inc')) {
-	$remonte .= '../';
-}
-
-require $remonte . 'test.inc';
-
-$ok = true;
-
-$sous_repertoire = 'test' . md5(strval(random_int(0, mt_getrandmax())));
-
-include_spip('inc/flock');
-
-$ok = (sous_repertoire(
-	_NOM_TEMPORAIRES_ACCESSIBLES,
-	$sous_repertoire
-) === _NOM_TEMPORAIRES_ACCESSIBLES . $sous_repertoire . '/');
-
-// Nettoyage
-@unlink(_NOM_TEMPORAIRES_ACCESSIBLES . $sous_repertoire . '/.ok');
-@rmdir(_NOM_TEMPORAIRES_ACCESSIBLES . $sous_repertoire);
-
-if ($ok) {
-	echo 'OK';
-}
diff --git a/ecrire/tests/legacy/unit/entrees_sorties/spip_nfslock.php b/ecrire/tests/legacy/unit/entrees_sorties/spip_nfslock.php
deleted file mode 100644
index 6eb74993fa19e2c3e096ebebae466c0a908a9e78..0000000000000000000000000000000000000000
--- a/ecrire/tests/legacy/unit/entrees_sorties/spip_nfslock.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-declare(strict_types=1);
-
-$test = 'spip_nfslock';
-
-$remonte = __DIR__ . '/';
-
-while (!is_file($remonte . 'test.inc')) {
-	$remonte .= '../';
-}
-
-require $remonte . 'test.inc';
-
-include_spip('inc/nfslock');
-
-$verrou = spip_nfslock('monfichier');
-
-$verrou_ok = spip_nfslock_test('monfichier', $verrou);
-
-$verrou_absent = spip_nfslock_test('un autre', $verrou);
-
-$deverrouille = spip_nfsunlock('monfichier', $verrou);
-
-$birth = false;
-
-$verrou_absent2 = spip_nfslock_test('monfichier', $birth);
-
-if ($verrou && $verrou_ok && !$verrou_absent && $deverrouille && !$verrou_absent2) {
-	echo 'OK';
-	exit;
-}
-
-echo '<ul><li>Erreur NFSLock :';
-
-echo '<ul>';
-
-echo "<li>verrou sur 'monfichier':{$verrou}</li>";
-
-echo "<li>test du verrou sur 'monfichier':{$verrou_ok}</li>";
-
-echo "<li>test du verrou sur 'un autre':{$verrou_absent}</li>";
-
-echo "<li>deverrouille 'monfichier':{$deverrouille}</li>";
-
-echo "<li>test du verrou sur 'monfichier':{$verrou_absent2}</li>";
-
-echo '</ul></li></ul>';