Skip to content
Extraits de code Groupes Projets
Valider a2903122 rédigé par marcimat's avatar marcimat Validation de marcimat
Parcourir les fichiers

tests: tests _DIR_PLUGINS_SUPPL en PHPUnit

parent ff76f0e7
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
<?php
declare(strict_types=1);
namespace Spip\Test\Filesystem;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Depends;
use PHPUnit\Framework\TestCase;
class DirPluginsSupplTest extends TestCase
{
const DIR_PLUGINS_SUPPL = _DIR_TMP . 'test_dir_plugins_suppl/';
const DIR_PLUGINS_OUTSIDE = _DIR_TMP . 'test_dir_plugins_outisde/';
const PAQUET_TEST = 'toto/paquet.xml';
public static function setUpBeforeClass(): void {
find_in_path('./inc/plugin.php', '', true);
supprimer_repertoire(self::DIR_PLUGINS_SUPPL);
mkdir(self::DIR_PLUGINS_SUPPL . 'toto', 0777, true);
mkdir(self::DIR_PLUGINS_OUTSIDE . 'toto', 0777, true);
copy(__DIR__ . '/data/paquet.xml', self::DIR_PLUGINS_SUPPL . self::PAQUET_TEST);
copy(__DIR__ . '/data/paquet.xml', self::DIR_PLUGINS_OUTSIDE . self::PAQUET_TEST);
}
public static function tearDownAfterClass(): void {
supprimer_repertoire(self::DIR_PLUGINS_SUPPL);
supprimer_repertoire(self::DIR_PLUGINS_OUTSIDE);
}
public function testConstant() {
// preparation: la constante est elle definie et comprend uniquement 1 reps suppl?
if (defined('_DIR_PLUGINS_SUPPL') && _DIR_PLUGINS_SUPPL !== self::DIR_PLUGINS_SUPPL) {
$this->markTestSkipped(sprintf('La constante _DIR_PLUGINS_SUPPL est déjà définie, le test ne peut s’appliquer. Valeur "%s"', _DIR_PLUGINS_SUPPL));
}
define('_DIR_PLUGINS_SUPPL', self::DIR_PLUGINS_SUPPL);
if (substr_count(_DIR_PLUGINS_SUPPL, ':') !== 0) {
$this->markTestSkipped(sprintf('La constante _DIR_PLUGINS_SUPPL ne doit contenir qu’un seul chemin supplémentaire. Valeur: "%s"', _DIR_PLUGINS_SUPPL));
}
if (!str_ends_with(_DIR_PLUGINS_SUPPL, '/')) {
$this->markTestSkipped(sprintf('La constante _DIR_PLUGINS_SUPPL doit terminer par un /. Valeur: "%s"', _DIR_PLUGINS_SUPPL));
}
$this->assertTrue(true);
}
#[Depends('testConstant')]
public function testDirectory() {
// le rep suppl existe
$this->assertTrue(is_dir(self::DIR_PLUGINS_SUPPL), sprintf('Le répertoire "%s" aurait du être créé', self::DIR_PLUGINS_SUPPL));
$this->assertTrue(file_exists(self::DIR_PLUGINS_SUPPL . self::PAQUET_TEST), sprintf('Le fichier "%s" aurait du être créé', self::DIR_PLUGINS_SUPPL . self::PAQUET_TEST));
// le rep outside existe
$this->assertTrue(is_dir(self::DIR_PLUGINS_OUTSIDE), sprintf('Le répertoire "%s" aurait du être créé', self::DIR_PLUGINS_OUTSIDE));
$this->assertTrue(file_exists(self::DIR_PLUGINS_OUTSIDE . self::PAQUET_TEST), sprintf('Le fichier "%s" aurait du être créé', self::DIR_PLUGINS_OUTSIDE . self::PAQUET_TEST));
}
#[Depends('testDirectory')]
public function testListePluginsSuppl() {
$plugins = liste_plugin_files(self::DIR_PLUGINS_SUPPL);
// verifier qu'on retrouve bien tous les rep suppl de _DIR_PLUGINS_SUPPL
$this->assertContains('toto', $plugins, sprintf('Le répertoire "%s" non trouvé dans "%s"', 'toto', self::DIR_PLUGINS_SUPPL));
// Mais pas des plugins en trop !
$this->assertCount(1, $plugins, sprintf('Il y a plus qu’un plugin trouvé dans "%s"', self::DIR_PLUGINS_SUPPL));
}
}
<paquet
prefix="test_dir_plugins_suppl"
categorie="squelette"
version="1.0.0"
etat="stable"
compatibilite="[5.0.0-dev;5.*]"
>
<nom>Test Dir PLugins Suppl</nom>
</paquet>
<?php
declare(strict_types=1);
/**
* Test unitaire de prise en compte de la constante _DIR_PLUGINS_SUPPL par la fonction liste_plugin_files() du fichier
* ./inc/plugin.php
*/
$test = '_DIR_PLUGINS_SUPPL';
$remonte = __DIR__ . '/';
while (!is_file($remonte . 'test.inc')) {
$remonte .= '../';
}
require $remonte . 'test.inc';
find_in_path('./inc/plugin.php', '', true);
// lancer le binz
echo test_dir_plugins_suppl();
function test_dir_plugins_suppl() {
// preparation: la constante est elle definie et comprend uniquement 1 reps suppl?
if (!defined('_DIR_PLUGINS_SUPPL')) {
define('_DIR_PLUGINS_SUPPL', _DIR_TMP . 'plug_sup/');
} elseif (substr_count(_DIR_PLUGINS_SUPPL, ':') !== 0) {
return 'NA : la constante _DIR_PLUGINS_SUPPL definie dans mes_options.php ne doit contenir qu\'un seul chemin supplementaire ; actuellement sa valeur est "' . _DIR_PLUGINS_SUPPL . '"';
}
if (!str_ends_with(_DIR_PLUGINS_SUPPL, '/')) {
return 'NA : la constante _DIR_PLUGINS_SUPPL doit terminer par un / ; actuellement sa valeur est "' . _DIR_PLUGINS_SUPPL . '"';
}
// preparation: verifier qu'il existe au moins un dossier plugin par rep suppl (i.e. contenant un fichier paquet.xml)?
$Ta_effacer = [];
$Ta_retrouver = [];
$existe_paquet = false;
// le rep suppl n'existe pas; le creer
if (!is_dir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)) {
if (!@mkdir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)) {
return 'NA probleme de droits d\'ecriture 0, impossible de creer le dossier de _DIR_PLUGINS_SUPPL: "' . _DIR_PLUGINS_SUPPL . '" necessaire pour ce test';
}
$Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL;
}
// le rep suppl est vide: creer un dossier de plugin bidon (toto) et y copier un paquet.xml
if (
(is_countable(scandir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)) ? count(
scandir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)
) : 0) < 3
) {
if (!@mkdir(_DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto')) {
nettoyage_plugins_suppl($Ta_effacer);
return 'NA probleme de droits d\ecriture 1, impossible de creer un dossier dans "' . _DIR_RACINE . _DIR_PLUGINS_SUPPL . '" necessaire pour ce test';
}
$Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto';
if (!@copy(_DIR_PLUGINS_DIST . 'dump/paquet.xml', _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto/paquet.xml')) {
nettoyage_plugins_suppl($Ta_effacer);
return 'NA probleme de droits d\ecriture 2, impossible de creer un fichier dans "' . _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto" necessaire pour ce test';
}
$Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto/paquet.xml';
$Ta_retrouver[] = 'toto';
$existe_paquet = true;
} else {
if ($pointeur = opendir(_DIR_RACINE . _DIR_PLUGINS_SUPPL)) {
while (false !== ($rep = readdir($pointeur))) {
if ($rep === '.' || $rep === '..' || !is_dir($rep)) {
continue;
} elseif ($pointeur = opendir(_DIR_RACINE . _DIR_PLUGINS_SUPPL . $rep)) {
while (false !== ($fichier = readdir($pointeur))) {
if ($fichier === 'paquet.xml') {
$Ta_retrouver[] = $rep;
$existe_paquet = true;
break;
}
}
}
}
}
// tous les sous-dossiers sont scannes et toujours pas de paquet.xml:
// creer un dossier bidon et y copier un paquet.xml
if (!$existe_paquet) {
if (
!in_array('toto', scandir(_DIR_RACINE . _DIR_PLUGINS_SUPPL), true) && !@mkdir(
_DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto'
)
) {
nettoyage_plugins_suppl($Ta_effacer);
return 'NA probleme de droits d\ecriture 3, impossible de creer un dossier dans "' . _DIR_RACINE . _DIR_PLUGINS_SUPPL . '" necessaire pour ce test';
}
$Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto';
if (!@copy(_DIR_PLUGINS_DIST . 'dump/paquet.xml', _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto/paquet.xml')) {
nettoyage_plugins_suppl($Ta_effacer);
return 'NA probleme de droits d\ecriture 4, impossible de creer un fichier dans "' . _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto" necessaire pour ce test';
}
$Ta_retrouver[] = 'toto';
$Ta_effacer[] = _DIR_RACINE . _DIR_PLUGINS_SUPPL . 'toto/paquet.xml';
$existe_paquet = true;
}
}
// preparation: creer au moins un dossier plugin hors de _DIR_PLUGINS et _DIR_PLUGINS_SUPPL
$rep_non_suppl = '';
if (substr_count(_DIR_PLUGINS_SUPPL, '/') > 1) {
$rep_non_suppl = substr(_DIR_PLUGINS_SUPPL, 0, strrpos(rtrim(_DIR_PLUGINS_SUPPL, '/'), '/')) . '/test_non_suppl';
} else {
$rep_non_suppl = _DIR_TMP . 'test_non_suppl';
}
if ($rep_non_suppl === _DIR_PLUGINS_SUPPL) {
return 'NA : le dossier "' . $rep_non_suppl . '" ne doit pas faire partie des repertoires definis dans _DIR_PLUGINS_SUPPL pour que ce test fonctionne';
}
if (!is_dir($rep_non_suppl)) {
if (!@mkdir($rep_non_suppl)) {
nettoyage_plugins_suppl($Ta_effacer);
return 'NA probleme de droits d\ecriture 5, impossible de creer le dossier "' . $rep_non_suppl . '" necessaire pour ce test';
}
$Ta_effacer[] = $rep_non_suppl;
}
if (!file_exists($rep_non_suppl . '/paquet.xml')) {
if (!@copy(_DIR_PLUGINS_DIST . 'dump/paquet.xml', $rep_non_suppl . '/paquet.xml')) {
nettoyage_plugins_suppl($Ta_effacer);
return 'NA probleme de droits d\ecriture 6, impossible de creer un fichier dans "' . $rep_non_suppl . '" necessaire pour ce test';
}
$Ta_effacer[] = $rep_non_suppl . '/paquet.xml';
}
// test 1: lancer liste_plugin_files() et recuperer l'array retourne
// verifier qu'on retrouve bien tous les rep suppl de _DIR_PLUGINS_SUPPL
$Tplugins_recups = liste_plugin_files(_DIR_PLUGINS_SUPPL);
$Terr = [];
$mess_err = '';
foreach ($Ta_retrouver as $rep) {
if (!in_array($rep, $Tplugins_recups, true)) {
$Terr[] = $rep;
}
}
if ($Terr !== []) {
if (count($Terr) !== 1) {
$mess_err .= "<li>Les repertoires supplementaires de _DIR_PLUGINS_SUPPL suivants n'ont pas etes trouves par la fonction liste_plugin_files(): ";
} else {
$mess_err .= "<li>Le repertoire supplementaire de _DIR_PLUGINS_SUPPL suivant n'a pas ete trouve par la fonction liste_plugin_files(): ";
}
$mess_err .= (implode(', ', $Terr));
}
// test 2: la liste des reps plugins trouves comprend t'elle des dossiers
// ni dans _DIR_PLUGINS ni dans _DIR_PLUGINS_SUPPL?
$Terr = [];
foreach ($Tplugins_recups as $rep_plug) {
if (
!is_dir(_DIR_PLUGINS . $rep_plug) && is_dir(_DIR_RACINE . $rep_plug)
) { // le rep existe mais pas dans _DIR_PLUGINS
$ok = false;
foreach ($Treps_suppl as $rep_suppl) {
if (substr_count($rep_plug, $rep_suppl) > 0) {
$ok = true;
break;
}
}
if (!$ok) {
$Terr[] = $rep_plug;
}
}
}
if ($Terr !== []) {
if (count($Terr) !== 1) {
$mess_err .= '<li>Les repertoires suivants ont etes trouves par la fonction liste_plugin_files(): ';
$mess_err .= (implode(', ', $Terr));
$mess_err .= " alors qu'ils n'appartiennent ni a _DIR_PLUGINS ni a _DIR_PLUGINS_SUPPL";
} else {
$mess_err .= '<li>Le repertoire suivant a ete trouve par la fonction liste_plugin_files(): ';
$mess_err .= (implode(', ', $Terr));
$mess_err .= " alors qu'il n'appartient ni a _DIR_PLUGINS ni a _DIR_PLUGINS_SUPPL";
}
}
// sortie propre du test
nettoyage_plugins_suppl($Ta_effacer);
if ($mess_err !== '') {
return '<ul>' . $mess_err . '</ul>';
}
return 'OK';
}
// nettoyer tous les fichiers et dossiers crees pour ce test
function nettoyage_plugins_suppl($Ta_supprimer) {
// inverser l'odre des elements de l'array pour eviter d'essayer d'effacer des reps qui contiennent encore des fichiers
arsort($Ta_supprimer);
foreach ($Ta_supprimer as $a_suppr) {
if (is_dir($a_suppr)) {
rmdir($a_suppr);
} elseif (file_exists($a_suppr)) {
unlink($a_suppr);
}
}
}
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter