310 lines
38 KiB
HTML
310 lines
38 KiB
HTML
|
<HTML><HEAD>
|
|||
|
<BASEFONT FACE="Times New Roman" SIZE="2" COLOR="#000000">
|
|||
|
</HEAD>
|
|||
|
<BODY>
|
|||
|
<div><H3><b>Tcltest Commandes internes Tcl</b></H3></div>
|
|||
|
<HR ALIGN="center">
|
|||
|
<div><b>NOM</b></div><br>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Tcltest - 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>"Tests"</i>, <i>"Contraintes de test"</i>, et <i>" Faire </i><i>fonctionner les fichiers de test "</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>"Personnaliser le syst<73>me </i><i>de test"</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 "p" ou "s", 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>"Ecrire un nouveau </i><i>test"</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 "all.tcl". 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>"Ex<EFBFBD>cuter des fichiers de test"</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 "all.tcl". Voir la section <i>"Ex<EFBFBD>cuter des fichiers de test"</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 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>. <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>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">test <name> <description> ?<constraint>? <script> <expectedAnswer><br>
|
|||
|
</div>
|
|||
|
<div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument <name> doit ob<6F>ir au motif:</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;"> <target>-<majorNum>.<minorNum></div>
|
|||
|
<div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Pour les tests "en bo<62>te blanche" (tests de r<>gression), la cible <target > doit <20>tre le nom de la fonction C ou de la proc<6F>dure Tcl qui est test<73>e. Pour les tests "en bo<62>te noire", la cible <target> doit <20>tre le nom de la fonctionnalit<69> test<73>e. Des tests apparent<6E>s doivent avoir le m<>me num<75>ro majeur <majorNum>.</div>
|
|||
|
<div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument <description> 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>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument optionnel <constraints> peut <20>tre une liste d'un ou plusieurs mots-cl<63>s ou une expression. Si l'argument <constraints> 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>. Si l'un de ces <20>l<EFBFBD>ments est faux ou n'existe pas, le test est saut<75>. Si l'argument <constraints> 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>
|
|||
|
<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 {testing file permissions} {unixOnly} {<br>
|
|||
|
lindex [file attributes foo.tcl] 5<br>
|
|||
|
} {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 {Tcl_DeleteFileHandler} {unixOnly && !testthread} {<br>
|
|||
|
catch {vwait x}<br>
|
|||
|
set f [open foo w]<br>
|
|||
|
fileevent $f writable {set x 1}<br>
|
|||
|
vwait x<br>
|
|||
|
close $f<br>
|
|||
|
list [catch {vwait x} msg] $msg<br>
|
|||
|
} {1 {ne peut pas attendre la variable "x": attendrait ind<6E>finiment }}<br>
|
|||
|
</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Voir la section <i>"Contraintes de Test"</i> pour la liste des contraintes pr<70>d<EFBFBD>finies et pour savoir comment ajouter vos propres contraintes.</div>
|
|||
|
<div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument <script> 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ô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>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">L'argument <expectedAnswer> sera compar<61> au r<>sultat de l'<27>valuation de l'argument <script>. 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ô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ô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 "env" au d<>but de l'<27>x<EFBFBD>cution du test. Ce tableau est utilis<69> pour restaurer le tableau "env" <20> sa valeur initiale quand <i>::tcltest::cleanupTests</i> 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 -tmpdir en ligne de commande.</DD>
|
|||
|
<DT><br><b>::tcltest::testsDirectory</b></DT><DD>l<EFBFBD> o<>; se trouvent les tests - par d<>faut <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>. 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>
|
|||
|
[string equal $tcl_platform(platform) "unix"]<br>
|
|||
|
</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Si un test est contraint par "unixOnly", 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>. 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>
|
|||
|
<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 "Introduction" 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 "async flush" et "async close" 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 "e" 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;"><shell> <testFile> ?<option> ?<value>?? ...</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 <level></b></DT><DD>
|
|||
|
d<EFBFBD>finit le niveau de verbosit<69> comme une sous-cha<68>ne de "bps". Voir la section "Informations issus des tests" pour une explication de cette option. (::tcltest::verbose)</DD>
|
|||
|
<DT><b>-match <matchList></b></DT><DD>
|
|||
|
effectue seulement les tests qui correspondent aux motifs de "glob" d<>finis dans <matchList>. (::tcltest::match)</DD>
|
|||
|
<DT><b>-skip <skipList></b></DT><DD>
|
|||
|
n'effectue pas les tests qui correspondent <20> un ou plusieurs motifs de "glob" d<>finis dans <skipList>. (::tcltest::skip) </DD>
|
|||
|
<DT><b>-file <globPatternList></b></DT><DD>
|
|||
|
source seulement les fichiers de test dont les noms r<>pondent <20> l'un des motifs de <globPatternList> d<>finis par rapport au r<>pertoire::tcltest::testsDirectory. Cette option n'a de sens qui si vous effectuez des tests utilisant "all.tcl" en tant que <testFile> au lieu d'effectuer directement des fichiers unitaires de test. (::tcltest::matchFiles) </DD>
|
|||
|
<DT><b>-notfile <globPatternList></b></DT><DD>
|
|||
|
source tous les fichiers sauf ceux dont les noms r<>pondent <20> l'un des motifs de <globPatternList> d<>finis par rapport au r<>pertoire::tcltest::testsDirectory. Cette option n'a de sens qui si vous effectuez des tests utilisant "all.tcl" en tant que <testFile> au lieu d'effectuer directement des fichiers unitaires de test. (::tcltest::skipFiles) </DD>
|
|||
|
<DT><b>-constraints <list></b></DT><DD>
|
|||
|
les tests contenant une contrainte parmi la liste <list> ne seront pas saut<75>s. Notez que les <20>l<EFBFBD>ments de <list> 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 <bool></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 <script></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 <scriptfile></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 <directoryName></b></DT><DD>mettra tous les fichiers temporaires (cr<63><72>s avec ::tcltest::makeFile et ::tcltest::makeDirectory) dans le r<>pertoire indiqu<71>. L'emplacement par d<>faut est ::tcltest::workingDirectory. (::tcltest::temporaryDirectory) </DD>
|
|||
|
<DT><b>-testdir <directoryName></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 <level></b></DT><DD>contrôle pour les fichiers core. Cette option d<>termine quel niveau de contrôle sera effectu<74> pour les fichiers "core". La valeur par d<>faut pour <level> est 0. Les niveaux <level> sont d<>finis comme suit :<DL>
|
|||
|
<DT>0</DT><DD>Pas de contrôle - ne pas contrôler les fichiers core <20> la fin de chaque test, mais les contrô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 <debugLevel></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 <filename></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 <filename></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>"Contraintes de Test"</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>"Les variables du </i><i>namespace Tcltest"</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 "Exemples" 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>. A cô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>
|
|||
|
<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 "bps". Dans la cha<68>ne "bps", le 'b' se r<>f<EFBFBD>re au corps (body) du test, le 'p' se r<>f<EFBFBD>re aux tests r<>ussis (passed) et le 's' signifi<66> tests saut<75>s (skipped). La valeur par d<>faut de <b>::tcltest::verbose est "b". </b>Si 'b' est pr<70>sent, alors le corps entier du test est imprim<69> pour chaque test <20>chou<6F>; 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 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;"> 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 {[lsearch [namespace children] ::tcltest] == -1} {<br>
|
|||
|
package require tcltest<br>
|
|||
|
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, 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>
|
|||
|
<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 "tclCmdAH.c" doit <20>tre "cmdAH.test". Les fichiers qui contiennent des tests "bo<EFBFBD>te noire" (black-box tests) devraient se conformer au motif "*_bb.test".</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>[1]</DT><DD>le <i>nom</i> du test ne correspond pas (en utilisant la correspondance de type "glob") <20> un ou plusieurs <20>l<EFBFBD>ments de la variable <b>::tcltest::match</b>.</DD>
|
|||
|
<DT>[2]</DT><DD>le <i>nom</i> du test correspond (en utilisant la correspondance de type "glob") <20> un ou plusieurs <20>l<EFBFBD>ments de la variable <b>::tcltest::skip</b>.</DD>
|
|||
|
<DT>[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>: </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û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 (que ce soit bien l'interpr<70>teur tcl qui fasse ces substitutions). </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;"> tclsh all.tcl -constraints "knownBug nonPortable"</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Voir la section <i>"Contraintes de Test"</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 {} {<br>
|
|||
|
return [list -flag1 -flag2]<br>
|
|||
|
}<br>
|
|||
|
<br>
|
|||
|
proc ::tcltest::processCmdLineArgsHook {flagArray} {<br>
|
|||
|
array set flag $flagArray<br>
|
|||
|
<br>
|
|||
|
if {[info exists flag(-flag1)]} {<br>
|
|||
|
# Handle flag1<br>
|
|||
|
}<br>
|
|||
|
<br>
|
|||
|
if {[info exists flag(-flag2)]} {<br>
|
|||
|
# Handle flag2<br>
|
|||
|
}<br>
|
|||
|
<br>
|
|||
|
return<br>
|
|||
|
}<br>
|
|||
|
</div>
|
|||
|
<div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 51px;">Vous pouvez aussi vouloir ajouter un mode d'emploi pour ces options. 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>
|
|||
|
<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>. 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 {} {<br>
|
|||
|
set ::tcltest::testConstraints(win95Or98) \<br>
|
|||
|
[expr {$::tcltest::testConstraints(95) || \<br>
|
|||
|
$::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>. Par exemple: </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 102px;">proc ::tcltest::cleanupTestsHook {} {<br>
|
|||
|
# Add your cleanup code here<br>
|
|||
|
}<br>
|
|||
|
</div>
|
|||
|
<div><b>EXEMPLES</b></div>
|
|||
|
<div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 102px;">[1] Un fichier de test simple (foo.test) </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 102px;">if {[lsearch [namespace children] ::tcltest] == -1} {<br>
|
|||
|
package require tcltest<br>
|
|||
|
namespace import ::tcltest::*<br>
|
|||
|
}<br>
|
|||
|
<br>
|
|||
|
test foo-1.1 {enregistrer 1 dans la variable foo} {} {<br>
|
|||
|
set foo 1<br>
|
|||
|
} {1}<br>
|
|||
|
<br>
|
|||
|
::tcltest::cleanupTests<br>
|
|||
|
return<br>
|
|||
|
</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 102px;">[2] Un fichier all.tcl simple </div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 102px;">if {[lsearch [namespace children] ::tcltest] == -1} {<br>
|
|||
|
package require tcltest<br>
|
|||
|
namespace import ::tcltest::*<br>
|
|||
|
}<br>
|
|||
|
<br>
|
|||
|
set ::tcltest::testSingleFile false<br>
|
|||
|
set ::tcltest::testsDirectory [file dir [info script]]<br>
|
|||
|
<br>
|
|||
|
foreach file [::tcltest::getMatchingTestFiles] {<br>
|
|||
|
if {[catch {source $file} msg]} {<br>
|
|||
|
puts stdout $msg<br>
|
|||
|
}<br>
|
|||
|
}<br>
|
|||
|
<br>
|
|||
|
::tclttest::cleanupTests 1<br>
|
|||
|
return<br>
|
|||
|
</div>
|
|||
|
<div ALIGN="LEFT" style="margin-left: 102px;">[3] 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;">[4] 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>
|
|||
|
<div>Derni<EFBFBD>re r<>vision: 8.2</div>
|
|||
|
</BODY></HTML>
|