Home | History | Annotate | Download | only in tests
      1 /*
      2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
      3 %                                                                             %
      4 %                                                                             %
      5 %    SSS    CCC  RRRR   III  PPPP  TTTTT    TTTTT  OOO   K  K  EEEE  N   N    %
      6 %   S      C     R   R   I   P   P   T        T   O   O  K K   E     NN  N    %
      7 %    SSS   C     RRRR    I   PPPP    T        T   O   O  KK    EEE   N N N    %
      8 %       S  C     R R     I   P       T        T   O   O  K K   E     N  NN    %
      9 %   SSSS    CCC  R  RR  III  P       T        T    OOO   K  K  EEEE  N   N    %
     10 %                                                                             %
     11 %                         TTTTT  EEEEE  SSSSS  TTTTT                          %
     12 %                           T    E      SS       T                            %
     13 %                           T    EEE     SSS     T                            %
     14 %                           T    E         SS    T                            %
     15 %                           T    EEEEE  SSSSS    T                            %
     16 %                                                                             %
     17 %       Perform "Magick" on Images via the Command Line Interface             %
     18 %                                                                             %
     19 %                             Dragon Computing                                %
     20 %                             Anthony Thyssen                                 %
     21 %                               January 2012                                  %
     22 %                                                                             %
     23 %                                                                             %
     24 %  Copyright 1999-2016 ImageMagick Studio LLC, a non-profit organization      %
     25 %  dedicated to making software imaging solutions freely available.           %
     26 %                                                                             %
     27 %  You may not use this file except in compliance with the License.  You may  %
     28 %  obtain a copy of the License at                                            %
     29 %                                                                             %
     30 %    http://www.imagemagick.org/script/license.php                            %
     31 %                                                                             %
     32 %  Unless required by applicable law or agreed to in writing, software        %
     33 %  distributed under the License is distributed on an "AS IS" BASIS,          %
     34 %  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   %
     35 %  See the License for the specific language governing permissions and        %
     36 %  limitations under the License.                                             %
     37 %                                                                             %
     38 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     39 %
     40 %  Test the raw tokanization of the  ScriptToken Subroutines
     41 %
     42 %  This actually uses very little of the magic core functions
     43 %  and in fact creates a completely stand-alone program by substituting
     44 %  required MagickCore with direct system equivelents.
     45 %
     46 %  Build
     47 %     cc     script-token-test.c   -o script-token-test
     48 %
     49 %  For testing see  script-token-test.sh
     50 %
     51 */
     52 
     53 /* System Replacement for MagickWand includes */
     54 #include <stdio.h>
     55 #include <string.h>
     56 #include <stdlib.h>
     57 #include <assert.h>
     58 #include <errno.h>
     59 
     60 /* Defines to replace MagickWand / MagickCore defintions */
     61 #define MagickPathExtent     4096
     62 #define MagickFalse       0
     63 #define MagickTrue        1
     64 #define MagickBooleanType int
     65 
     66 #define AcquireMagickMemory(s)    malloc(s)
     67 #define RelinquishMagickMemory(p) (free(p),NULL)
     68 #define ResizeMagickMemory(p,s)   realloc(p,s)
     69 #define ResetMagickMemory(p,b,s)  memset(p,b,s)
     70 #define StringToLong(s)           strtol(s,(char **) NULL,10)
     71 #define LocaleCompare(p,q)        strcasecmp(p,q)
     72 #define LocaleNCompare(p,q,l)     strncasecmp(p,q,l)
     73 #define WandSignature             0xabacadabUL
     74 #define fopen_utf8(p,q)           fopen(p,q)
     75 #define WandExport
     76 
     77 /* Include the actual code for ScriptToken functions */
     78 #define SCRIPT_TOKEN_TESTING  1 /* Prevent MagickWand Includes */
     79 #include "../script-token.h"
     80 #include "../script-token.c"
     81 
     82 /* Test program to report what tokens it finds in given input file/stream */
     83 
     84 int main(int argc, char *argv[])
     85 {
     86   ScriptTokenInfo
     87      *token_info;
     88 
     89   token_info = AcquireScriptTokenInfo( (argc>1) ? argv[1] : "-" );
     90   if (token_info == (ScriptTokenInfo *) NULL) {
     91     printf("Script Open Failure : %s\n", strerror(errno));
     92     return(1);
     93   }
     94 
     95   while (1) {
     96     if( GetScriptToken(token_info) == MagickFalse )
     97       break;
     98 
     99     if( strlen(token_info->token) > INITAL_TOKEN_LENGTH-1 ) {
    100       token_info->token[INITAL_TOKEN_LENGTH-4] = '.';
    101       token_info->token[INITAL_TOKEN_LENGTH-3] = '.';
    102       token_info->token[INITAL_TOKEN_LENGTH-2] = '.';
    103       token_info->token[INITAL_TOKEN_LENGTH-1] = '\0';
    104     }
    105     printf("l=%d, c=%d, stat=%d, len=%d, token=\"%s\"\n",
    106          token_info->token_line, token_info->token_column,
    107          token_info->status, token_info->length, token_info->token);
    108   }
    109 
    110   switch( token_info->status ) {
    111     case TokenStatusOK:
    112       break;
    113     case TokenStatusEOF:
    114       printf("EOF Found\n");
    115       break;
    116     case TokenStatusBadQuotes:
    117       /* Ensure last token has a sane length for error report */
    118       if( strlen(token_info->token) > INITAL_TOKEN_LENGTH-1 ) {
    119         token_info->token[INITAL_TOKEN_LENGTH-4] = '.';
    120         token_info->token[INITAL_TOKEN_LENGTH-3] = '.';
    121         token_info->token[INITAL_TOKEN_LENGTH-2] = '.';
    122         token_info->token[INITAL_TOKEN_LENGTH-1] = '\0';
    123       }
    124       printf("Bad Quotes l=%d, c=%d  token=\"%s\"\n",
    125            token_info->token_line,token_info->token_column, token_info->token);
    126       break;
    127     case TokenStatusMemoryFailed: /* token is invalid */
    128       printf("Out of Memory  l=%d, c=%d\n",
    129            token_info->token_line,token_info->token_column);
    130       break;
    131     case TokenStatusBinary:       /* token is invalid */
    132       printf("Binary Char at l=%d, c=%d\n",
    133            token_info->curr_line,token_info->curr_column);
    134       break;
    135   }
    136 
    137   /* Clean up */
    138   token_info = DestroyScriptTokenInfo(token_info);
    139 
    140   return(0);
    141 }
    142