From ddaea3a6bff4adebd874ab03fd7818db38f578d0 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Tue, 27 Jul 2021 18:40:26 +0200
Subject: [PATCH] * un phpunit.xml.dist pour donner un environnement de base
 des tests * un script bin/configure.php qui construit un phpunit.xml prenant
 en compte ce dernier et en ajoutant tous les repertoire de tests/ des plugins
 qui contiennent des tests PHPUnit * un Makefile qui permet de lancer
 simplement `Make tests` pour lancer tous les tests en etant sur que tout est
 configure

Le phpunit.xml n'est pas mis a jour automatiquement si on active/desactive des plugins : il faut le supprimer manuellement pour qu'il soit regenere a la session suivante
(Idem si on ajoute un dossiers tests/ avec un tests unitaire PHPUnit dans un plugin deja actif)
---
 .gitignore        |  1 +
 Makefile          |  9 +++++++++
 bin/configure.php | 42 ++++++++++++++++++++++++++++++++++++++++++
 phpunit.xml.dist  | 11 +++++++++++
 4 files changed, 63 insertions(+)
 create mode 100644 Makefile
 create mode 100755 bin/configure.php
 create mode 100755 phpunit.xml.dist

diff --git a/.gitignore b/.gitignore
index d05bc65201..6d51f62f4f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -3,3 +3,4 @@ composer.lock
 /vendor/
 /vendor-bin/*/vendor/
 .phpunit.result.cache
+phpunit.xml
\ No newline at end of file
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000000..e8d922bdee
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,9 @@
+tests: vendor phpunit.xml
+	vendor/bin/phpunit --colors
+
+phpunit.xml:
+	php bin/configure.php
+
+vendor: composer.json
+	composer update
+	touch $@
\ No newline at end of file
diff --git a/bin/configure.php b/bin/configure.php
new file mode 100755
index 0000000000..fb1d3543d5
--- /dev/null
+++ b/bin/configure.php
@@ -0,0 +1,42 @@
+#!/usr/bin/env php
+<?php
+
+// les args a passer a phpUnit
+$args = $argv;
+array_shift($args);
+
+$dir_tests = dirname(__DIR__) . '/';
+// charger SPIP
+require_once $dir_tests . 'tests/spip.inc';
+
+// Lister les repertoires du path qui contiennent des dossier tests/ avec des tests PHPUnit
+
+$dirs = [];
+foreach (creer_chemin() as $d) {
+	if ($d and
+		is_dir("${d}tests")
+		and count(glob("${d}tests/*Test.php"))
+	) {
+		$bases[] = "${d}tests";
+	}
+}
+
+$prefixe_dir = '../';
+while (!is_dir($dir_tests . $prefixe_dir . 'ecrire')) {
+	$prefixe_dir .= '../';
+}
+
+$testsuites = [];
+foreach ($bases as $base) {
+	$name = dirname($base);
+	$testsuites[] = "<testsuite name=\"$name\"><directory>{$prefixe_dir}{$base}/</directory></testsuite>";
+}
+
+$testsuites = "\t\t" . implode("\n\t\t", $testsuites) . "\n";
+
+// generer le phpunit.xml a jour
+$config = file_get_contents($dir_tests .  'phpunit.xml.dist');
+$p = strpos($config, "\t</testsuites>");
+$config = substr_replace($config, $testsuites, $p, 0);
+
+file_put_contents($dir_tests . "phpunit.xml", $config);
diff --git a/phpunit.xml.dist b/phpunit.xml.dist
new file mode 100755
index 0000000000..31327c7f7f
--- /dev/null
+++ b/phpunit.xml.dist
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<phpunit bootstrap="./tests/spip.inc"
+         colors="true"
+         convertErrorsToExceptions="true"
+         convertNoticesToExceptions="true"
+         convertWarningsToExceptions="true"
+         stopOnFailure="false">
+	<testsuites>
+		<testsuite name="core"><directory>./tests/</directory></testsuite>
+ 	</testsuites>
+</phpunit>
-- 
GitLab