projman/hlp/fr/tcl/Tcltest.htm

310 lines
38 KiB
HTML
Raw Normal View History

2015-10-19 13:27:31 +03:00
<HTML><HEAD>
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
</HEAD>
<BODY>
<div><H3><b>Tcltest&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Commandes internes Tcl</b></H3></div>
<HR ALIGN="center">
<div><b>NOM</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Tcltest -&nbsp; Support du syst<73>me de test et utilitaires<br>
</div><br>
<div><b>SYNTAXE</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;"><b>package require tcltest ?1.0?</b> <br>
<b>::tcltest::test </b><i>name desc ?constraint? script expectedAnswer</i> <br>
<b>::tcltest::cleanupTests </b><i>?runningMultipleTests?</i> <br>
<b>::tcltest::getMatchingTestFiles</b> <br>
<b>::tcltest::loadTestedCommands</b> <br>
<b>::tcltest::makeFile </b><i>contents name</i> <br>
<b>::tcltest::removeFile </b><i>name</i> <br>
<b>::tcltest::makeDirectory </b><i>name</i> <br>
<b>::tcltest::removeDirectory </b><i>name</i> <br>
<b>::tcltest::viewFile </b><i>name</i> <br>
<b>::tcltest::normalizeMsg </b><i>msg</i> <br>
<b>::tcltest::bytestring </b><i>string</i> <br>
<b>::tcltest::saveState</b> <br>
<b>::tcltest::restoreState</b> <br>
<b>::tcltest::threadReap</b> <br>
</div><br>
<div><b>DESCRIPTION</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Le package <b>tcltest</b> fournit <20> l'utilisateur des utilitaires pour <20>crire et faire fonctionner des tests dans le syst<73>me de test Tcl. Il peut <20>galement <20>tre utilis<69> pour cr<63>er un syst<73>me de test personnalis<69> pour une extension.</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Le syst<73>me de test Tcl comporte de multiples fichiers .test, chacun d'entre eux comprenant plusieurs cas de test. Chaque test comporte un appel <20> la commande test, qui indique le nom du test, une description br<62>ve, les contraintes qui s'appliquent au cas test<73>, le script <20> ex<65>cuter, et les r<>sultats attendus. Voir les sections <i>&quot;Tests&quot;</i>, <i>&quot;Contraintes de test&quot;</i>, et <i>&quot; Faire </i><i>fonctionner les fichiers de test &quot;</i> pour plus d'informations.
<br>Il est <20>galement possible d'enrichir ce syst<73>me de test pour mettre en place votre propre syst<73>me de test sur mesure. Pour plus d'information, voir la section <i>&quot;Personnaliser le syst<73>me </i><i>de test&quot;</i>.
<br>Cette approche pour tester a <20>t<EFBFBD> con<6F>ue et initialement mise en place par Mary Ann May-Pumphrey de Sun Microsystems au d<>but des ann<6E>es 1990. Nous lui adressons de sinc<6E>res remerciements pour avoir fait don de son travail au profit de la version publique de Tcl.</div>
<br><div><b>COMMANDES</b></div>
<br><div ALIGN="LEFT" style="margin-left: 51px;">
<DL>
<DT> <b>::tcltest::test</b> <i>name desc ?constraints? script expectedAnswer</i></DT><DD>La commande <b>::tcltest::test</b> lance <i>script</i> et compare son r<>sultat <20> <i>expectedAnswer</i>. Elle imprime un message d'erreur si les deux ne correspondent pas. Si<b>::tcltest::verbose</b> contient &quot;p&quot; ou &quot;s&quot;, elle imprime aussi un message si le test r<>ussit (p: <i>passed</i>) ou a <20>t<EFBFBD> omis (s: <i>skipped</i>). Le test sera omis s'il ne correspond pas <20> la variable <b>::tcltest::match</b>, s'il correspond <20> l'un des <20>l<EFBFBD>ments de <b>::tcltest::skip</b>, ou si l'un des <20>l<EFBFBD>ments de <i>constraints</i> s'av<61>re ne pas <20>tre vrai. La commande <b>::tcltest::test</b> n'a pas de valeur de retour d<>finie. Voir la section <i>&quot;Ecrire un nouveau </i><i>test&quot;</i> pour plus d'informations sur cette commande.</DD>
<DT><b>::tcltest::cleanupTests</b> <i>?runningMultipleTests?</i></DT><DD>Cette commande doit normalement <20>tre appel<65>e <20> la fin d'un fichier de test. Elle imprime des statistiques au sujet des tests <20>x<EFBFBD>cut<75>s et supprime les fichiers cr<63><72>s par <b>::tcltest::makeDirectory</b> et <b>::tcltest::makeFile</b>. Les noms des fichiers et r<>pertoires cr<63><72>s en dehors de <b>::tcltest::makeFile</b> et <b>::tcltest::makeDirectory</b>, et qui n'ont jamais <20>t<EFBFBD> d<>truits, sont affich<63>s dans <b>::tcltest::outputChannel</b>. Cette commande restaure <20>galement l'environnement d'<27>x<EFBFBD>cution initial, tel que d<>crit par le tableau ::env.<i>calledFromAll</i> doit normalement <20>tre indiqu<71> quand <b>::tcltest::cleanupTests</b> est appel<65> depuis un fichier &quot;all.tcl&quot;. Des fichiers Tcl sont g<>n<EFBFBD>ralement utilis<69>s pour ex<65>cuter des tests multiples. Pour plus d'information sur comment ex<65>cuter des tests multiples, voir la section <i>&quot;Ex<EFBFBD>cuter des fichiers de test&quot;</i>. Cette proc<6F>dure n'a pas de valeur de retour d<>finie. </DD>
<DT><b>::tcltest::getMatchingTestFiles</b></DT><DD>Cette commande est utilis<69>e quand vous voulez ex<65>cuter plusieurs fichiers de test. Elle retourne la liste des tests qui doivent <20>tre sourc<72>s dans un fichier &quot;all.tcl&quot;. Voir la section <i>&quot;Ex<EFBFBD>cuter des fichiers de test&quot;</i> pour plus d'informations.</DD>
<DT><b>::tcltest::loadTestedCommands</b></DT><DD>Cette commande utilise le script indiqu<71> par l'option <i>-load</i> ou <i>-loadfile</i> pour charger les commandes test<73>es par le syst<73>me de test. Autoris<69>e <20> <20>tre vide, dans le cas o<>; les commandes test<73>es sont accumul<75>es dans&nbsp; l'interpr<70>teur qui <20>x<EFBFBD>cute le syst<73>me de test.</DD>
<DT><b>::tcltest::makeFile</b> <i>contents name</i><br></DT><DD>Cr<EFBFBD>e un fichier qui sera automatiquement supprim<69> par <b>::tcltest::cleanupTests </b><EFBFBD> la fin du fichier de test. Cette proc<6F>dure n'a pas de valeur de retour d<>finie.</DD>
<DT><b>::tcltest::removeFile</b> <i>name</i><br></DT><DD>Force la suppression du fichier r<>f<EFBFBD>renc<6E> par <i>name</i>. Ce nom de fichier doit <20>tre indiqu<71> en r<>f<EFBFBD>rence au <i>::tcltest::temporaryDirectory</i>. Cette proc<6F>dure n'a pas de valeur de retour d<>finie.</DD>
<DT><b>::tcltest::makeDirectory</b> <i>name</i></DT><DD>Cr<EFBFBD>e un r<>pertoire <i>name</i>, qui sera automatiquement supprim<69> par <b>::tcltest::cleanupTests </b><EFBFBD> la fin du fichier de test. Cette proc<6F>dure n'a pas de valeur de retour d<>finie.</DD>
<DT><b>::tcltest::removeDirectory</b> <i>name</i><br></DT><DD>Force la suppression du fichier r<>f<EFBFBD>renc<6E> par <i>name</i>. Cette proc<6F>dure n'a pas de valeur de retour d<>finie.</DD>
<DT><b>::tcltest::viewFile</b> <i>file</i><br></DT><DD>Renvoie le contenu de <i>file</i>.</DD>
<DT><b>::tcltest::normalizeMsg</b> <i>msg</i><br></DT><DD>Retire les fins de lignes superflues de <i>msg</i>. </DD>
<DT><b>::tcltest::bytestring</b> <i>string</i><br></DT><DD>Construit une cha<68>ne qui se compose de la suite des octets demand<6E>s, et non la cha<68>ne form<72>e de caract<63>res UTF-8 corrects, <20> partir de la valeur de <i>string</i>. Cela permet au testeur de cr<63>er des cha<68>nes d<>normalis<69>es ou impropement form<72>es, pour les passer <20> des proc<6F>dures C qui sont suppos<6F>es accepter des cha<68>nes comprenant des NULL, et confirmer que le r<>sultat sous forme de cha<68>ne correspond bien <20> la suite d'octets pr<70>vue.</DD>
<DT><b>::tcltest::saveState</b><br></DT><DD>et <b>::tcltest::restoreState</b> sauvent et restaurent les proc<6F>dures et les variables globales. Un fichier de test peut contenir des appels <20> <b>::tcltest::saveState</b> et <b>::tcltest:restoreState</b> s'il cr<63>e des variables globales ou des proc<6F>dures.</DD>
<DT><b>::tcltest::threadReap</b><br></DT><DD><b>::tcltest::threadReap</b> fonctionne seulement si <i>testthread</i> est d<>fini, g<>n<EFBFBD>ralement en compilant tcltest. Si <i>testthread</i> est d<>fini, <b>::tcltest::threadReap</b> tue tous les threads <20> l'exception du thread principal. Il r<>cup<75>re l'ID du thread principal en appelant <i>testthread names</i> pendant l'initialisation. Cette valeur est stock<63>e dans <i>::tcltest::mainThread</i>.&nbsp; <b>::tcltest::threadReap </b>retourne le nombre de threads existants en tout. (?)</DD>
</DL>
</div><br>
<div><b>TESTS</b></div><br>
<b></b><div ALIGN="LEFT" style="margin-left: 51px;">La proc<6F>dure <b>test </b><EFBFBD>x<EFBFBD>cute un script de test est affiche un message d'erreur si le r<>sultat du script ne correspond pas au r<>sultat attendu. Voici la sp<73>cification de la commande <b>test</b> : </div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">test &lt;name&gt; &lt;description&gt; ?&lt;constraint&gt;? &lt;script&gt; &lt;expectedAnswer&gt;<br>
</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument &lt;name&gt; doit ob<6F>ir au motif:</div>
<div ALIGN="LEFT" style="margin-left: 51px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&lt;target&gt;-&lt;majorNum&gt;.&lt;minorNum&gt;</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">Pour les tests &quot;en bo<62>te blanche&quot; (tests de r<>gression), la cible &lt;target &gt; doit <20>tre le nom de la fonction C ou de la proc<6F>dure Tcl&nbsp; qui est test<73>e. Pour les tests &quot;en bo<62>te noire&quot;, la cible&nbsp; &lt;target&gt; doit <20>tre le nom de la fonctionnalit<69> test<73>e.&nbsp; Des tests apparent<6E>s doivent avoir le m<>me num<75>ro majeur &lt;majorNum&gt;.</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument &lt;description&gt; est une courte description textuelle du test, pour aider les personnes <20> comprendre ce qui est test<73>. Le nom de la fonction Tcl ou C devrait y <20>tre inclus pour les tests de r<>gression. Si le cas de test est d<>fini pour reproduire un bug, inclure l'identifiant (bugID) dans la description. </div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument optionnel &lt;constraints&gt; peut <20>tre une liste d'un ou plusieurs mots-cl<63>s ou une expression. Si l'argument &lt;constraints&gt; se compose de mots-cl<63>s, chacun d'entre eux doit <20>tre le nom d'un <20>l<EFBFBD>ment du tableau <i>::tcltest::testConstraints</i>.&nbsp; Si l'un de ces <20>l<EFBFBD>ments est faux ou n'existe pas, le test est saut<75>. Si l'argument &lt;constraints&gt; est une expression, cette expression sera <20>valu<6C>e: si le r<>sultat est vrai, alors le test sera <20>x<EFBFBD>cut<75>.</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">Ajoutez des contraintes appropri<72>es (par exemple, unixOnly) pour les tests qui ne doivent pas toujours <20>tre <20>x<EFBFBD>cut<75>s. Par exemple, un test qui ne doit <20>tre effectu<74> que sur Unix devrait ressembler <20>:</div>
<div ALIGN="LEFT" style="margin-left: 102px;">test getAttribute-1.1 &#123;testing file permissions} &#123;unixOnly} &#123;<br>
&nbsp;&nbsp;&nbsp; lindex &#91;file attributes foo.tcl] 5<br>
} &#123;00644}</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Exemple de test contenant une expression: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">test unixNotfy-1.1 &#123;Tcl_DeleteFileHandler} &#123;unixOnly &amp;&amp; !testthread} &#123;<br>
&nbsp;&nbsp;&nbsp; catch &#123;vwait x}<br>
&nbsp;&nbsp;&nbsp; set f &#91;open foo w]<br>
&nbsp;&nbsp;&nbsp; fileevent &#36;f writable &#123;set x 1}<br>
&nbsp;&nbsp;&nbsp; vwait x<br>
&nbsp;&nbsp;&nbsp; close &#36;f<br>
&nbsp;&nbsp;&nbsp; list &#91;catch &#123;vwait x} msg] &#36;msg<br>
} &#123;1 &#123;ne peut pas attendre la variable &quot;x&quot;:&nbsp; attendrait ind<6E>finiment }}<br>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Voir la section <i>&quot;Contraintes de Test&quot;</i> pour la liste des contraintes pr<70>d<EFBFBD>finies et pour savoir comment ajouter vos propres contraintes.</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument &lt;script&gt; contient le script a ex<65>cuter pour effectuer le test. Il doit retourner un r<>sultat dont la validit<69> peut <20>tre v<>rifi<66>e. Si votre script demande qu'un fichier soit cr<63><72> <20> la vol<6F>e, utilisez svp la proc<6F>dure ::tcltest::makeFile. Si votre test demande qu'un petit fichier (moins de 50 lignes) soit contr&ocirc;l<EFBFBD> en lecture, svp pensez <20> cr<63>er le fichier <20> la vol<6F>e en utilisant la proc<6F>dure ::tcltest::makeFile. Les fichiers cr<63><72>s par la proc<6F>dure ::tcltest::makeFile seront automatiquement supprim<69>s par la proc<6F>dure ::tcltest::cleanupTests appel<65>e <20> la fin de chaque fichier de test.</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument &lt;expectedAnswer&gt; sera compar<61> au r<>sultat de l'<27>valuation de l'argument &lt;script&gt;. S'ils correspondent, le test passe, sinon il <20>choue.</div>
<br>
<div><b>LES VARIABLES DU NAMESPACE TCLTEST</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les variables suivantes sont d<>finies dans le namespace tcltest et peuvent <20>tre utilis<69>es par des tests:
<DL>
<DT><b>::tcltest::outputChannel</b></DT><DD>outputfileID - par d<>faut stdout, peut <20>tre pr<70>cis<69> en indiquant -outfile sur la ligne de commande. Tout test qui imprime des r<>sultats devrait envoyer cette sortie <20> <i>::tcltest::outputChannel</i> plut&ocirc;t que de sortir par d<>faut sur stdout.</DD>
<DT><br><b>::tcltest::errorChannel</b></DT><DD>errorfileID - par d<>faut stderr, peut <20>tre pr<70>cis<69> en indiquant -errfile sur la ligne de commande. Tout test qui imprime des messages d'erreur devrait le faire vers <i>::tcltest::errorChannel </i>plut&ocirc;t que directement dans stderr.</DD>
<DT><br><b>::tcltest::mainThread</b></DT><DD>main thread ID - 1 par d<>faut. Ce sera le seul thread qui ne sera pas tu<74> par ::tcltest::threadReap et qui sera assign<67> conform<72>ment <20> la valeur de retour de <i>testthread names</i> <20> l'initialisation.</DD>
<DT><br><b>::tcltest::originalEnv</b></DT><DD>copie du tableau global &quot;env&quot; au d<>but de l'<27>x<EFBFBD>cution du test. Ce tableau est utilis<69> pour restaurer le tableau &quot;env&quot; <20> sa valeur initiale quand <i>::tcltest::cleanupTests</i>&nbsp; est appel<65>e.</DD>
<DT><br><b>::tcltest::workingDirectory</b></DT><DD>le r<>pertoire dans lequel le syst<73>me de test a <20>t<EFBFBD> lanc<6E>.</DD>
<DT><br><b>::tcltest::temporaryDirectory</b></DT><DD>le r<>pertoire de sortie - par d<>faut <i>::tcltest::workingDirectory</i> , peut <20>tre pr<70>cis<69> en indiquant&nbsp;&nbsp; -tmpdir en ligne de commande.</DD>
<DT><br><b>::tcltest::testsDirectory</b></DT><DD>l<EFBFBD> o<>; se trouvent les tests - par d<>faut&nbsp; <i>::tcltest::workingDirectory</i> , si le script ne peut pas d<>terminer o<>; le r<>pertoire de tests se trouve. Il est possible de changer cette valeur par d<>faut en pr<70>cisant -testdir en ligne de commande. Cette variable devrait toujours <20>tre pr<70>cis<69>e explicitement si les tests sont <20>x<EFBFBD>cut<75>s depuis un fichier all.tcl.</DD>
<DT><br><b>::tcltest::tcltest</b></DT><DD>le nom de l'<27>x<EFBFBD>cutable utilis<69> pour appeler le syst<73>me de test.</DD>
<DT><br><b>::tcltest::loadScript</b></DT><DD>Le script <20>x<EFBFBD>cut<75> en tant que <b>loadTestCommands</b>. Pr<50>cis<69> par -load ou -loadfile. </DD>
</DL>
</div>
<br>
<div><b>CONTRAINTES DE TEST</b></div>
<br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les contraintes sont utilis<69>es pour d<>terminer si un test doit <20>tre ignor<6F>.&nbsp; Chaque contrainte est stock<63>e comme un indice du tableau <i>::tcltest::testConstraints</i>. Par exemple, la contrainte unixOnly est d<>finie de la fa<66>on suivante: </div>
<div ALIGN="LEFT" style="margin-left: 101px;">set ::tcltest::testConstraints(unixOnly) \<br>
&nbsp;&nbsp;&nbsp; &#91;string equal &#36;tcl_platform(platform) &quot;unix&quot;]<br>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Si un test est contraint par &quot;unixOnly&quot;, il ne s'ex<65>cutera que si la valeur de ::tcltest::testConstraints(unixOnly) est vraie. Plusieurs contraintes sont d<>finies dans le package <b>tcltest</b>.&nbsp; Pour ajouter des contraintes sp<73>cifiques <20> un fichier ou <20> un test, vous pouvez cr<63>er l'index correspondant du tableau ::tcltest::testsConstraints dans votre propre fichier de test.</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">Voici la liste des contraintes d<>finies dans le package <b>tcltest</b> :
<DL>
<DT><i>unix</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes UNIX</DD>
<DT><i>pc</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes Windows</DD>
<DT><i>nt</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes Windows NT</DD>
<DT><i>95</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes Windows 95</DD>
<DT><i>98</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes Windows 98</DD>
<DT><i>mac</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes Mac</DD>
<DT><i>unixOrPc</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes UNIX ou PC</DD>
<DT><i>macOrPC</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes Mac ou PC</DD>
<DT><i>macOrUnix</i></DT><DD>le test ne peut s'ex<65>cuter que sur les plateformes Mac ou Unix</DD>
<DT><i>tempNotPc</i></DT><DD>le test ne peut <20>tre <20>x<EFBFBD>cut<75> sur Windows. C'est un flag pour d<>sactiver temporairement un test.</DD>
<DT><i>tempNotMac</i></DT><DD>le test ne peut <20>tre <20>x<EFBFBD>cut<75> sur un Mac. C'est un flag pour d<>sactiver temporairement un test.</DD>
<DT><i>unixCrash</i></DT><DD>le test se plante s'il est <20>x<EFBFBD>cut<75> sur UNIX. C'est un flag pour d<>sactiver temporairement un test.</DD>
<DT><i>pcCrash</i></DT><DD>le test se plante s'il est <20>x<EFBFBD>cut<75> sur PC. C'est un flag pour d<>sactiver temporairement un test.</DD>
<DT><i>macCrash</i></DT><DD>le test se plante s'il est <20>x<EFBFBD>cut<75> sur Mac. C'est un flag pour d<>sactiver temporairement un test.</DD>
<DT><i>emptyTest</i></DT><DD>le test est vide, et donc ne vaut pas la peine d'<27>tre <20>x<EFBFBD>cut<75>, mais il reste afin d'<27>tre <20>crit dans le futur. Cette contrainte provoque l'omission syst<73>matique du test.</DD>
<DT><i>knownBug</i></DT><DD>le test est connu pour se planter, et le bug n'est pas encore corrig<69>. Cette contrainte provoque l'omission du test., sauf si l'utilisateur demande le contraire. Voir la section &quot;Introduction&quot; pour plus d'informations.</DD>
<DT><i>nonPortable</i></DT><DD>ce test ne peut <20>tre effectu<74> que dans l'environnement de d<>veloppement Tcl/Tk ma<6D>tre. Certains tests sont par nature non portables, parce qu'ils d<>pendent de choses telles que la longueur de mot du processeur, la configuration du syst<73>me de fichiers, le gestionnaire de fen<65>tres, etc. Ces tests sont seulement <20>x<EFBFBD>cut<75>s dans l'environnement de d<>veloppement Tcl principal, o<>; la configuration est bien connue. Cette contrainte provoque l'omission du test, sauf si l'utilisateur demande le contraire.</DD>
<DT><i>userInteraction</i></DT><DD>ce test demande une interaction avec l'utilisateur. Cette contrainte provoque l'omission du test, sauf si l'utilisateur demande le contraire.</DD>
<DT><i>interactive</i></DT><DD>ce test ne peut <20>tre effectu<74> qu'en mode interactif, c'est <20> dire si la variable globale tcl_interactive est positionn<6E>e <20> 1.</DD>
<DT><i>nonBlockFiles</i></DT><DD>ce test ne peut s'ex<65>cuter que si la plateforme supporte de mettre les fichiers en mode non-bloqu<71>.</DD>
<DT><i>asyncPipeClose</i></DT><DD>ce test ne peut s'ex<65>cuter que si la plateforme supporte &quot;async flush&quot; et &quot;async close&quot; sur un pipe.</DD>
<DT><i>unixExecs</i></DT><DD>le test ne peut s'ex<65>cuter que si la machine dispose des commandes telles que 'cat', 'echo', etc.</DD>
<DT><i>hasIsoLocale</i></DT><DD>le test ne peut s'ex<65>cuter que s'il peut passer dans une locale ISO.</DD>
<DT><i>root</i></DT><DD>le test ne peut s'ex<65>cuter que si l'utilisateur Unix est root</DD>
<DT><i>notRoot</i></DT><DD>le test ne peut s'ex<65>cuter que si l'utilisateur Unix n'est pas root</DD>
<DT><i>eformat</i></DT><DD>le test ne peut s'ex<65>cuter que si l'application a une version fonctionnelle de sprintf respectant le format &quot;e&quot; des nombres flottants.</DD>
<DT><i>stdio</i></DT><DD>le test ne peut s'ex<65>cuter que si l'application courante peut fonctionner au travers d'un pipe</DD>
</DL>
</div><br>
<div><b>FAIRE FONCTIONNER LES FICHIERS DE TEST</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Utiliser la commande suivante pour ex<65>cuter un fichier de test qui utilise le package tcltest:</div>
<div ALIGN="LEFT" style="margin-left: 101px;">&lt;shell&gt; &lt;testFile&gt; ?&lt;option&gt; ?&lt;value&gt;?? ...</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les options de ligne de commande sont les suivantes (les variables du namespace tcltest qui correspondent <20> chacune des options sont indiqu<71>es entre parenth<74>ses <20> la fin de la description) :
<DL>
<DT><b>-help</b></DT><DD>affiche le mode d'utilisation</DD>
<DT><b>-verbose &lt;level&gt;</b></DT><DD>
d<EFBFBD>finit le niveau de verbosit<69> comme une sous-cha<68>ne de &quot;bps&quot;. Voir la section &quot;Informations issus des tests&quot; pour une explication de cette option.&nbsp; (::tcltest::verbose)</DD>
<DT><b>-match &lt;matchList&gt;</b></DT><DD>
effectue seulement les tests qui correspondent aux motifs de &quot;glob&quot; d<>finis dans &lt;matchList&gt;.&nbsp; (::tcltest::match)</DD>
<DT><b>-skip &lt;skipList&gt;</b></DT><DD>
n'effectue pas les tests qui correspondent <20> un ou plusieurs motifs de &quot;glob&quot; d<>finis dans &lt;skipList&gt;.&nbsp; (::tcltest::skip) </DD>
<DT><b>-file &lt;globPatternList&gt;</b></DT><DD>
source seulement les fichiers de test dont les noms r<>pondent <20> l'un des motifs de&nbsp; &lt;globPatternList&gt; d<>finis par rapport au r<>pertoire::tcltest::testsDirectory. Cette option n'a de sens qui si vous effectuez des tests utilisant &quot;all.tcl&quot; en tant que &lt;testFile&gt; au lieu d'effectuer directement des fichiers unitaires de test. (::tcltest::matchFiles) </DD>
<DT><b>-notfile &lt;globPatternList&gt;</b></DT><DD>
source tous les fichiers sauf ceux dont les noms r<>pondent <20> l'un des motifs de &lt;globPatternList&gt; d<>finis par rapport au r<>pertoire::tcltest::testsDirectory.&nbsp;&nbsp; Cette option n'a de sens qui si vous effectuez des tests utilisant &quot;all.tcl&quot; en tant que &lt;testFile&gt; au lieu d'effectuer directement des fichiers unitaires de test. (::tcltest::skipFiles) </DD>
<DT><b>-constraints &lt;list&gt;</b></DT><DD>
les tests contenant une contrainte parmi la liste &lt;list&gt; ne seront pas saut<75>s. Notez que les <20>l<EFBFBD>ments de &lt;list&gt; doivent correspondrent exactement aux contraintes existantes. Ceci est utile si vous voulez avoir la certitude que les tests ayant une contrainte particuli<6C>re sont effectu<74>s (par exemple, si le testeur souhaite que tous les tests contenant la contrainte knownBug soient effectu<74>s). (::tcltest::testConstraints(<i>constraintName</i>)) </DD>
<DT><b>-limitconstraints &lt;bool&gt;</b></DT><DD>Si l'argument de cette option est 1, les tests effectu<74>s seront ceux qui respectent les contraintes d<>finies par l'option -constraints. La valeur par d<>faut de cet indicateur est 0 (false). Ceci est utile si vous voulez ex<65>cuter <b>seulement</b> les tests qui r<>pondent aux contraintes list<73>es par l'option -constraints. Un testeur peut vouloir cela par exemple pour n'effectuer que les tests contraints par unixOnly et aucun autre. (::tcltest::limitConstraints)</DD>
<DT><b>-load &lt;script&gt;</b></DT><DD>utilisera le script indiqu<71> pour charger les commandes <20> tester (::tcltest::loadTestedCommands). La valeur par d<>faut est un script vide. Voir <20>galement -loadfile ci-dessous. (::tcltest::loadScript)</DD>
<DT><b>-loadfile &lt;scriptfile&gt;</b></DT><DD>utilisera le contenu du fichier indiqu<71> pour charger les commandes <20> tester (::tcltest::loadTestedCommands).Voir <20>galement -load ci-dessus. La valeur par d<>faut est un script vide. (::tcltest::loadScript)</DD>
<DT><b>-tmpdir &lt;directoryName&gt;</b></DT><DD>mettra tous les fichiers temporaires (cr<63><72>s avec ::tcltest::makeFile et ::tcltest::makeDirectory) dans le r<>pertoire indiqu<71>.&nbsp; L'emplacement par d<>faut est ::tcltest::workingDirectory.&nbsp; (::tcltest::temporaryDirectory) </DD>
<DT><b>-testdir &lt;directoryName&gt;</b></DT><DD>cherche les tests <20> ex<65>cuter dans le r<>pertoire indiqu<71>. L'emplacement par d<>faut est ::tcltest::workingDirectory. (::tcltest::testsDirectory)</DD>
<DT><b>-preservecore &lt;level&gt;</b></DT><DD>contr&ocirc;le pour les fichiers core.&nbsp; Cette option d<>termine quel niveau de contr&ocirc;le sera effectu<74> pour les fichiers &quot;core&quot;. La valeur par d<>faut pour &lt;level&gt; est 0. Les niveaux &lt;level&gt; sont d<>finis comme suit :<DL>
<DT>0</DT><DD>Pas de contr&ocirc;le - ne pas contr&ocirc;ler les fichiers core <20> la fin de chaque test, mais les contr&ocirc;ler <20> chaque fois que::tcltest::cleanupTests est appel<65> depuis un fichier all.tcl. </DD>
<DT>1</DT><DD>V<EFBFBD>rifier l'existence de fichiers core <20> la fin de chaque commande de test et <20> chaque fois que::tcltest::cleanupTests est appel<65> depuis un fichier all.tcl.</DD>
<DT>2</DT><DD>V<EFBFBD>rifier l'existence de fichiers core <20> la fin de chaque commande de test et <20> chaque fois que::tcltest::cleanupTests est appel<65> depuis un fichier all.tcl. Sauvegarder tout fichier core produit dans ::tcltest::temporaryDirectory. (::tcltest::preserveCore)</DD>
</DL>
</DD>
<DT><b>-debug &lt;debugLevel&gt;</b></DT><DD>afficher l'information de debug dans stdout. Ceci est utilis<69> pour d<>bugger le code du syst<73>me de test. Le niveau de debug par d<>faut est 0. Les niveaux sont d<>finis ainsi:<DL>
<DT>0</DT><DD>Ne pas afficher les informations de debug.</DD>
<DT>1</DT><DD>Afficher l'information indiquant si un test est saut<75> parce qu'il ne r<>pond <20> aucune des conditions indiqu<71>es dans -match ou ::tcltest::match (userSpecifiedNonMatch), ou parce qu'il r<>pond <20> une quelconque des conditions indiqu<71>es par -skip ou ::tcltest::skip ((userSpecifiedSkip).</DD>
<DT>2</DT><DD>Affiche le tableau des options interpr<70>t<EFBFBD> par le processeur de ligne de commande, le contenu du tableau ::env, et toutes les variables utilisateur d<>finies dans le namespace courant, quand elles sont utilis<69>es.</DD>
<DT>3</DT><DD>Affiche l'information concernant ce que font les proc<6F>dures individuelles de le syst<73>me de test.(::tcltest::debug)</DD>
</DL>
</DD>
<DT><b>-outfile &lt;filename&gt;</b></DT><DD>envoie la sortie g<>n<EFBFBD>r<EFBFBD>e par le package tcltest vers le fichier indiqu<71>. La valeur par d<>faut est stdout. Notez que la sortie de debug va syst<73>matiquement dans stdout, quelque soit la valeur de cette option. (::tcltest::outputChannel)</DD>
<DT><b>-errfile &lt;filename&gt;</b></DT><DD>envoie les erreurs g<>n<EFBFBD>r<EFBFBD>es par le package tcltest vers le fichier indiqu<71>. La valeur par d<>faut est stderr. (::tcltest::errorChannel)</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une seconde fa<66>on d'ex<65>cuter les tests est de d<>marrer un shell, de charger le package <b>tcltest</b>, puis de sourcer un fichier de test appropri<72> ou d'utiliser la commande test. Pour utiliser les options en mode interactif, alimenter la variable qui leur correspond dans le namespace tcltest apr<70>s avoir charg<72> le package.</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Voir la section <i>&quot;Contraintes de Test&quot;</i> pour toutes les contraintes pr<70>-construites qui peuvent <20>tre utilis<69>es dans le tableau <b>::tcltest::testConstraints</b>. Voir la section <i>&quot;Les variables du </i><i>namespace Tcltest&quot;</i> pour des informations sur les autres variables d<>finies dans le namespace tcltest.</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Une derni<6E>re fa<66>on d'ex<65>cuter les tests est d'indiquer les fichiers de test <20> ex<65>cuter <20> l'int<6E>rieur d'un fichier <i>all.tcl</i> (qui peut <20>tre nomm<6D> diff<66>remment). C'est l'approche utilis<69>e par le syst<73>me de test de Tcl. Ce fichier charge le package tcltest, d<>finit l'emplacement du r<>pertoire de test (::tcltest::testsDirectory), d<>termine quels fichiers de test ex<65>cuter, source chacun de ces fichiers, appelle ::tcltest::cleanupTests et finit de s'ex<65>cuter.</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Un fichier <i>all.tcl</i> plus <20>labor<6F> peut faire du pr<70>- et du post-processing avant de sourcer chaque fichier .test, utiliser des interpr<70>teurs diff<66>rents pour chaque fichier, ou manipuler des structures de r<>pertoires complexes. Pour un exemple de fichier all.tcl, voir la section &quot;Exemples&quot; de ce document. </div>
<br><div><b>RESULTATS DES TESTS</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Apr<EFBFBD>s que tous les fichiers de test indiqu<71>s aient <20>t<EFBFBD> <20>x<EFBFBD>cut<75>s, le nombre de tests r<>ussis, saut<75>s ou <20>chou<6F>s est envoy<6F> dans<b>::tcltest::outputChannel</b>.&nbsp; A c&ocirc;t<EFBFBD> de cette information statistique, la sortie peut <20>tre pilot<6F>e pour chaque test par la variable <b>::tcltest::verbose</b>.</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;"><b>::tcltest::verbose </b>peut avoir pour valeur n'importe quelle sous-cha<68>ne ou permutation de &quot;bps&quot;.&nbsp;&nbsp; Dans la cha<68>ne &quot;bps&quot;, le 'b' se r<>f<EFBFBD>re au corps (body) du test, le 'p' se r<>f<EFBFBD>re aux tests r<>ussis&nbsp; (passed) et le 's' signifi<66> tests saut<75>s (skipped). La valeur par d<>faut de <b>::tcltest::verbose est &quot;b&quot;. </b>Si 'b' est pr<70>sent, alors le corps entier du test est imprim<69> pour chaque test <20>chou<6F>;&nbsp; sinon seulement le nom du test, la sortie souhait<69>e et la sortie obtenue sont imprim<69>s pour chaque test <20>chou<6F>. Si 'p' est pr<70>sent, alors une ligne est imprim<69>e pour chaque test r<>ussi, sinon aucune ligne n'est imprim<69>e pour les tests r<>ussis. Si 's' est pr<70>sent, alors une ligne (contenant les contraintes qui ont&nbsp; fait que le test a <20>t<EFBFBD> saut<75>) est imprim<69>e pour chaque test saut<75>, sinon aucune ligne n'est imprim<69>e dans ce cas.</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Vous pouvez positionner <b>::tcltest::verbose</b>, soit interactivement (une fois que le package <b>tcltest</b> a <20>t<EFBFBD> charg<72>) ou en utilisant l'argument de ligne de commande -verbose, par exemple:</div>
<div ALIGN="LEFT" style="margin-left: 51px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tclsh socket.test -verbose bps</div>
<br>
<div><b>CONTENUS D'UN FICHIER DE TEST</b></div>
<br>
<div ALIGN="LEFT" style="margin-left: 51px;">Les fichiers de test doivent commencer par charger le package <b>tcltest</b>: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">if &#123;&#91;lsearch &#91;namespace children] ::tcltest] == -1} &#123;<br>
&nbsp;&nbsp;&nbsp; package require tcltest<br>
&nbsp;&nbsp;&nbsp; namespace import ::tcltest::*<br>
}<br>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les fichiers de tests doivent se terminer par l'appel de la fonction de nettoyage <b>::tcltest::cleanupTests</b>. La proc<6F>dure <b>::tcltest::cleanupTests </b>affiche des statistiques au sujet du nombre de tests r<>ussis, saut<75>s ou <20>chou<6F>s,&nbsp; et supprime tous les fichiers cr<63><72>s au moyen des proc<6F>dures<b> ::tcltest::makeFile</b> et <b>::tcltest::makeDirectory</b>.<b> </b></div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 102px;"># Supprime les fichiers cr<63><72>s par ces tests </div>
<div ALIGN="LEFT" style="margin-left: 102px;"># Retour au r<>pertoire de travail initial<br>
# Supprime les tableaux globaux<br>
::tcltest::cleanupTests<br>
return<br>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les fichiers de tests doivent se finir par une extension .test. Les noms des fichiers de tests qui contiennent des tests de r<>gression (dits de bo<62>te transparente) doivent <20>tre nomm<6D>s d'apr<70>s les fichiers de code Tcl ou C qu'ils testent. Par exemple, le fichier de test du programme C &quot;tclCmdAH.c&quot; doit <20>tre &quot;cmdAH.test&quot;. Les fichiers qui contiennent des tests &quot;bo<EFBFBD>te noire&quot; (black-box tests) devraient se conformer au motif &quot;*_bb.test&quot;.</div>
<div ALIGN="LEFT" style="margin-left: 51px;"> </div><br>
<div><b>SELECTIONNER DES TESTS A EXECUTER DANS UN FICHIER</b></div><br>
<div ALIGN="LEFT" style="margin-left: 51px;">Normalement, quand un fichier est sourc<72>, tous les tests qu'il contient sont <20>x<EFBFBD>cut<75>s. Individuellement, un test sera saut<75> si l'une des conditions suivantes est vraie:
<DL>
<DT>&#91;1]</DT><DD>le <i>nom</i> du test ne correspond pas (en utilisant la correspondance de type &quot;glob&quot;) <20> un ou plusieurs <20>l<EFBFBD>ments de la variable <b>::tcltest::match</b>.</DD>
<DT>&#91;2]</DT><DD>le <i>nom</i> du test correspond (en utilisant la correspondance de type &quot;glob&quot;) <20> un ou plusieurs <20>l<EFBFBD>ments de la variable <b>::tcltest::skip</b>.</DD>
<DT>&#91;3]</DT><DD>l'argument <i>constraints</i> de l'appel <20> <b>::tcltest::call</b>, s'il existe, contient une ou plusieurs valeurs fausses.</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Vous pouvez d<>finir <b>::tcltest::match </b>et/ou<b> ::tcltest::skip, </b>soit interactivement (apr<70>s que le package<b> tcltest </b>a <20>t<EFBFBD> sourc<72>), ou en utilisant les arguments de ligne de commande<b> -match </b>et<b> </b><b>-skip</b>, par exemple <b>:&nbsp;&nbsp; </b> </div>
<div ALIGN="LEFT" style="margin-left: 102px;">tclsh info.test -match '*-5.* *-7.*' -skip '*-7.1*'</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Soyez s&ucirc;r de bien placer les quotes, de fa<66>on que votre shell ne fasse pas les substitutions de type glob sur les motifs que vous indiquez&nbsp; (que ce soit bien l'interpr<70>teur tcl qui fasse ces substitutions).&nbsp; </div>
<div ALIGN="LEFT" style="margin-left: 51px;">Les contraintes pr<70>d<EFBFBD>finies (par exemple <i>knownBug</i> et <i>nonPortable</i>) peuvent <20>tre chang<6E>es soit interactivement (apr<70>s que le package<b> tcltest </b>a <20>t<EFBFBD> sourc<72>), en d<>finissant la variable <b>::tcltest::testConstraints</b>(<i>constraint</i>), ou en utilisant l'option de ligne de commande <b>-constraints</b> avec le nom de la contrainte comme argument. L'exemple suivant montre comment faire fonctionner des tests contraints par les restrictsions <i>knownBug</i> et <i>nonPortable</i>: </div>
<div ALIGN="LEFT" style="margin-left: 51px;">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; tclsh all.tcl -constraints &quot;knownBug nonPortable&quot;</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Voir la section <i>&quot;Contraintes de Test&quot;</i> pour plus d' information sur l'utilisation des contraintes pr<70>d<EFBFBD>finies et l'ajout de nouvelles contraintes. </div>
<br>
<div><b>PERSONNALISER LE SYSTEME DE TEST</b></div>
<br>
<div ALIGN="LEFT" style="margin-left: 51px;">Pour cr<63>er votre propre syst<73>me de test, cr<63>er un fichier .tcl qui contient votre namespace. Dans ce fichier, appeller le package <b>tcltest</b> <i>(package require tcltest)</i>. Les commandes qui peuvent <20>tre red<65>finies pour personnaliser le syst<73>me de test sont:
<DL>
<DT><b>::tcltest::PrintUsageInfoHook</b></DT><DD>afficher de l'information compl<70>mentaire, sp<73>cifique <20> votre situation.</DD>
<DT><b>::tcltest::processCmdLineArgsFlagHook</b></DT><DD>avertir le syst<73>me au sujet d'options additionnelles que vous voulez qu'il comprenne.</DD>
<DT><b>::tcltest::processCmdLineArgsHook</b> <i>flags</i></DT><DD>traiter les options additionnelles que vous avez communiqu<71>es au syst<73>me de test au travers de ::tcltest::processCmdLineArgsFlagHook.</DD>
<DT><b>::tcltest::initConstraintsHook</b></DT><DD>ajouter des contraintes additionnelles aux contraintes pr<70>d<EFBFBD>finies par <b>tcltest</b>.</DD>
<DT><b>::tcltest::cleanupTestsHook</b></DT><DD>faire du nettoyage additionnel</DD>
</DL>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Pour ajouter de nouvelles options <20> votre syst<73>me de test personnalis<69>, red<65>finissez <b>::tcltest::processCmdLineArgsAddFlagHook</b> pour la liste des options additionnelles <20> interpr<70>ter, et <b>::tcltest::processCmdLineArgsHook</b> pour les traiter effectivement . Par exemple: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">proc ::tcltest::processCmdLineArgsAddFlagHook &#123;} &#123;<br>
&nbsp;&nbsp;&nbsp; return &#91;list -flag1 -flag2]<br>
}<br>
<br>
proc ::tcltest::processCmdLineArgsHook &#123;flagArray} &#123;<br>
&nbsp;&nbsp;&nbsp; array set flag &#36;flagArray<br>
<br>
&nbsp;&nbsp;&nbsp; if &#123;&#91;info exists flag(-flag1)]} &#123;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Handle flag1<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; if &#123;&#91;info exists flag(-flag2)]} &#123;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # Handle flag2<br>
&nbsp;&nbsp;&nbsp; }<br>
<br>
&nbsp;&nbsp;&nbsp; return<br>
}<br>
</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">Vous pouvez aussi vouloir ajouter un mode d'emploi pour ces options.&nbsp; Ce mode d'emploi s'affichera quand l'utilisateur indiquera -help. Pour d<>finir le mode d'emploi additionnel, d<>finissez votre propre proc<6F>dure ::tcltest::PrintUsageInfoHook. A l'int<6E>rieur de cette proc<6F>dure, vous afficherez le mode d'emploi compl<70>mentaire pour chacune des options que vous avez ajout<75>es.</div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 51px;">Pour ajouter de nouvelles contraintes pr<70>d<EFBFBD>finies au syst<73>me de test, d<>finissez votre propre version de <b>::tcltest::initConstraintsHook</b>.&nbsp; A l'int<6E>rieur de cette proc<6F>dure, vous pouvez compl<70>ter le tableau <b>::tcltest::testConstraints</b>. Par exemple: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">proc ::tcltest::initConstraintsHook &#123;} &#123;<br>
&nbsp;&nbsp;&nbsp; set ::tcltest::testConstraints(win95Or98) \<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#91;expr &#123;&#36;::tcltest::testConstraints(95) || \<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#36;::tcltest::testConstraints(98)}]<br>
}<br>
</div>
<div ALIGN="LEFT" style="margin-left: 51px;">Enfin, si vous voulez ajouter du code de nettoyage compl<70>mentaire, vous pouvez d<>finir votre propre <b>::tcltest::cleanupTestsHook</b>.&nbsp; Par exemple: </div>
<div ALIGN="LEFT" style="margin-left: 102px;">proc ::tcltest::cleanupTestsHook &#123;} &#123;<br>
&nbsp;&nbsp;&nbsp; # Add your cleanup code here<br>
}<br>
</div>
<div><b>EXEMPLES</b></div>
<div>&nbsp;
<div ALIGN="LEFT" style="margin-left: 102px;">&#91;1]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Un fichier de test simple (foo.test) </div>
<div ALIGN="LEFT" style="margin-left: 102px;">if &#123;&#91;lsearch &#91;namespace children] ::tcltest] == -1} &#123;<br>
&nbsp;&nbsp;&nbsp; package require tcltest<br>
&nbsp;&nbsp;&nbsp; namespace import ::tcltest::*<br>
}<br>
<br>
test foo-1.1 &#123;enregistrer 1 dans la variable foo} &#123;} &#123;<br>
&nbsp;&nbsp;&nbsp; set foo 1<br>
} &#123;1}<br>
<br>
::tcltest::cleanupTests<br>
return<br>
</div>
<div ALIGN="LEFT" style="margin-left: 102px;">&#91;2]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Un fichier all.tcl simple </div>
<div ALIGN="LEFT" style="margin-left: 102px;">if &#123;&#91;lsearch &#91;namespace children] ::tcltest] == -1} &#123;<br>
&nbsp;&nbsp;&nbsp; package require tcltest<br>
&nbsp;&nbsp;&nbsp; namespace import ::tcltest::*<br>
}<br>
<br>
set ::tcltest::testSingleFile false<br>
set ::tcltest::testsDirectory &#91;file dir &#91;info script]]<br>
<br>
foreach file &#91;::tcltest::getMatchingTestFiles] &#123;<br>
&nbsp;&nbsp;&nbsp; if &#123;&#91;catch &#123;source &#36;file} msg]} &#123;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; puts stdout &#36;msg<br>
&nbsp;&nbsp;&nbsp; }<br>
}<br>
<br>
::tclttest::cleanupTests 1<br>
return<br>
</div>
<div ALIGN="LEFT" style="margin-left: 102px;">&#91;3]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ex<EFBFBD>cuter un test simple </div>
<div ALIGN="LEFT" style="margin-left: 102px;">tclsh foo.test<br>
</div>
<div ALIGN="LEFT" style="margin-left: 102px;">&#91;4]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ex<EFBFBD>cuter des tests multiples </div>
<div ALIGN="LEFT" style="margin-left: 102px;">tclsh all.tcl -file 'foo*.test' -notfile 'foo2.test'<br>
</div>
<div>&nbsp;
<div>Derni<EFBFBD>re r<>vision: 8.2</div>
</BODY></HTML>