186 lines
4.6 KiB
C
186 lines
4.6 KiB
C
|
/*
|
||
|
* SDL test suite framework code.
|
||
|
*
|
||
|
* Written by Edgar Simo "bobbens"
|
||
|
*
|
||
|
* Released under Public Domain.
|
||
|
*/
|
||
|
|
||
|
#include "SDL.h"
|
||
|
#include "SDL_at.h"
|
||
|
|
||
|
#include "platform/platform.h"
|
||
|
#include "rwops/rwops.h"
|
||
|
#include "rect/rect.h"
|
||
|
#include "surface/surface.h"
|
||
|
#include "render/render.h"
|
||
|
#include "audio/audio.h"
|
||
|
|
||
|
#if defined(WIN32)
|
||
|
#define NO_GETOPT
|
||
|
#endif
|
||
|
#if defined(__QNXNTO__)
|
||
|
#define NO_GETOPT_LONG 1
|
||
|
#endif /* __QNXNTO__ */
|
||
|
|
||
|
#include <stdio.h> /* printf */
|
||
|
#include <stdlib.h> /* exit */
|
||
|
#ifndef NO_GETOPT
|
||
|
#include <unistd.h> /* getopt */
|
||
|
#if !defined(NO_GETOPT_LONG)
|
||
|
#include <getopt.h> /* getopt_long */
|
||
|
#endif /* !NO_GETOPT_LONG */
|
||
|
#endif /* !NO_GETOPT */
|
||
|
|
||
|
|
||
|
/*
|
||
|
* Tests to run.
|
||
|
*/
|
||
|
static int run_manual = 0; /**< Run manual tests. */
|
||
|
/* Manual. */
|
||
|
/* Automatic. */
|
||
|
static int run_platform = 1; /**< Run platform tests. */
|
||
|
static int run_rwops = 1; /**< Run RWops tests. */
|
||
|
static int run_rect = 1; /**< Run rect tests. */
|
||
|
static int run_surface = 1; /**< Run surface tests. */
|
||
|
static int run_render = 1; /**< Run render tests. */
|
||
|
static int run_audio = 1; /**< Run audio tests. */
|
||
|
|
||
|
/*
|
||
|
* Prototypes.
|
||
|
*/
|
||
|
static void print_usage( const char *name );
|
||
|
static void parse_options( int argc, char *argv[] );
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @brief Displays program usage.
|
||
|
*/
|
||
|
static void print_usage( const char *name )
|
||
|
{
|
||
|
printf("Usage: %s [OPTIONS]\n", name);
|
||
|
printf("Options are:\n");
|
||
|
printf(" -m, --manual enables tests that require user interaction\n");
|
||
|
printf(" --noplatform do not run the platform tests\n");
|
||
|
printf(" --norwops do not run the rwops tests\n");
|
||
|
printf(" --norect do not run the rect tests\n");
|
||
|
printf(" --nosurface do not run the surface tests\n");
|
||
|
printf(" --norender do not run the render tests\n");
|
||
|
printf(" --noaudio do not run the audio tests\n");
|
||
|
printf(" -v, --verbose increases verbosity level by 1 for each -v\n");
|
||
|
printf(" -q, --quiet only displays errors\n");
|
||
|
printf(" -h, --help display this message and exit\n");
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Handles the options.
|
||
|
*/
|
||
|
static void parse_options( int argc, char *argv[] )
|
||
|
{
|
||
|
int i;
|
||
|
|
||
|
for (i = 1; i < argc; ++i) {
|
||
|
const char *arg = argv[i];
|
||
|
if (SDL_strcmp(arg, "-m") == 0 || SDL_strcmp(arg, "--manual") == 0) {
|
||
|
run_manual = 1;
|
||
|
continue;
|
||
|
}
|
||
|
if (SDL_strcmp(arg, "-v") == 0 || SDL_strcmp(arg, "--verbose") == 0) {
|
||
|
int level;
|
||
|
SDL_ATgeti( SDL_AT_VERBOSE, &level );
|
||
|
SDL_ATseti( SDL_AT_VERBOSE, level+1 );
|
||
|
continue;
|
||
|
}
|
||
|
if (SDL_strcmp(arg, "-q") == 0 || SDL_strcmp(arg, "--quiet") == 0) {
|
||
|
SDL_ATseti( SDL_AT_QUIET, 1 );
|
||
|
SDL_setenv("SDL_ASSERT", "abort", 0);
|
||
|
continue;
|
||
|
}
|
||
|
if (SDL_strcmp(arg, "--noplatform") == 0) {
|
||
|
run_platform = 0;
|
||
|
continue;
|
||
|
}
|
||
|
if (SDL_strcmp(arg, "--norwops") == 0) {
|
||
|
run_rwops = 0;
|
||
|
continue;
|
||
|
}
|
||
|
if (SDL_strcmp(arg, "--norect") == 0) {
|
||
|
run_rect = 0;
|
||
|
continue;
|
||
|
}
|
||
|
if (SDL_strcmp(arg, "--nosurface") == 0) {
|
||
|
run_surface = 0;
|
||
|
continue;
|
||
|
}
|
||
|
if (SDL_strcmp(arg, "--norender") == 0) {
|
||
|
run_render = 0;
|
||
|
continue;
|
||
|
}
|
||
|
if (SDL_strcmp(arg, "--noaudio") == 0) {
|
||
|
run_audio = 0;
|
||
|
continue;
|
||
|
}
|
||
|
|
||
|
/* Print help and exit! */
|
||
|
print_usage( argv[0] );
|
||
|
exit(EXIT_FAILURE);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @brief Main entry point.
|
||
|
*/
|
||
|
int main( int argc, char *argv[] )
|
||
|
{
|
||
|
int failed;
|
||
|
const char *rev;
|
||
|
SDL_version ver;
|
||
|
|
||
|
/* Get options. */
|
||
|
parse_options( argc, argv );
|
||
|
|
||
|
/* Defaults. */
|
||
|
failed = 0;
|
||
|
|
||
|
/* Print some text if verbose. */
|
||
|
SDL_GetVersion( &ver );
|
||
|
rev = SDL_GetRevision();
|
||
|
SDL_ATprintVerbose( 1, "Running tests with SDL %d.%d.%d revision %s\n",
|
||
|
ver.major, ver.minor, ver.patch, rev );
|
||
|
|
||
|
/* Automatic tests. */
|
||
|
if (run_platform)
|
||
|
failed += test_platform();
|
||
|
if (run_rwops)
|
||
|
failed += test_rwops();
|
||
|
if (run_rect)
|
||
|
failed += test_rect();
|
||
|
if (run_surface)
|
||
|
failed += test_surface();
|
||
|
if (run_render)
|
||
|
failed += test_render();
|
||
|
if (run_audio)
|
||
|
failed += test_audio();
|
||
|
|
||
|
/* Manual tests. */
|
||
|
if (run_manual) {
|
||
|
}
|
||
|
|
||
|
/* Display more information if failed. */
|
||
|
if (failed > 0) {
|
||
|
SDL_ATprintErr( "Tests run with SDL %d.%d.%d revision %d\n",
|
||
|
ver.major, ver.minor, ver.patch, rev );
|
||
|
SDL_ATprintErr( "System is running %s and is %s endian\n",
|
||
|
SDL_GetPlatform(),
|
||
|
#if SDL_BYTEORDER == SDL_LIL_ENDIAN
|
||
|
"little"
|
||
|
#else
|
||
|
"big"
|
||
|
#endif
|
||
|
);
|
||
|
}
|
||
|
|
||
|
return failed;
|
||
|
}
|
||
|
|