test/automated/testsdl.c
author Sam Lantinga <slouken@libsdl.org>
Mon, 07 Sep 2009 05:06:34 +0000
changeset 3259 22ac66da0765
child 3319 63d4517fc4ac
permissions -rw-r--r--
Merged Edgar's code changes from Google Summer of Code 2009
     1 /*
     2  * SDL test suite framework code.
     3  *
     4  * Written by Edgar Simo "bobbens"
     5  *
     6  * Released under Public Domain.
     7  */
     8 
     9 
    10 #include "SDL.h"
    11 #include "SDL_at.h"
    12 
    13 #include "platform/platform.h"
    14 #include "rwops/rwops.h"
    15 #include "surface/surface.h"
    16 #include "render/render.h"
    17 #include "audio/audio.h"
    18 
    19 #include <stdio.h> /* printf */
    20 #include <stdlib.h> /* exit */
    21 #include <unistd.h> /* getopt */
    22 #include <getopt.h> /* getopt_long */
    23 #include <string.h> /* strcmp */
    24 
    25 
    26 /*
    27  * Tests to run.
    28  */
    29 static int run_manual      = 0; /**< Run manual tests. */
    30 /* Manual. */
    31 /* Automatic. */
    32 static int run_platform    = 1; /**< Run platform tests. */
    33 static int run_rwops       = 1; /**< Run RWops tests. */
    34 static int run_surface     = 1; /**< Run surface tests. */
    35 static int run_render      = 1; /**< Run render tests. */
    36 static int run_audio       = 1; /**< Run audio tests. */
    37 
    38 /*
    39  * Prototypes.
    40  */
    41 static void print_usage( const char *name );
    42 static void parse_options( int argc, char *argv[] );
    43 
    44 
    45 /**
    46  * @brief Displays program usage.
    47  */
    48 static void print_usage( const char *name )
    49 {
    50    printf("Usage: %s [OPTIONS]\n", name);
    51    printf("Options are:\n");
    52    printf("   -m, --manual    enables tests that require user interaction\n");
    53    printf("   --noplatform    do not run the platform tests\n");
    54    printf("   --norwops       do not run the rwops tests\n");
    55    printf("   --nosurface     do not run the surface tests\n");
    56    printf("   --norender      do not run the render tests\n");
    57    printf("   --noaudio       do not run the audio tests\n");
    58    printf("   -v, --verbose   increases verbosity level by 1 for each -v\n");
    59    printf("   -q, --quiet     only displays errors\n");
    60    printf("   -h, --help      display this message and exit\n");
    61 }
    62 
    63 
    64 /**
    65  * @brief Handles the options.
    66  */
    67 static void parse_options( int argc, char *argv[] )
    68 {
    69    static struct option long_options[] = {
    70       { "manual", no_argument, 0, 'm' },
    71       { "noplatform", no_argument, 0, 0 },
    72       { "norwops", no_argument, 0, 0 },
    73       { "nosurface", no_argument, 0, 0 },
    74       { "norender", no_argument, 0, 0 },
    75       { "noaudio", no_argument, 0, 0 },
    76       { "verbose", no_argument, 0, 'v' },
    77       { "quiet", no_argument, 0, 'q' },
    78       { "help", no_argument, 0, 'h' },
    79       {NULL,0,0,0}
    80    };
    81    int option_index = 0;
    82    int c = 0;
    83    int i;
    84    const char *str;
    85 
    86    /* Iterate over options. */
    87    while ((c = getopt_long( argc, argv,
    88                "vqh",
    89                long_options, &option_index)) != -1) {
    90 
    91       /* Handle options. */
    92       switch (c) {
    93          case 0:
    94             str = long_options[option_index].name;
    95             if (strcmp(str,"noplatform")==0)
    96                run_platform = 0;
    97             else if (strcmp(str,"norwops")==0)
    98                run_rwops = 0;
    99             else if (strcmp(str,"nosurface")==0)
   100                run_surface = 0;
   101             else if (strcmp(str,"norender")==0)
   102                run_render = 0;
   103             else if (strcmp(str,"noaudio")==0)
   104                run_audio = 0;
   105             break;
   106 
   107          /* Manual. */
   108          case 'm':
   109             run_manual = 1;
   110             break;
   111 
   112          /* Verbosity. */
   113          case 'v':
   114             SDL_ATgeti( SDL_AT_VERBOSE, &i );
   115             SDL_ATseti( SDL_AT_VERBOSE, i+1 );
   116             break;
   117 
   118          /* Quiet. */
   119          case 'q':
   120             SDL_ATseti( SDL_AT_QUIET, 1 );
   121             break;
   122 
   123          /* Help. */
   124          case 'h':
   125             print_usage( argv[0] );
   126             exit(EXIT_SUCCESS);
   127       }
   128    }
   129 
   130 }
   131 
   132 
   133 /**
   134  * @brief Main entry point.
   135  */
   136 int main( int argc, char *argv[] )
   137 {
   138    int failed;
   139    int rev;
   140    SDL_version ver;
   141 
   142    /* Get options. */
   143    parse_options( argc, argv );
   144 
   145    /* Defaults. */
   146    failed = 0;
   147 
   148    /* Print some text if verbose. */
   149    SDL_GetVersion( &ver );
   150    rev = SDL_GetRevision();
   151    SDL_ATprintVerbose( 1, "Running tests with SDL %d.%d.%d revision %d\n",
   152          ver.major, ver.minor, ver.patch, rev );
   153 
   154    /* Automatic tests. */
   155    if (run_platform)
   156       failed += test_platform();
   157    if (run_rwops)
   158       failed += test_rwops();
   159    if (run_surface)
   160       failed += test_surface();
   161    if (run_render)
   162       failed += test_render();
   163    if (run_audio)
   164       failed += test_audio();
   165 
   166    /* Manual tests. */
   167    if (run_manual) {
   168    }
   169 
   170    /* Display more information if failed. */
   171    if (failed > 0) {
   172       SDL_ATprintErr( "Tests run with SDL %d.%d.%d revision %d\n",
   173             ver.major, ver.minor, ver.patch, rev );
   174       SDL_ATprintErr( "System is running %s and is %s endian\n",
   175             platform_getPlatform(),
   176 #ifdef SDL_LIL_ENDIAN
   177             "little"
   178 #else
   179             "big"
   180 #endif
   181             );
   182    }
   183 
   184    return failed;
   185 }
   186