Subversion Repositories eFlore/Applications.eflore-consultation

Rev

Go to most recent revision | Details | Last modification | View Log | RSS feed

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