source: spip-zone/_plugins_/_stable_/simpletest/inc/tests.php @ 24737

Last change on this file since 24737 was 24737, checked in by marcimat@…, 12 years ago

Plugin pour des tests unitaires avec SPIP utilisant les librairies SimpleTest? (version 1.0.1).

L'api de simpleTest est enrichie pour proposer des tests spécifiques utilisant les fonctions de SPIP. La documentation sur Contrib va suivre.

Une remarque importante : pour que les tests fonctionnent, il ne PEUT pas y avoir le lien symbolique sur les répertoires plugins ou de simpleTests

Le répertoire tests/ (qui contient les premiers tests unitaires dans un format qui n'est pas simpleTest) peut être ajouté à la racine du site, les tests SimpleTests? se lanceront dedans correctement si ce plugin est activé.

File size: 21.8 KB
Line 
1<?php
2
3include_spip('simpletest/autorun');
4include_spip('inc/autoriser');
5
6if (!autoriser('configurer')) 
7        die('Administrateur requis !');
8if ($_SERVER["REMOTE_ADDR"]!='127.0.0.1')
9        die('Admin local requis pour executer les tests !');
10
11/*
12 * il faut remettre le chdir pour les fonctions de spip
13 * comme chemin() ou include_spip()
14 * a l'interieur de la classe.
15 */
16define('_CHDIR', getcwd());
17define('_DEBUG_MAX_SQUELETTE_ERREURS', 100);
18
19/**
20 * Extension SpipTest
21 * pour donner le bon repertoire de travail
22 * et definir d'autres fonctions d'assertion
23 */
24class SpipTest extends UnitTestCase { 
25        var $options_recuperer_code = array();
26        var $adresse_dernier_fichier_pour_code = '';
27       
28        function SpipTest($name = false) {
29                chdir(_CHDIR);
30               
31            if (!$name) {
32            $name = get_class($this);
33        }
34        $this->UnitTestCase($name);
35                // creer un repertoire pour les tests
36                // sert a la compilation
37                include_spip('inc/flock');
38                sous_repertoire(_DIR_CACHE, 'simpleTests');
39                define('_DIR_CODE',_DIR_CACHE . 'simpleTests/');
40    }
41       
42        /**
43         * Retourne l'adresse du site SPIP
44         */
45        function me(){
46                return $GLOBALS['meta']['url_site_spip'];
47        }
48       
49        /**
50         * Retourne une url pour tester une noisette
51         *
52         *
53         * @param string $noisette : noisette a tester
54         * @param array $params : tableau de params a transmettre
55         */
56        function generer_url_test($noisette, $params=array(), $var_mode_auto=true){
57                $appel = parametre_url(generer_url_public('simpletests'),'test',$noisette,'&');
58                foreach ($params as $p=>$v)
59                        $appel =  parametre_url($appel,$p,$v,'&');
60                if ($var_mode_auto) {
61                        if ($mode = $GLOBALS['var_mode'] AND in_array($mode, array('calcul','recalcul')))
62                                $appel =  parametre_url($appel,'var_mode',$mode,'&');
63                }
64                return $appel;
65        }
66       
67        /**
68         * Retourne une url pour tester une code
69         *
70         * Voir la fonction recuperer_fond pour les parametres
71         * @param string $code : code du squelette
72         * @param array $contexte : contexte de calcul du squelette
73         * @param array $opt : options ?
74         * @param string $connect : nom de la connexion a la bdd
75         *
76         * @return url d'appel
77         */     
78        function urlTestCode($code, $contexte=array(), $options = array(), $connect='') {
79                $infos = $this->recuperer_infos_code($code, $contexte, $options, $connect);
80                return $this->generer_url_test($infos['fond']);
81        }
82       
83        /**
84         * Determine si une chaine est de type NA (non applicable)
85         * @param string $chaine        Chaine a tester
86         * @return bool est-ce Non Applicable ?
87         */
88        function isNa($chaine) {
89                return substr(strtolower(trim($chaine)),0,2)=='na';
90        }
91       
92        /**
93         * Cree une exception si l'on est de type NA
94         * Retourne true si exception, false sinon.
95         *
96         * @param string $chaine        Chaine a tester
97         * @return bool         Est-ce Non Applicable ?
98         */
99        function exceptionSiNa($chaine) {
100                if ($this->isNa($chaine)) {
101                        throw new SpipNaException($chaine);
102                        return true;
103                }
104                return false;
105        }       
106       
107        /**
108         * Assertion qui verifie si le retour est la chaine 'ok' (casse indifferente)
109         *
110         * @param mixed $value valeur a tester si ok
111         * @param string $message : message pour une eventuelle erreur
112         * 
113         */
114        function assertOk($value, $message = "%s") {
115        $dumper = &new SimpleDumper();
116        $message = sprintf(
117                $message,
118                '[' . $dumper->describeValue($value) . '] should be string \'ok\'');
119                if ($this->exceptionSiNa($value)) {
120                        return false;
121                }
122        return $this->assertTrue((strtolower($value)=='ok'), $message);
123        }
124       
125        /**
126         * Assertion qui verifie que le retour n'est pas la chaine 'ok' (casse indifferente)
127         *
128         * @param mixed $value valeur a tester si pas ok
129         * @param string $message : message pour une eventuelle erreur
130         *
131         */
132        function assertNotOk($value, $message = "%s") {
133        $dumper = &new SimpleDumper();
134        $message = sprintf(
135                $message,
136                '[' . $dumper->describeValue($value) . '] shouldn\'t be string \'ok\'');
137        return $this->assertFalse((strtolower($value)=='ok'), $message);
138        }
139       
140        /**
141         * Assertion qui verifie si le retour ne vaut pas 'ok' (casse indifferente)
142         * la fonction appelle recuperer_code avec les arguments.
143         *
144         * L'appel
145         *              $this->assertNotOkCode('[(#CONFIG{pasla}|oui)ok]');
146         * est equivalent de :
147         *              $this->assertNotOk($this->recuperer_code('[(#CONFIG{pasla}|oui)ok]'));
148         *
149         * Voir la fonction recuperer_fond pour les parametres
150         * @param string $code : code du squelette
151         * @param array $contexte : contexte de calcul du squelette
152         * @param array $opt : options ?
153         * @param string $connect : nom de la connexion a la bdd
154         * @param string $message : message pour une eventuelle erreur
155         * 
156         * @return true/false
157         */
158        function assertNotOkCode($code, $contexte=array(), $options = array(), $connect='', $message = "%s") {
159                return $this->assertNotOk($this->recuperer_code($code, $contexte, $options, $connect), $message);
160        }
161       
162       
163        /**
164         * Assertion qui verifie si le retour vaut 'ok' (casse indifferente)
165         * la fonction appelle recuperer_code avec les arguments.
166         *
167         * L'appel
168         *              $this->assertOkCode('[(#CONFIG{pasla}|non)ok]');
169         * est equivalent de :
170         *              $this->assertOk($this->recuperer_code('[(#CONFIG{pasla}|non)ok]'));
171         *
172         * Voir la fonction recuperer_fond pour les parametres
173         * @param string $code : code du squelette
174         * @param array $contexte : contexte de calcul du squelette
175         * @param array $opt : options ?
176         * @param string $connect : nom de la connexion a la bdd
177         * @param string $message : message pour une eventuelle erreur
178         * 
179         * @return true/false
180         */
181        function assertOkCode($code, $contexte=array(), $options = array(), $connect='', $message = "%s") {
182                return $this->assertOk($this->recuperer_code($code, $contexte, $options, $connect), $message);
183        }
184       
185        /**
186         * Assertion qui verifie si le retour vaut $value
187         * la fonction appelle recuperer_code avec les arguments.
188         *
189         * L'appel
190         *              $this->assertEqualCode('ok','[(#CONFIG{pasla}|non)ok]');
191         * est equivalent de :
192         *              $this->assertEqual('ok',$this->recuperer_code('[(#CONFIG{pasla}|non)ok]'));
193         *
194         * Voir la fonction recuperer_fond pour les parametres
195         * @param string $value : chaine a comparer au resultat du code
196         * @param string $code : code du squelette
197         * @param array $contexte : contexte de calcul du squelette
198         * @param array $opt : options ?
199         * @param string $connect : nom de la connexion a la bdd
200         * @param string $message : message pour une eventuelle erreur
201         *
202         * @return true/false
203         */
204        function assertEqualCode($value, $code, $contexte=array(), $options = array(), $connect='', $message = "%s") {
205                return $this->assertEqual($value, $this->recuperer_code($code, $contexte, $options, $connect), $message);
206        }
207       
208       
209        /**
210         * Assertion qui verifie si le retour ne vaut pas $value
211         * la fonction appelle recuperer_code avec les arguments.
212         *
213         * L'appel
214         *              $this->assertEqualCode('ok','[(#CONFIG{pasla}|non)ok]');
215         * est equivalent de :
216         *              $this->assertEqual('ok',$this->recuperer_code('[(#CONFIG{pasla}|non)ok]'));
217         *
218         * Voir la fonction recuperer_fond pour les parametres
219         * @param string $value : chaine a comparer au resultat du code
220         * @param string $code : code du squelette
221         * @param array $contexte : contexte de calcul du squelette
222         * @param array $opt : options ?
223         * @param string $connect : nom de la connexion a la bdd
224         * @param string $message : message pour une eventuelle erreur
225         *
226         * @return true/false
227         */
228        function assertNotEqualCode($value, $code, $contexte=array(), $options = array(), $connect='', $message = "%s") {
229                return $this->assertNotEqual($value, $this->recuperer_code($code, $contexte, $options, $connect), $message);
230        }
231       
232        /**
233         * Assertion qui verifie si le retour verifie le pattern $pattern
234         * la fonction appelle recuperer_code avec les arguments.
235         *
236         * L'appel
237         *              $this->assertPatternCode('/^ok$/i','[(#CONFIG{pasla}|non)ok]');
238         * est equivalent de :
239         *              $this->assertPattern('/^ok$/i',$this->recuperer_code('[(#CONFIG{pasla}|non)ok]'));
240         *
241         * Voir la fonction recuperer_fond pour les parametres
242         * @param string $pattern : pattern a comparer au resultat du code
243         * @param string $code : code du squelette
244         * @param array $contexte : contexte de calcul du squelette
245         * @param array $opt : options ?
246         * @param string $connect : nom de la connexion a la bdd
247         * @param string $message : message pour une eventuelle erreur
248         *
249         * @return true/false
250         */
251        function assertPatternCode($pattern, $code, $contexte=array(), $options = array(), $connect='', $message = "%s") {
252                return $this->assertPattern($pattern, $this->recuperer_code($code, $contexte, $options, $connect), $message);
253        }
254       
255                       
256        /**
257         * recupere le resultat du calcul d'une compilation de code de squelette
258         * $coucou = $this->recuperer_code('[(#AUTORISER{ok}|oui)coucou]');
259         *
260         * Voir la fonction recuperer_fond pour les parametres
261         * @param string $code : code du squelette
262         * @param array $contexte : contexte de calcul du squelette
263         * @param array $opt : options ?
264         * @param string $connect : nom de la connexion a la bdd
265         *
266         * @return string/array : page compilee et calculee
267         */
268        function recuperer_code($code, $contexte=array(), $options = array(), $connect=''){
269                $opt = $this->options_recuperer_code;
270                if (isset($opt['avant_code']))
271                        $code = $opt['avant_code'] . $code;
272                if (isset($opt['apres_code']))
273                        $code .= $opt['apres_code'];
274               
275                $fond = _DIR_CODE . md5($code.serialize($opt));
276                $this->ecrire_fichier($fond . '.html', $code);
277               
278                if (isset($opt['fonctions']) and $opt['fonctions']) {
279                        // un fichier unique pour ces fonctions
280                        $func = _DIR_CODE . "func_" . md5($opt['fonctions']) . ".php";
281                        $this->ecrire_fichier($func, $this->php($opt['fonctions']));
282                        // une inclusion unique de ces fichiers
283                        $this->ecrire_fichier($fond.'_fonctions.php', $this->php("include_once('$func');"));
284                }
285                return recuperer_fond($fond, $contexte, $options, $connect);
286        }
287       
288       
289        /**
290         * Appele recuperer_fond avec l'option raw pour obtenir un tableau d'informations
291         * que l'on complete avec le nom du fond et les erreurs de compilations generees
292         */
293        function recuperer_infos_code($code, $contexte=array(), $options = array(), $connect=''){
294                $options['raw'] = true;
295                // vider les erreurs
296                $this->init_compilation_errors();
297                $infos = $this->recuperer_code($code, $contexte, $options, $connect);
298               
299                // ca ne devrait pas arriver
300                if (!is_array($infos)) return $infos;
301               
302                // on ajoute des infos supplementaires a celles retournees
303                $path = pathinfo($infos['source']);
304                $infos['fond'] = $path['dirname'].'/'.$path['filename']; // = $fond;
305                $infos['erreurs'] = $this->get_compilation_errors();
306                return $infos;
307        }
308       
309       
310       
311        /**
312         * S'utilise avec recuperer_code() :
313         *
314         * stocke des options :
315         * - fonctions : pour ajouter un fichier de fonction au squelette cree (on passe le contenu du fichier)
316         * - avant_code : pour inserer du contenu avant le code
317         * - apres_code : pour inserer du contenu apres le code
318         *
319         * @param array $options : param->valeur des options
320         * @param bool $merge  : les options se cumulent aux autres ? (ou viennent en remplacement)
321         * @return null;
322         */
323        function options_recuperer_code($options = array(), $merge=false) {
324                if ($merge) {
325                        $this->options_recuperer_code = array_merge($this->options_recuperer_code,$options);
326                } else {
327                        $this->options_recuperer_code = $options;
328                }
329        }
330
331        /**
332         * Recupere un array des erreurs de compilation
333         * @return array        Erreurs de compilations
334         */
335        function get_compilation_errors(){
336                $erreurs = $GLOBALS['tableau_des_erreurs'];
337                $GLOBALS['tableau_des_erreurs'] = array();
338                return $erreurs;
339        }
340       
341        /**
342         * Raz les erreurs de compilation
343         * @return null
344         */
345        function init_compilation_errors(){
346                // les erreurs s'ecrivent dans une jolie globale
347                $GLOBALS['tableau_des_erreurs'] = array();
348        }
349       
350        /**
351         * Retourne "<?php $code ?>"
352         * @param string $code  Code php
353         * @return string       Code php complet
354         */
355        function php($code){
356                return "<"."?php\n" . $code . "\n?".">";
357        }
358       
359        /**
360         * Ecrire un fichier a l'endroit indique
361         * Si le fichier existe, il n'est pas recree
362         * sauf en cas de var_mode=recalcul
363         *
364         * @param string $adresse       Adresse du fichier a ecrire
365         * @param string $contenu       Contenu du fichier
366         * @return null
367         */
368        function ecrire_fichier($adresse, $contenu){
369                if (!file_exists($adresse)
370                OR  $GLOBALS['var_mode']=='recalcul') {
371                        ecrire_fichier($adresse, $contenu);
372                }
373        }
374       
375}
376
377
378/**
379 * Gestion des exceptions
380 *
381 * Exception de type NA (Par exemple en generant des squelettes
382 *
383 */
384class SpipNaException extends Exception { 
385  // chaîne personnalisé représentant l'objet
386  public function __toString() {
387    return "{$this->message}\n";
388  }             
389}
390
391/**
392 * Gestion des exceptions
393 *
394 * Exceptions prevues dans les tests
395 *
396 */
397class SpipTestException extends Exception { 
398  // chaîne personnalisé représentant l'objet
399  public function __toString() {
400    return "{$this->message}\n";
401  }             
402}
403
404
405/**
406 * Extension de TestSuite
407 * pour donner le bon repertoire de travail
408 * et ajouter des fonctions specifiques a SPIP
409 */
410class SpipTestSuite extends TestSuite {
411        function SpipTestSuite($name = false){
412                chdir(_CHDIR);
413            if (!$name) {
414            $name = get_class($name);
415        }
416                $this->TestSuite($name);
417        }
418       
419        /**
420         * Ajoute tous les fichiers de tests
421         * d'un repertoire donne (ou du repertoire d'un fichier donne)
422         *
423         * @param string $dir : fichier ou repertoire qui sera scanne
424         * @param bool $recurs : inclure recursivement les dossiers ?
425         * @return null
426         */
427        function addDir($dir, $recurs = false){
428                if (is_file($dir))
429                        $dir = dirname($dir);
430                include_spip('inc/flock');
431                $a = preg_files($dir);
432                foreach ($a as $f) {
433                        $info = pathinfo($f);
434                        if (($info['extension']=='php') 
435                        AND !strpos($info['basename'], '_fonctions.php')
436                        AND !in_array($info['basename'], array(
437                                'lanceur_spip.php',
438                                'all_tests.php',
439                        ))) {
440                                $this->addFile($f);     
441                        }
442                }
443        }
444}
445
446
447
448/**
449 * Extension de HTMLReporter
450 * pour donner le bon repertoire de travail
451 * et ajouter des fonctions specifiques a SPIP
452 */
453class SpipHtmlReporter extends HtmlReporter {
454        var $_na;
455       
456        function SpipHtmlReporter($charset='UTF-8') {
457                chdir(_CHDIR);
458        $this->HtmlReporter($charset); 
459                $this->_na = 0;
460        }
461       
462        /**
463         * retourne un code css de deco
464         *
465         */
466        function _getCss() {
467                $css = parent::_getCss();
468                return $css . "\n.na{background-color: inherit; color: #fa0;}"
469                                        . "\n.complements{background-color: inherit; color: #999;}";
470        }
471       
472    /**
473     *    Paints the top of the web page setting the
474     *    title to the name of the starting test.
475     *    @param string $test_name      Name class of test.
476     *    @access public
477     */
478    function paintHeader($test_name) {
479                include_spip('inc/filtres_mini');
480        $this->sendNoCacheHeaders();
481        print "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">";
482        print "<html>\n<head>\n<title>$test_name</title>\n";
483        print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=" .
484                $this->_character_set . "\">\n";
485        print "<style type=\"text/css\">\n";
486        print $this->_getCss() . "\n";
487        print "</style>\n";
488                print "<link rel='stylesheet' href='" . url_absolue(chemin('css/tests.css')) . "' type='text/css' />";
489        print "</head>\n<body>\n";
490               
491                print "<h1>Tests SPIP " . $this->version_spip() . "</h1>\n";
492        print "<h2>$test_name</h2>\n";
493        flush();       
494        }
495       
496    /**
497     *    Paints the end of the test with a summary of
498     *    the passes and failures.
499     *    @param string $test_name        Name class of test.
500     *    @access public
501     */
502    function paintFooter($test_name) {
503        $colour = ($this->getFailCount() + $this->getExceptionCount() > 0 ? "red" : ($this->getNaCount()>0 ? "#ffaa00" : "green"));
504               
505        print "<div style=\"";
506        print "padding: 8px; margin-top: 1em; background-color: $colour; color: white;";
507        print "\">";
508        print $this->getTestCaseProgress() . "/" . $this->getTestCaseCount();
509        print " test complete:\n";
510        print "<strong>" . $this->getPassCount() . "</strong> passes, ";
511        print "<strong>" . $this->getFailCount() . "</strong> fails, ";
512        print "<strong>" . $this->getExceptionCount() . "</strong> exceptions and ";
513        print "<strong>" . $this->getNaCount() . "</strong> non applicable.";
514        print "</div>\n";
515        print "</body>\n</html>\n";
516    }
517       
518        /**
519         * retourne le nombre de tests non applicables
520         * @return int  Nombre de tests non applicables
521         */
522        function getNaCount(){
523                return $this->_na;
524        }
525       
526    /**
527     *    Paints a PHP exception.
528     *    @param Exception $exception        Exception to display.
529     *    @access public
530     */
531    function paintException($exception) {
532                switch(get_class($exception)) {
533                        case 'SpipNaException':
534                                $this->paintNA($exception);
535                                break;
536                        case 'SpipTestException':
537                                $this->paintTestException($exception);
538                                break;
539                        default:
540                                parent::paintException($exception);
541                                break;
542                }
543    }
544       
545        /**
546         * Paints a Non Applicable Test
547         *
548     * @param Exception $exception    The actual exception thrown.
549     * @access public
550     */
551        function paintNa($exception) {
552                $this->_na++;
553               
554                print "<span class=\"na\">Non applicable</span>: ";
555                $breadcrumb = $this->getTestList();
556                array_shift($breadcrumb);
557                print implode(" -&gt; ", $breadcrumb);
558                $message = $exception->getMessage();
559                print " -&gt; <strong>" . $this->_htmlEntities($message) . "</strong><br />\n";                         
560        }
561       
562        /**
563         * Paints a Spip Test Exception
564         *
565     * @param Exception $exception    The actual exception thrown.
566     * @access public
567     */
568        function paintTestException($exception) {
569                $this->_exceptions++;
570               
571                print "<span class=\"fail\">Exception</span>: ";
572                $breadcrumb = $this->getTestList();
573                array_shift($breadcrumb);
574                print implode(" -&gt; ", $breadcrumb);
575                $message = $exception->getMessage();
576                print " -&gt; <strong>" . $this->_htmlEntities($message) . "</strong><br />\n";                         
577        }
578       
579       
580        function paintGroupStart($test_name, $size){
581                $test_name = str_replace(realpath(SpipTest::me()).'/','',$test_name);
582                parent::paintGroupStart($test_name, $size);
583                #echo "<ul><li><h3>$test_name</h3>\n";
584        }
585/*     
586        function paintGroupEnd($test_name){
587                parent::paintGroupEnd($test_name);
588                echo "</li></ul>\n";
589        }
590       
591        function paintCaseStart($test_name) {
592                parent::paintCaseStart($test_name);
593                echo "<ul><h3>$test_name</h3>\n";
594    }
595        function paintCaseEnd($test_name) {
596                parent::paintCaseEnd($test_name);
597                echo "</ul>\n";
598    }
599       
600        function paintMethodStart($test_name) {
601                parent::paintMethodStart($test_name);
602                echo "<li>$test_name</li>\n";
603    }
604        function paintMethodEnd($test_name) {
605                parent::paintMethodEnd($test_name);
606                parent::paintFooter($test_name);
607    }   
608*/             
609        /**
610         * Donne le nom de la version SPIP en cours
611         */
612        function version_spip() {
613                include_spip('inc/minipres');
614                $version = $GLOBALS['spip_version_affichee'];
615                if ($svn_revision = version_svn_courante(_DIR_RACINE)) {
616                        $version .= ' ' . (($svn_revision < 0) ? 'SVN ':'')
617                        . "[<a href='http://trac.rezo.net/trac/spip/changeset/"
618                        . abs($svn_revision) . "' onclick=\"window.open(this.href); return false;\">"
619                        . abs($svn_revision) . "</a>]";
620                }
621                return $version;
622        }
623}
624
625
626/**
627 * Extension de HTMLReporter
628 * pour donner le bon repertoire de travail
629 * et ajouter des fonctions specifiques a SPIP
630 */
631class SpipMiniHtmlReporter extends SpipHtmlReporter {
632        function SpipMiniHtmlReporter($charset='UTF-8') {
633                chdir(_CHDIR);
634        $this->SpipHtmlReporter($charset);     
635        }
636       
637
638    /**
639     *    Paints the top of the web page setting the
640     *    title to the name of the starting test.
641     *    @param string $test_name      Name class of test.
642     *    @access public
643     */
644    function paintHeader($test_name) {
645                include_spip('inc/filtres_mini');
646        $this->sendNoCacheHeaders();
647        flush();       
648        }
649       
650       
651   /**
652     *    Paints the end of the test with a summary of
653     *    the passes and failures.
654     *    @param string $test_name        Name class of test.
655     *    @access public
656     */
657    function paintFooter($test_name) {
658        if ($this->getFailCount() + $this->getExceptionCount() == 0) {
659                        if ($this->getNaCount()) {
660                    print "OK <em>(".$this->getPassCount().")</em> but some NA <em>(".$this->getNaCount().")</em>\n";
661                        } else {
662                                print "OK <em>(".$this->getPassCount().")</em>\n";
663                        }
664        } else {
665            print "BOUM !!!\n";
666                        print "<span class='complements'>- Passes: " . $this->getPassCount() .
667                                        ", Failures: " . $this->getFailCount() .
668                                        ", Exceptions: " . $this->getExceptionCount() .
669                                        ", Non Applicable: " . $this->getNaCount() . "</span>\n";
670        }
671    }
672       
673       
674        /**
675         * Donne le nom de la version SPIP en cours
676         */
677        function version_spip() {
678                return SpipHtmlReporter::version_spip();
679        }
680       
681}
682
683/**
684 * Extension de TestReporter
685 * pour donner le bon repertoire de travail
686 * et ajouter des fonctions specifiques a SPIP
687 */
688class SpipTextReporter extends TextReporter {
689        function SpipTextReporter() {
690                chdir(_CHDIR);
691        $this->TextReporter(); 
692        }
693       
694   /**
695     *    Paints the end of the test with a summary of
696     *    the passes and failures.
697     *    @param string $test_name        Name class of test.
698     *    @access public
699     */
700    function paintFooter($test_name) {
701        if ($this->getFailCount() + $this->getExceptionCount() == 0) {
702                        if ($this->getNaCount()) {
703                    print "OK ($this->getPassCount()) but some NA ($this->getNaCount())\n";
704                        } else {
705                                print "OK ($this->getPassCount())\n";
706                        }
707        } else {
708            print "FAILURES!!!\n";
709                        print "Test cases run: " . $this->getTestCaseProgress() .
710                                        "/" . $this->getTestCaseCount() .
711                                        ", Passes: " . $this->getPassCount() .
712                                        ", Failures: " . $this->getFailCount() .
713                                        ", Exceptions: " . $this->getExceptionCount() .
714                                        ", Non Applicable: " . $this->getNaCount() . "\n";
715        }
716    }
717}
718
719
720// si provient de la base des tests de spip,
721// on affiche simplement un 'OK : ..."
722
723if (_request('mode') == 'test_general') {
724        SimpleTest::prefer(new SpipTextReporter());
725        SimpleTest::prefer(new SpipMiniHtmlReporter());
726} else {
727        SimpleTest::prefer(new SpipHtmlReporter());
728}
729
730?>
Note: See TracBrowser for help on using the repository browser.