Subversion Repositories eFlore/Projets.eflore-projets

Rev

Rev 790 | Rev 855 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 790 Rev 833
1
<?php
1
<?php
2
// declare(encoding='UTF-8');
2
// declare(encoding='UTF-8');
3
/**
3
/**
4
 * Classe contenant des méthodes :
4
 * Classe contenant des méthodes :
5
 *  - d'intialisation des tests,
5
 *  - d'intialisation des tests,
6
 *  - refactorisant le code des tests,
6
 *  - refactorisant le code des tests,
7
 *  - facilitant les tests.
7
 *  - facilitant les tests.
8
 *
8
 *
9
 * @category	php 5.3
9
 * @category	php 5.3
10
 * @package		Tests/Services
10
 * @package		Tests/Services
11
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
11
 * @author		Jean-Pascal MILCENT <jpm@tela-botanica.org>
12
 * @copyright	Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
12
 * @copyright	Copyright (c) 2011, Tela Botanica (accueil@tela-botanica.org)
13
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
13
 * @license		http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
14
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
14
 * @license		http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
15
 * @version		$Id$
15
 * @version		$Id$
16
 */
16
 */
17
abstract class ServiceEflorePhpUnit extends PHPUnit_Framework_TestCase {
17
abstract class ServiceEflorePhpUnit extends PHPUnit_Framework_TestCase {
18
 
18
 
19
	/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/
19
	/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/
20
	protected $projet = '';
20
	protected $projet = '';
21
	/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/
21
	/** Définir la valeur de cet attribut dans le constructeur de la classe de test.*/
22
	protected $service = '';
22
	protected $service = '';
23
 
23
 
24
	//+------------------------------------------------------------------------------------------------------+
24
	//+------------------------------------------------------------------------------------------------------+
25
	// Intialisation
25
	// Intialisation
26
 
26
 
27
	public static function setUpBeforeClass() {
27
	public static function setUpBeforeClass() {
28
		error_reporting(E_ALL);
28
		error_reporting(E_ALL);
29
 
29
 
30
		self::chargerFramework();
30
		self::chargerFramework();
31
 
31
 
32
		// Enregistrement en première position des autoload de la méthode gérant les classes des services
32
		// Enregistrement en première position des autoload de la méthode gérant les classes des services
33
		spl_autoload_register(array(get_class(), 'chargerClasseAuto'));
33
		spl_autoload_register(array(get_class(), 'chargerClasseAuto'));
34
	}
34
	}
35
 
35
 
36
	public static function chargerClasseAuto($classe) {
36
	public static function chargerClasseAuto($classe) {
37
		if (class_exists($classe)) {
37
		if (class_exists($classe)) {
38
			return null;
38
			return null;
39
		}
39
		}
40
		$cheminBase = realpath(__DIR__.'/../../modules/0.1').'/';
40
		$cheminBase = realpath(__DIR__.'/../../modules/0.1').'/';
41
		$cheminsTests = __DIR__.'/';
41
		$cheminsTests = __DIR__.'/';
42
		$chemins = array($cheminBase, $cheminsTests);
42
		$chemins = array($cheminBase, $cheminsTests);
43
		foreach ($chemins as $chemin) {
43
		foreach ($chemins as $chemin) {
44
			$chemin = $chemin.$classe.'.php';
44
			$chemin = $chemin.$classe.'.php';
45
			if (file_exists($chemin)) {
45
			if (file_exists($chemin)) {
46
				require_once $chemin;
46
				require_once $chemin;
47
			}
47
			}
48
		}
48
		}
49
	}
49
	}
50
 
50
 
51
	private static function chargerFramework() {
51
	private static function chargerFramework() {
52
		$cheminRacine = realpath(dirname(__FILE__).'/../..').'/';
52
		$cheminRacine = realpath(dirname(__FILE__).'/../..').'/';
53
		$framework =  $cheminRacine.'framework.php';
53
		$framework =  $cheminRacine.'framework.php';
54
		if (!file_exists($framework)) {
54
		if (!file_exists($framework)) {
55
			$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
55
			$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
56
			trigger_error($e, E_USER_ERROR);
56
			trigger_error($e, E_USER_ERROR);
57
		} else {
57
		} else {
58
			// Inclusion du Framework
58
			// Inclusion du Framework
59
			require_once $framework;
59
			require_once $framework;
60
 
60
 
61
			// Ajout d'information concernant cette application
61
			// Ajout d'information concernant cette application
62
			Framework::setCheminAppli($cheminRacine);// Obligatoire
62
			Framework::setCheminAppli($cheminRacine);// Obligatoire
63
		}
63
		}
64
	}
64
	}
65
 
65
 
66
	//+------------------------------------------------------------------------------------------------------+
66
	//+------------------------------------------------------------------------------------------------------+
67
	// Refactorisation
67
	// Refactorisation
68
	public function consulterJson($service, $projet, $ressources, $parametres) {
68
	public function consulterJson($service, $projet, $ressources, $parametres = NULL) {
69
		$retourJson = self::consulterBrut($service, $projet, $ressources, $parametres);
69
		$retourJson = self::consulterBrut($service, $projet, $ressources, $parametres);
70
		$retour = json_decode($retourJson, true);
70
		$retour = json_decode($retourJson, true);
71
		$url = self::creerUrl($service, $ressources, $parametres);
71
		$url = self::creerUrl($service, $ressources, $parametres);
72
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url\n".print_r($retourJson, true));
72
		$this->assertEquals(JSON_ERROR_NONE, json_last_error(), "Le json contient des erreurs qui bloquent le décodage. Voir : $url\n".print_r($retourJson, true));
73
		return $retour;
73
		return $retour;
74
	}
74
	}
75
 
75
 
76
	static function consulterBrut($service, $projet, $ressources, $parametres) {
76
	static function consulterBrut($service, $projet, $ressources, $parametres = NULL) {
77
		array_unshift($ressources, $service);
-
 
78
		array_unshift($ressources, $projet);
77
		array_unshift($ressources, $projet, $service);
79
		$projets = new Projets();
78
		$projets = new Projets();
80
		$retourJson = $projets->consulter($ressources, $parametres);
79
		$retourJson = $projets->consulter($ressources, $parametres);
81
		return $retourJson;
80
		return $retourJson;
82
	}
81
	}
83
 
82
 
84
	static function creerUrl($service, $ressources, $parametres) {
83
	static function creerUrl($service, $ressources, $parametres = NULL) {
85
		// TODO ? $version
84
		// TODO ? $version
86
		$ressourcesUrl = array();
85
		$ressourcesUrl = array();
87
		foreach ($ressources as $ressource) {
86
		foreach ($ressources as $ressource) {
88
			$ressourcesUrl[] = $ressource;
87
			$ressourcesUrl[] = $ressource;
89
		}
88
		}
90
		$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : '';
89
		$ressourcesUrl = count($ressourcesUrl) > 0 ? '/'.implode('/', $ressourcesUrl) : '';
91
 
90
 
92
		$parametresUrl = '';
91
		$parametresUrl = '';
93
		if (count($parametres) > 0) {
92
		if ($parametres) {
94
			foreach ($parametres as $cle => $valeur) {
93
			foreach ($parametres as $cle => $valeur) {
95
				$parametresUrl[] = $cle.'='.rawurlencode($valeur);
94
				$parametresUrl[] = $cle.'='.rawurlencode($valeur);
96
			}
95
			}
97
			$parametresUrl = '?'.implode('&', $parametresUrl);
96
			$parametresUrl = '?'.implode('&', $parametresUrl);
98
		}
97
		}
99
 
98
 
100
		return Config::get('url_service') . '/' . $service . $ressourcesUrl . $parametresUrl;
99
		return Config::get('url_service') . '/' . $service . $ressourcesUrl . $parametresUrl;
101
	}
100
	}
102
 
101
 
103
	//+------------------------------------------------------------------------------------------------------+
102
	//+------------------------------------------------------------------------------------------------------+
104
	// Méthodes facilitant les tests
103
	// Méthodes facilitant les tests
105
 
104
 
106
	/**
105
	/**
107
	* Récupère un bouchon de classe abstraite.
106
	* Récupère un bouchon de classe abstraite.
108
	* Comment l'utiliser :
107
	* Comment l'utiliser :
109
	* 	$classeAstraite = $this->getClasseAbstraite('MaClasse', array('param1', 'param2'));
108
	* 	$classeAstraite = $this->getClasseAbstraite('MaClasse', array('param1', 'param2'));
110
	*   $foo = $classeAstraite->methodeConcretePublique();
109
	*   $foo = $classeAstraite->methodeConcretePublique();
111
	*
110
	*
112
	* @param String $classeNom Le nom de la classe
111
	* @param String $classeNom Le nom de la classe
113
	* @param Array $parametres Les paramètres à passer au constructeur.
112
	* @param Array $parametres Les paramètres à passer au constructeur.
114
	* @return Object Le bouchon de la classe abstraite
113
	* @return Object Le bouchon de la classe abstraite
115
	*/
114
	*/
116
	public function getClasseAbstraite($classeNom, Array $parametres) {
115
	public function getClasseAbstraite($classeNom, Array $parametres) {
117
		$efloreScript = $this->getMockForAbstractClass($classeNom, $parametres);
116
		$efloreScript = $this->getMockForAbstractClass($classeNom, $parametres);
118
		return $efloreScript;
117
		return $efloreScript;
119
	}
118
	}
120
 
119
 
121
	/**
120
	/**
122
	 * Récupère une méthode privée d'une classe pour tester/documenter.
121
	 * Récupère une méthode privée d'une classe pour tester/documenter.
123
	 * Comment l'utiliser :
122
	 * Comment l'utiliser :
124
	 * 	MyClass->foo():
123
	 * 	MyClass->foo():
125
	 *   $cls = new MyClass();
124
	 *   $cls = new MyClass();
126
	 *   $foo = self::getPrivateMethode($cls, 'foo');
125
	 *   $foo = self::getPrivateMethode($cls, 'foo');
127
	 *   $foo->invoke($cls, $...);
126
	 *   $foo->invoke($cls, $...);
128
	 *
127
	 *
129
	 * @param object $objet Une instance de votre classe
128
	 * @param object $objet Une instance de votre classe
130
	 * @param string $methode Le nom de la méthode private
129
	 * @param string $methode Le nom de la méthode private
131
	 * @return ReflectionMethod La méthode demandée
130
	 * @return ReflectionMethod La méthode demandée
132
	 */
131
	 */
133
	public static function getMethodePrivee($objet, $nomMethode) {
132
	public static function getMethodePrivee($objet, $nomMethode) {
134
		$classe = new ReflectionClass($objet);
133
		$classe = new ReflectionClass($objet);
135
		$methode = $classe->getMethod($nomMethode);
134
		$methode = $classe->getMethod($nomMethode);
136
		$methode->setAccessible(true);
135
		$methode->setAccessible(true);
137
		return $methode;
136
		return $methode;
138
	}
137
	}
139
 
138
 
140
	/**
139
	/**
141
	* Récupère une méthode protégée d'une classe pour tester/documenter.
140
	* Récupère une méthode protégée d'une classe pour tester/documenter.
142
	* Comment l'utiliser :
141
	* Comment l'utiliser :
143
	* 	MyClass->foo():
142
	* 	MyClass->foo():
144
	*   $cls = new MyClass();
143
	*   $cls = new MyClass();
145
	*   $foo = self::getProtectedMethode($cls, 'foo');
144
	*   $foo = self::getProtectedMethode($cls, 'foo');
146
	*   $foo->invoke($cls, $...);
145
	*   $foo->invoke($cls, $...);
147
	* @param object $objet Une instance de votre classe
146
	* @param object $objet Une instance de votre classe
148
	* @param string $methode Le nom de la méthode protected
147
	* @param string $methode Le nom de la méthode protected
149
	* @return ReflectionMethod La méthode demandée
148
	* @return ReflectionMethod La méthode demandée
150
	*/
149
	*/
151
	public static function getMethodeProtegee($objet, $nomMethode) {
150
	public static function getMethodeProtegee($objet, $nomMethode) {
152
		return self::getMethodePrivee($objet, $nomMethode);
151
		return self::getMethodePrivee($objet, $nomMethode);
153
	}
152
	}
154
}
153
}
155
 
154
 
156
/*
155
/*
157
sed -i 's/$this->consulterBrut(/ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, /' $(grep -rl consulterBrut)
156
sed -i 's/$this->consulterBrut(/ServiceEflorePhpUnit::consulterBrut($this->service, $this->projet, /' $(grep -rl consulterBrut)
158
sed -i 's/$this->consulterJson(/$this->consulterJson($this->service, $this->projet, /' $(grep -rl consulterJson)
157
sed -i 's/$this->consulterJson(/$this->consulterJson($this->service, $this->projet, /' $(grep -rl consulterJson)
159
sed -i 's/$this->creerUrl(/ServiceEflorePhpUnit::creerUrl($this->service, /' $(grep -rl creerUrl) 
158
sed -i 's/$this->creerUrl(/ServiceEflorePhpUnit::creerUrl($this->service, /' $(grep -rl creerUrl) 
160
*/
159
*/
161
?>
160
?>