Projet mkd/basic.c

De Wiki EELL.

(Différences entre les versions)
m (!!)
m (Fichier de commande des tests : Mise à jour)
 
(12 versions intermédiaires masquées)
Ligne 1 : Ligne 1 :
-
<small>[[Portail:mkd|Retour au portail mkd &rarr;]]</small>
+
<small>[[Projet mkd/Fichiers en développement|Retour aux fichiers en développement &rarr;]]</small>
-
: La présentation de ce fichier est à revoir, notament son entête non conforme. Il est obligatoire de préciser ce que fait le fichier et de donner les indications pour le fichier d'entête basic.h
+
<pre Style="color:blue">
 +
REMARQUES : Il est important de laisser un espace entre le caractère de début
 +
    de commentaire ' ou REM et le commentaire proprement dit, afin d'éviter
 +
    les caractères ignorés.  
 +
    Il est à noter également que l'apostrophe peut être pris pour un caractère
 +
    de début de commentaire lorsque les commentaires ne sont pas 'Codés'
 +
    (Option t et Codes '**')
 +
</pre>
 +
== Fichiers de la fonction basic_() ==
 +
{{Boîte déroulante/début|titre=basic.c, basic.cc, basic.inc.cc}}
 +
<pre Style="color:red">
 +
/*P
 +
FILE NAME: basic.c for konsole basic.cc for individual compilation in
 +
  c++ or basic.inc.cc to include file in sources files with gtkmm
 +
 +
PROJECT: mkd
 +
mkd is a UNIX command to extract pre-encoded comments lines to generate the
 +
software documentation according to ISO standards.
 +
mkd is the abbreviation of make documentation. This command was originally
 +
known under the name mkdoc (make documentation).
 +
This command is not integrated into the standard distributions of Unix / Linux
 +
 +
INITIAL PROJECT:
 +
mkdoc 1989 for MS-DOS and UNIX now obsolete. CEM - University of Montpellier II
 +
 +
ADMINISTRATIVE RECORD:
 +
extractdoc 04/12/2009
 +
 +
FILE UPDATE:
 +
Date: ../../1986 by JPL Initial programming for MSDOS and UNIX on SUN
 +
Date: 09/02/1989 by JPL mkdoc ?? for PC and UNIX
 +
Date: 12/02/1991 by JPL mkdoc 3.12 for PC and UNIX
 +
Date: 04/05/2013 by Clara Update for UTF-8
 +
 +
*/
 +
// Date: ../../.... by ... purpose of the modification ....
 +
 +
/*T
 +
FILE NAME: basic.c for konsole basic.cc for individual compilation in
 +
  c++ or basic.inc.cc to include file in sources files with gtkmm
 +
 +
RECOMMANDED TESTS:
 +
  Cette fonction doit décoder les commentaires style Basic.
 +
  Voir aussi NOTES et option -l dans version.h
 +
 +
  Colonne n+ |0|1|2|3|4|5|6|7|8|9|A|B|C|
 +
            |'|O| |C|o|m|m|e|n|t| | | |To NL....| toutes versions
 +
            |R|E|M|O| |C|o|m|m|e|n|t| |To NL....| toutes versions
 +
            |R|e|m| |O| |C|o|m|m|e|n|t|To NL....| depuis version 2013
 +
  Notez que le 'Code' peut être placé en 3ème ou 4ème colonne avec REM.
 +
 +
 +
    Directives de tests unitaires version alpha 2013
 +
    Généralités pour tous les modules.
 +
    -------------------------------------------------
 +
    Vérifiez les options n, s et t séparément:
 +
    Vérifiez que la numérotation des lignes est correcte dans tous les cas de
 +
    décodage (lignes et blocs). n, ns. nt, nst.
 +
    Vérifiez que le texte reste à la bonne place dans tous les cas de décodage:
 +
    toute la ligne (dans la cas de la directive de compilation FULL_LINE), ou
 +
    texte seul.
 +
    -- Vérifiez que les tabulations sont bien prises en charge dans tous les
 +
      cas, décodage des lignes et des blocs.
 +
    -- Vérifiez de même pour les espaces.
 +
    La fonction doit être éprouvé©e de telle sorte qu'un commentaire qui se
 +
    termine par le caractère de fin de fichier soit entièrement copié dans le
 +
    fichier cible.
 +
    Le caractère de fin de fichier décodé avant le(les) caractère(s) de fin de
 +
    commentaire doit être remplacé par un caractère de fin de ligne 0x0A. Noter
 +
    que le caractère 0x0A précédant EOF est considéré comme fin de ligne.
 +
 +
    Le caractère de fin de fichier (EOF 0xFF) NE DOIT JAMAIS APPARAÎTRE DANS LE
 +
    TEXTE DU FICHIER CIBLE.
 +
    Ceci provoquait un bug dans la version Alpha de l'application fenêtrée
 +
    mkdbasicw à l'étape du test d'intégration.
 +
 +
    Vérifiez que l'extraction de tous les commentaires avec pour code de
 +
    décodage '**' soient copiés et que ceux-ci soient à la bonne place.
 +
 +
*/
 +
 +
/*D
 +
function basic_
 +
-----------------------------------------------------------------------------
 +
FILE NAME: basic.c for konsole basic.cc for individual compilation in
 +
  c++ or basic.inc.cc to include file in sources files with gtkmm
 +
 +
FUNTION NAME:
 +
  basic_
 +
 +
SYNOPSIS, SYNTAX:
 +
  #include "/usr/include/mkd/version.h" // IMPORTANT: Compilation directives
 +
  #include "/usr/include/mkd/basic.h"  // or mkd.h
 +
  int basic_(FILE * pfdoc, FILE * pnfile);
 +
  FILE * pfdoc: pointer of the target stream opened by the calling function
 +
  FILE * pnfile: pointer of the source stream opened by the calling function
 +
 +
ACTION, DESCRIPTION:
 +
  The basic_ function reads the source file (pnfile) transmitted from the
 +
  calling function, and decodes the inline comments pre-encoded and writing
 +
  this comments to a target file (pfdoc).
 +
  Pre-coded characters are defined in a external global table 'Codes';
 +
 +
  The golbal variables are 'Codes' and 'Options'.
 +
  The 'Codes': table of 5 characters:
 +
    extern char codes[];
 +
    They must be défined in the calling function:
 +
    char codes[5] = {0,0,0,0,0};
 +
  The 'Options': n,s,t,v:
 +
    extern unsigned char n,s,t;
 +
    They must be dEfined in the calling function:
 +
    unsigned char n=0,s=0,t=0;
 +
  With the options:
 +
    -n: The transcript is preceded by line number. This allows to easily
 +
      reach the commented line.
 +
    -s: Add the comment to the stdout to use shell redirections > , >> ,
 +
      or ||.
 +
    -t: With the t option only the commented text is extracted.
 +
      Without the t option the entire line or block is copied.
 +
      The t option permit to generate directly exploitable and publishable
 +
      documents.
 +
 +
  Remarks:
 +
   
 +
CONFORMING TO:
 +
  POSIX, ANSI C, BSD, ISO/IEC 9899:2011; gcc, MS-Vc10; UTF-8.
 +
 +
PORTABILITY,
 +
  LINUX-Debian-systems, LINUX-Red-Hat, UNIX, gcc.
 +
  Microsoft Visual studio under Windows : x86(Win32) x64(Win32 and WIN64)
 +
 +
RETURN VALUE:
 +
  Nothing.
 +
 +
COPYRIGHT:
 +
  © EELL, Éditeurs Européens de Logiciels Libres, EUPL 2007.
 +
  Association à but non lucratif selon l'Article 11 de la convention
 +
  européenne des droits de l'homme.
 +
  Concédée sous licence EUPL, version 1.1 ou – dès leur approbation par la
 +
  Commission européenne - versions ultérieures de l’EUPL (la «Licence»).
 +
  Vous ne pouvez utiliser la présente œuvre que conformément à la Licence.
 +
  Vous pouvez obtenir une copie de la Licence à l’adresse suivante:
 +
    http://ec.europa.eu/idabc/eupl5
 +
  Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous la
 +
  Licence est distribué «en l’état», SANS GARANTIES OU CONDITIONS QUELLES
 +
  QU’ELLES SOIENT, expresses ou implicites.
 +
  Consultez la Licence pour les autorisations et les restrictions linguistiques
 +
  spécifiques relevant de la Licence.
 +
  La Licence est totalement compatible avec la licence GNU.
 +
 +
AUTHORS:
 +
  © Contact: http://edeulo.free.fr/contacts/formmail.php
 +
  Designer: intial JP Louyot (JPL)
 +
  Updates : JPL and Clara Jimenez
 +
  Translations: Alizée, Clara, Luca, JPL, JPT, Martine
 +
 +
RESSOURCES:
 +
  gtkmm with mkdw future widowed version.
 +
 +
NOTES:
 +
  Update April 2013
 +
 +
BUGS:
 +
  See bugs reports http://edeulo.free.fr/phpBB3
 +
 +
SEE ALSO MANUAL:
 +
  Man(3) attached in English.
 +
  Command line : man 3 basic_
 +
 +
*/
 +
 +
/*H 
 +
// File: basic.c
 +
void basic_ (FILE * pfdoc, FILE * pnfile);
 +
*/
 +
</pre>
<pre>
<pre>
-
/*E */
+
#include "version.h"
-
/*F #########################################
+
#include "basic.h"
-
    #               BASIC                  #
+
-
    ######################################### */
+
-
/*  09/02/89 */
+
-
/*P maj R3.12 12/02/91 par JPL */
+
void basic_(FILE * pfdoc, FILE * pnfile)
void basic_(FILE * pfdoc, FILE * pnfile)
-
// FILE *pfdoc, *pnfile;
+
//FILE * pfdoc: pointer of the target stream opened by the calling function
 +
//O  FILE * pnfile: pointer of the source stream opened by the calling function
     { /*S basic */
     { /*S basic */
-
         extern unsigned char l,p,s,t;
+
         extern unsigned char n,s,t;
         extern char codes[];
         extern char codes[];
         unsigned int num, tab, i;
         unsigned int num, tab, i;
         long ll,nl;
         long ll,nl;
         register int c1;
         register int c1;
-
         int c2,c3,c4;
+
         int c2,c3,c4,c5;
         num = 0;
         num = 0;
-
         c1 = c2 = c3 = c4 = STX; /* Start Text */
+
         c1 = c2 = c3 = c4 = c5 = STX; /* Start Text */
-
/*### DECODAGE BASIC OU SIMILAIRES ##########################################*/
+
/*O    tant que l'on n'est pas en fin de fichier source */
-
 
+
         while ( c1 != EOF && c2 != EOF && c3 != EOF && c4!=EOF && c5!=EOF)
-
/*O    tant que pas fin de fichier source */
+
-
         while ( c1 != EOF && c2 != EOF && c3 != EOF )
+
         { /*S tq !EOF */
         { /*S tq !EOF */
 +
 +
//O ----GET NEXT CHAR ---------------------------------------------------------
 +
/*O      si debut de texte faire c1=LF */
/*O      si debut de texte faire c1=LF */
           if (c1==STX) c1='\n';
           if (c1==STX) c1='\n';
/*O      sinon prendre pour c1 le char suivant */
/*O      sinon prendre pour c1 le char suivant */
-
           else c1=getc(pnfile);
+
           else  
 +
          c1=getc(pnfile);
 +
          if (c1==EOF) break;
/*O      si le char est NL reperer la position suivant NL dans nl */
/*O      si le char est NL reperer la position suivant NL dans nl */
           if(c1=='\n')
           if(c1=='\n')
Ligne 38 : Ligne 213 :
               num++;
               num++;
               nl=ftell(pnfile);
               nl=ftell(pnfile);
-
              tab=0;
 
           } /*S*/
           } /*S*/
 +
/*O      sinon, le caractère n'est pas NL */
-
/*O      si le char est 'R' ou '\'' */
+
//O ----FIND IF NEXT CHAR BEGIN A COMMENT -------------------------------------
-
           if(c1=='\''||c1=='R')
+
 
-
/*O      alors: */
+
/*O      si le caractère suivant est '\'' ou les caractères ("REM") */
-
          { /*S voir si decoder */
+
           if( c1=='\''|| //P c2, c3 ne sont lus que si c1 est faux
-
/*O          si c1='\'' ou si ( c1='R' et c2='E' et c3='M') */
+
                (c1=='R'||c1=='r')&&
-
              if(c1=='\''||(c1=='R'&&
+
                ((c2=getc(pnfile))=='E' || c2 == 'e')&&
-
                          (c2=getc(pnfile))=='E'&&
+
                ((c3=getc(pnfile))=='M' || c3 == 'm')
-
                          (c3=getc(pnfile))=='M'))
+
                )
-
/*O         alors: */
+
/*O       alors c'est un commentaire à décoder */
-
              { /*S decoder */
+
          { /*S decoder */
 +
 
 +
//O ----YES IT HAS A COMMENT --------------------------------------------------
 +
 
 +
/*O          si on a REM vérifier si le caractère suivant est l'espace */
 +
              if (c1!='\'')
 +
              { /*S cas REM */
                 c4=getc(pnfile);
                 c4=getc(pnfile);
-
/*O            si codes[0]=0 ou si c4 char code utilisateur */
+
/*O            si le caractère suivant n'est pas l'espace reculer d'un caractère. */
-
                 if(!codes[0]||
+
                if (c4!=' ') ungetc(c4,pnfile); //P unget c4 if not "REM_"
-
                     c4 == codes[0] ||
+
                //T fprintf(pfdoc,"\nREM détecté \'%c%c%c%c\'\n",c1, c2, c3, c4);
-
                     c4 == codes[1] ||
+
              } /*S cas REM */
-
                     c4 == codes[2] ||
+
/*O          dans tous les cas de commentaires précédents: */
-
                     c4 == codes[3] ||
+
              { /*S test d'extraction */
-
                     c4 == codes[4]
+
                c5=getc(pnfile); //P  c5 sera le char qui suit ', REM ou rem_
 +
/*O            si il n'y a pas de 'Code' ou que le caractère suivant c5
 +
                est égal à un des 'Codes' de la ligne de commandes */
 +
                 if( !codes[0] ||
 +
                     c5 == codes[0] ||
 +
                     c5 == codes[1] ||
 +
                     c5 == codes[2] ||
 +
                     c5 == codes[3] ||
 +
                     c5 == codes[4]
                   )
                   )
 +
/*O            extraire les commentaires */
 +
                { /*S extraire les commentaires */
-
/*O             alors: */
+
//O ----YES THE COMMENT MUST BE EXTRACTED -------------------------------------
-
                { /*S traiter le commentaire */
+
-
/*O                 reperer la position commentaire */
+
/*O               reperer la position du commentaire (après REM ou ') */
-
                    if(!codes[0]) ungetc(c2,pnfile);
+
                     ll=ftell(pnfile);
                     ll=ftell(pnfile);
 +
/*O                dans tous les cas de commentaires à extraire */
-
/*O                si option n ins‚rer le num‚ro de ligne */
+
/*O                se positionner en début de ligne */
 +
                    fseek(pnfile,nl,0);
 +
                    /*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
 +
/*O                si option n insérer le numéro de ligne */
                     if(n)
                     if(n)
                     { /*S*/
                     { /*S*/
Ligne 73 : Ligne 267 :
                       if(s) printf( "%5d ",num );
                       if(s) printf( "%5d ",num );
                     } /*S*/
                     } /*S*/
 +
/*O                copier la ligne jusqu'au commentaire, dans le fichier doc */
 +
                    for(i=(int)(ll-nl);i>0;--i)
 +
                    { /*S beginning line */
-
/*O                si pas option t */
+
//O ----WRITE THE BEGGINNING OF LINE ------------------------------------------
-
                    if(!t)
+
-
                    { /*S!t*/
+
-
/*O                   se positionner en dedut de ligne */
+
-
                      fseek(pnfile,nl,0);
+
-
                      /*w ou: fseek(pnfile,(nl-ftell(pnfile)),1); */
+
-
/*O                  copier la ligne jusqu'au commentaire, dans le fichier doc */
+
-
                      for(i=(int)(ll-nl);i>0;--i)
+
-
                      { /*S*/
+
-
                          c1=getc(pnfile);
+
-
                          putc(c1,pfdoc);
+
-
                          if(s)putch(c1);
+
-
                      } /*S*/
+
-
                    } /*S!t*/
+
-
/*O                sinon: (option t) */
+
-
                    else
+
-
                    { /*St*/
+
-
/*O                  copier autant de tabulations qu'il y en a dans le source */
+
-
                      for (i=0;i<tab;i++)
+
-
                      { /*S*/
+
-
                          putc('\t',pfdoc);
+
-
                          if(s)putch('\t');
+
-
                      } /*S*/
+
-
/*O                  puis copier des blancs jusqu'a la position commentaire */
+
-
                      for(i=(int)(ll-nl-tab);i>0;i--)
+
-
                      { /*S*/
+
-
                          putc(' ',pfdoc);
+
-
                          if(s)putch(' ');
+
-
                      } /*S*/
+
-
                    } /*St*/
+
 +
                      c1=getc(pnfile);
 +
                      if (c1==EOF) break;
 +
                      if (t) // option t is true replace with spaces or tabs
 +
                      {
 +
                          if(c1=='\t') // tab
 +
                          {
 +
                            putc('\t',pfdoc); // tabulation
 +
                            if(s) putch('\t');
 +
                          }
 +
                          else // not tab
 +
                          {
 +
                            putc(' ', pfdoc); // replace with space
 +
                            if(s) putch(' ');
 +
                          }
 +
                      }
 +
                      else // t not true: extract the full line
 +
                      {
 +
                          putc(c1,pfdoc);  // option t is not true
 +
                          if (s) putch(c1);
 +
                      }
 +
                    } /*S beginning line */
 +
 +
//O ----EXTRACT THE END OF THE LINE -------------------------------------------
/*O                puis tq ne rencontre pas le char '\n', copier le commentaire */
/*O                puis tq ne rencontre pas le char '\n', copier le commentaire */
-
                     while ( (c1=getc(pnfile)) != '\n' )
+
                     while ( (c1=getc(pnfile)) != '\n' && c1!=EOF)
-
                     { /*S*/
+
                     { /*S end of line */
                       putc(c1,pfdoc);
                       putc(c1,pfdoc);
                       if(s)putch(c1);
                       if(s)putch(c1);
-
                     } /*S*/
+
                     } /*S end of line */
 +
                    if (c1=='\n')
 +
                    { /*S c1=NL */
 +
                      putc('\n',pfdoc);
 +
                      if(s)putch('\n');  //P copier NL
 +
                      ungetc(c1,pnfile); //P revenir sur NL pour num++
 +
                    } /*S c1=NL */
 +
                    if (c1==EOF) break;
 +
                } /*S extraire les commentaires */
-
                    putc('\n',pfdoc);if(s)putch('\n');  /*O copier NL */
+
//O ----END OF EXTRACTED COMMENT ----------------------------------------------
-
                    ungetc(c1,pnfile);                  /*O revenir sur NL */
+
-
                } /*S traiter le commentaire */
+
-
/*O            sinon: */
+
/*O            sinon: (pas de commentaire à extraire) */
                 else
                 else
-
                 { /*S pas le cas */
+
                 { /*S pas de commentaire à extraire */
-
                     ungetc(c4,pnfile);
+
                     ungetc(c5,pnfile); //P c5 est lu dans tous les cas de commentaires
-
                } /*S pas le cas*/
+
/*O               si c1='R' renvoyer c3 et c2 */
-
              } /*S decoder */
+
                    if(c1=='R') // REM a échoué
-
/*O          sinon: */
+
                    {
-
              { /*S*/
+
                      if(c4==' ') ungetc(c4,pnfile); //w seulement si REM a été valide
-
/*O             si c1='R' renvoyer c3 et c2 */
+
                      // else c4=STX;
-
                if(c1=='R')
+
                      ungetc(c3,pnfile);
-
                {
+
                      ungetc(c2,pnfile);
-
                    ungetc(c3,pnfile);
+
                    }
-
                    ungetc(c2,pnfile);
+
                } /*S pas de commentaire à extraire */
-
                }
+
              } /*S test d'extraction */
-
              } /*S*/
+
          } /*S decoder */
-
          } /* voir si decoder */
+
-
/*O      sinon si c1 =tabulation incrementer tab */
+
-
          else if(c1=='\t')tab++;
+
         } /*S tq !EOF */
         } /*S tq !EOF */
     } /*S basic */
     } /*S basic */
</pre>
</pre>
 +
{{Boîte déroulante/fin}}
 +
 +
== Fichier de commande des tests ==
 +
{{Boîte déroulante/début|titre=MAKE_Tests_U}}
 +
 +
<pre Style="color:black">
 +
#!/bin/bash
 +
#O File: MAKE_Tests_U
 +
#O ../../mkd tests under Linux.
 +
#O Epreuve de vérification de la fonction basic_() avec ../../mkd
 +
 +
#O    Copy Tests_exemple.bas in target created file
 +
      cat Tests_exemple.bas > Tests_exemple.tstbas
 +
 +
#O    Test options -nstv with source "Tests_exemple.bas" and target "*.tstbas"
 +
#O    - and screen redirection to tstbas.screen
 +
 +
#O 1: Test de l'option -s append target
 +
      echo "------------------------------------------------------------------" >> Tests_exemple.tstbas
 +
      echo "1: Test de l'option -s append target" >> Tests_exemple.tstbas
 +
      ../../mkd -savB T Tests_exemple.bas *.tstbas > tstbas.screen
 +
 +
#O 1: Test option -t
 +
      echo "------------------------------------------------------------------" >> Tests_exemple.tstbas
 +
      echo "1: Test option -t" >> Tests_exemple.tstbas
 +
      ../../mkd -tavB T Tests_exemple.bas *.tstbas # >> tstbas.screen
 +
 +
#O 1: Test option -n, with append files target and screen
 +
      echo "------------------------------------------------------------------" >> Tests_exemple.tstbas
 +
      echo "1: Test option -n, with append files target and screen" >> Tests_exemple.tstbas
 +
      ../../mkd -navB T Tests_exemple.bas *.tstbas # >> tstbas.screen
 +
 +
#O 2: Test options -ns, with append files target and screen
 +
      echo "------------------------------------------------------------------" >> Tests_exemple.tstbas
 +
      echo "------------------------------------------------------------------" >> Tests_exemple.tstbas
 +
      echo "------------------------------------------------------------------" >> Tests_exemple.tstbas
 +
      echo "2: Test options -ns, with append files target and screen" >> Tests_exemple.tstbas
 +
      ../../mkd -nsavB T Tests_exemple.bas *.tstbas >> tstbas.screen
 +
 +
#O 2: Test options -nt, with append files target and screen
 +
      echo "------------------------------------------------------------------" >> Tests_exemple.tstbas
 +
      echo "2: Test options -nt, with append files target and screen" >> Tests_exemple.tstbas
 +
      ../../mkd -ntavB T Tests_exemple.bas *.tstbas >> tstbas.screen
 +
 +
#O 2: Test options -nst, with append files target and screen
 +
      echo "------------------------------------------------------------------" >> Tests_exemple.tstbas
 +
      echo "2: Test options -nst, with append files target and screen" >> Tests_exemple.tstbas
 +
      ../../mkd -nstavB T Tests_exemple.bas *.tstbas >> tstbas.screen
 +
 +
#O 5: Independant test with -nstv "Tests_exemple.bas" and target "*.tstbaslastline1"
 +
      ../../mkd -nstvwB '**' Tests_exemple.bas *.tstbaslastline1 > tstbaslastline.screen1
 +
 +
#O 5: Independant test with -nstv "Tests_exemple.bas" and target "*.tstbaslastline1"
 +
      ../../mkd -nsvaB '**' Tests_exemple.bas *.tstbaslastline1 >> tstbaslastline.screen1
 +
 +
 +
 +
#O    Break with gedit "Tests_exemple.tstbas", "tstbas.screen"
 +
      gedit Tests_exemple.tstbas tstbas.screen Tests_exemple.tstbaslastline1 tstbaslastline.screen1
 +
 +
#w bug      gedit Tests_exemple.bas.tstbaslastline2 #bug in version < 2012
 +
 +
#O    Erase Tests_exemple.tstbas
 +
</pre>
 +
{{Boîte déroulante/fin}}
 +
 +
== Analyse des tests konsole ==
 +
{{Boîte déroulante/début|titre=Analysis 2013-05-05}}
 +
<pre Style="color:blue">
 +
Fichier Analysis texte UTF-8
 +
Analyse du : 5 mai 2013 par Clara pour le retour à la conception détaillée.
 +
-------------------------------------------------------------------------------
 +
Résultats du test unitaire de la fonction basic_() du fichier basic.c
 +
intégrée à la commande mkd 2012: mkd_120508
 +
.
 +
Ce test est effectué avec la version mkd 2013 alpha pour évaluer les modifi-
 +
cations à effectuer dans cette version (alpha 2013).
 +
 +
.
 +
    D'après les directives et les fichiers d'analyse Tests_exemple.tstbas,
 +
    tstbas.screen, Tests_exemple.tstbaslastline1, tstbaslastline.screen1.
 +
.
 +
    Directives de tests unitaires version alpha 2013:
 +
    -------------------------------------------------
 +
1:  Vérifiez les options n, s et t séparément:
 +
    - les essais séparés fonctionnent correctement et sont conformes
 +
.
 +
2:  Vérifiez que la numérotation des lignes est correcte dans tous les cas de
 +
    décodage (lignes et blocs). n, ns. nt, nst.
 +
    - Les essais réalisés ont été conformes
 +
.
 +
3:  Vérifiez que le texte reste à la bonne place dans tous les cas d'extraction
 +
    Résultats conformes aux directives
 +
.
 +
4:  -- Vérifiez que les tabulations sont bien prises en charge dans tous les
 +
      cas, décodage des lignes et des blocs.
 +
    -- Vérifiez de même pour les espaces.
 +
    - Les résultats sont conformes. Il est à noter que les tabulations créent un
 +
      décalage du texte avec l'option -n numérotation
 +
.
 +
5:  La fonction doit être éprouvée de telle sorte qu'un commentaire qui se
 +
    termine par le caractère de fin de fichier soit entièrement copié dans le
 +
    fichier cible.
 +
    Le caractère de fin de fichier décodé avant le(les) caractère(s) de fin de
 +
    commentaire doit être remplacé par un caractère de fin de ligne 0xOA.
 +
    - Le fichier Tests_exemple.tstbaslastline1 commentaire ligne; fait apparaître
 +
      une fin de fichier conforme avec l'utilitaire GHex
 +
.
 +
6:  Le caractère de fin de fichier (EOF) NE DOIT JAMAIS APPARAÎTRE DANS LE
 +
    TEXTE DU FICHIER CIBLE.
 +
    Ceci provoquait un bug dans la version Alpha de l'application fenêtrée
 +
    mkdcppw à l'étape du test d'intégration.
 +
    - La réponse est incluse dans les tests 5:
 +
    - Nous avons constaté que EOF est précédé du caractère OxOA (New Line)
 +
    - Tous les caractères sont recopiés octets par octets. La commande mkd
 +
      ignore le format du texte recopié. Il n'en est pas de même pour mkdcppw
 +
      qui ne reconnaît que les caractères UTF-8 nécessaires à l'impression.
 +
     
 +
REMARQUES : Il est important de laisser un espace entre le caractère de début
 +
    de commentaire ' ou REM et le commentaire proprement dit, afin d'éviter
 +
    les caractères ignorés.
 +
    Il est à noter également que l'apostrophe peut être pris pour un caractère
 +
    de début de commentaire lorsque les commentaires ne sont pas 'Codés'
 +
    (Option t et Codes '**')
 +
</pre>
 +
{{Boîte déroulante/fin}}
 +
 +
== Fichier source des tests ==
 +
{{Boîte déroulante/début|titre="exemple2.bas, Make_TU_cpp.bat"}}
 +
* Fichier: exemple2.bas
 +
<pre Style="color:red">
 +
' ISO-8859-1
 +
REMT  Fichier exemple2.bas copié de
 +
REM T http://fr.wikipedia.org/wiki/BASIC
 +
REM T pour les tests unitaires de la fonction basic_()
 +
' ----------------------------------------------------
 +
RemT Tester avec Codes = 'T' et '<'
 +
'T 1 tabulation
 +
INPUT "Quel est votre nom"; UserName$ 'T
 +
PRINT "Bonjour "; UserName$ 'T
 +
DO
 +
  INPUT "Combien d'étoiles voulez-vous"; NumStars
 +
  Stars$ = ""
 +
  Stars$ = REPEAT$("*", NumStars) ' <-ANSI BASIC
 +
  'Stars$ = STRING$(NumStars, "*") ' <-MS BASIC
 +
  PRINT Stars$
 +
  DO
 +
    INPUT "Voulez-vous plus d'étoiles"; Answer$
 +
  LOOP UNTIL Answer$ <> ""
 +
LOOP WHILE UCASE$(LEFT$(Answer$, 1)) = "O"
 +
PRINT "Au revoir ";
 +
FOR A = 1 TO 200
 +
  PRINT UserName$; " "; 'T
 +
NEXT A
 +
PRINT
 +
 +
REM  Tester avec Codes = '**'
 +
1 10 REM - APPLESOFT - BASIC
 +
2 20 REM -> TEST
 +
3 30 IF I > 10 THEN GOSUB 60
 +
4 40 I= I + 1:GOTO 30
 +
5 50 REM -> ALERT
 +
6 60 PRINT I;" I IS GREATER THAN 10"
 +
7 70 RETURN
 +
8 80 END
 +
 +
'S Lastline without NL
 +
</pre>
 +
 +
* Fichier Make_TU_cpp.bat (Command for terminal MS-Windows)
 +
<pre Style="color:blue">
 +
REMO Command file Make_TU_cpp_.bat
 +
REMO ( mkd tests under Windows. )
 +
REMO Épreuve de vérification de la fonction cpp_() avec mkd
 +
REMO Modifié par Polo le 8 avril 2013
 +
REMO
 +
 
 +
echo Begin REMO
 +
echo ============== Reference text: ============== > Test_cpp_U.tstcpp.txt
 +
echo Tests 1: options -nstv with source Test_cpp_U.cc and target Test_cpp_U.tstcpp.txt >> Test_cpp_U.tstcpp.txt
 +
echo - and screen redirection to tstcpp.screen.txt >> Test_cpp_U.tstcpp.txt
 +
      type Test_cpp_U.cc >> Test_cpp_U.tstcpp.txt
 +
 
 +
echo. >> Test_cpp_U.tstcpp.txt > tstcpp.screen.txt
 +
 +
echo ============== Test 1 -s ============== >> Test_cpp_U.tstcpp.txt
 +
echo ============== Test 1 -s ============== >> tstcpp.screen.txt
 +
echo 1: Test option -s append target >> Test_cpp_U.tstcpp.txt
 +
 +
      mkd -savC T Test_cpp_U.cc Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 +
echo. >> Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 
 +
echo ============== Test 1 -t ============== >> Test_cpp_U.tstcpp.txt
 +
echo ============== Test 1 -t ============== >> tstcpp.screen.txt
 +
echo 1: Test option -t append target >> Test_cpp_U.tstcpp.txt
 +
 +
      mkd -tavC T Test_cpp_U.cc Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 +
echo. >> Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 
 +
echo ============== Test 1 -n ============== >> Test_cpp_U.tstcpp.txt
 +
echo ============== Test 1 -n ============== >> tstcpp.screen.txt
 +
echo 1: Test option -n, with append files target without screen >> Test_cpp_U.tstcpp.txt
 +
 +
      mkd -navC T Test_cpp_U.cc Test_cpp_U.tstcpp.txt  >> tstcpp.screen.txt
 +
 +
echo. >> Test_cpp_U.tstcpp.txt>> tstcpp.screen.txt
 +
 +
echo ============== Test 2 -ns ============== >> Test_cpp_U.tstcpp.txt
 +
echo ============== Test 2 -ns ============== >> tstcpp.screen.txt
 +
echo 2: Test options -ns, with append files target and screen >> Test_cpp_U.tstcpp.txt
 +
 +
      mkd -nsavC T Test_cpp_U.cc Test_cpp_U.tstcpp.txt  >> tstcpp.screen.txt
 +
 +
echo. >> Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 +
echo ============== Test 2 -nt ============== >> Test_cpp_U.tstcpp.txt
 +
echo ============== Test 2 -nt ============== >> tstcpp.screen.txt
 +
echo 2: Test options -nt, with append files target and screen >> Test_cpp_U.tstcpp.txt
 +
      mkd -ntavC T Test_cpp_U.cc Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 +
echo. >> Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 +
echo ============== Test 2 -nst ============== >> Test_cpp_U.tstcpp.txt
 +
echo ============== Test 2 -nst ============== >> tstcpp.screen.txt
 +
echo 2: Test options -nst, with append files target and screen >> Test_cpp_U.tstcpp.txt
 +
 +
      mkd -nstavC T Test_cpp_U.cc Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 +
echo. >> Test_cpp_U.tstcpp.txt >> tstcpp.screen.txt
 +
 +
echo ============== Test 5 last line without NL ============== > tstcpplastline.screen1.txt
 +
REM 5.0: Independant test with -nstv "Test_cpp_U.cc" and target "Test_cpp_U.tstcpplastline1.txt"
 +
      mkd -nstvwC T Test_cpp_U.cc Test_cpp_U.tstcpplastline1.txt >> tstcpplastline.screen1.txt
 +
REM 5.0 Avec VC10 la redirection imprime les numéros de lignes ne retrouvent
 +
REM    pas dans le fichier cible.
 +
REM 5.1 Même commande qu'en 5.1 sans redirection.
 +
      mkd -nstvwC T Test_cpp_U.cc Test_cpp_U.tstcpplastline1.1.txt
 +
REM 5.1 Les numéros de ligne se trouvent à la bonne place ainsi que les
 +
REM    commentaires  
 +
echo. >> Test_cpp_U.tstcpp.txt
 +
 +
echo ============== Test 5 last bloc without NL ============== > tstcpplastline.screen2.txt
 +
REM 5: Independant test with -nstv "Test_cpp_U.c" and target file "Test_cpp_U.cc.tstcpplastline2"
 +
REM bug      mkd -nstvwC T Test_cpp_U.c Test_cpp_U.tstcpplastline2.txt >> tstcpplastline.screen2.txt
 +
 +
echo *************** END *********************************************************** >> Test_cpp_U.tstcpp.txt
 +
 +
REMO Break with gedit for Windows "Test_cpp_U.tstcpp.txt", "tstcpp.screen.txt"
 +
      "C:\Program Files (x86)\gedit\bin\gedit.exe" Test_cpp_U.tstcpp.txt tstcpp.screen.txt Test_cpp_U.tstcpplastline1.txt
 +
      rem "C:\Program Files (x86)\gedit\bin\gedit.exe" tstcpp.screen.txt
 +
      rem "C:\Program Files (x86)\gedit\bin\gedit.exe" Test_cpp_U.tstcpplastline1.txt
 +
  rem "C:\Program Files (x86)\Notepad++\notepad++.exe" Test_cpp_U.tstcpp.txt
 +
      rem notepad++ tstcpp.screen.txt
 +
      rem notepad++ Test_cpp_U.tstcpplastline1.txt
 +
REMw bug      "C:\Program Files (x86)\gedit\bin\gedit.exe" Test_cpp_U.cc.tstcpplastline2.txt
 +
Pause CTRL-C to quit, or NL to erase the files
 +
Clean_tests
 +
</pre>
 +
{{Boîte déroulante/fin}}
 +
 +
[[Catégorie:Générateurs de documentation]]

Version actuelle en date du 5 mai 2013 à 16:56

Retour aux fichiers en développement →

REMARQUES : Il est important de laisser un espace entre le caractère de début
    de commentaire ' ou REM et le commentaire proprement dit, afin d'éviter
    les caractères ignorés. 
    Il est à noter également que l'apostrophe peut être pris pour un caractère
    de début de commentaire lorsque les commentaires ne sont pas 'Codés'
    (Option t et Codes '**')

Sommaire

Fichiers de la fonction basic_()

Fichier de commande des tests

Analyse des tests konsole

Fichier source des tests

Outils personnels