view test/automated/rwops/rwops.c @ 4425:a3e71b957215

Fixed bug #961 Kalle Olavi Niemitalo 2010-02-28 09:15:50 PST It seems the SDLK_LMETA and SDLK_RMETA constants have been removed from SDL 1.3. I grepped for them in the SDL source tree and these were the only hits: ./include/SDL_compat.h:230:#define SDLK_LSUPER SDLK_LMETA ./include/SDL_compat.h:231:#define SDLK_RSUPER SDLK_RMETA ./src/video/bwindow/SDL_BWin.h:194: keymap[0x66] = SDLK_LMETA; ./src/video/bwindow/SDL_BWin.h:195: keymap[0x67] = SDLK_RMETA; I don't know how compatible SDL 1.3 is supposed to be with applications designed for SDL 1.2. However, as you can see, SDL itself is still trying to use the removed constants, and that is clearly a bug. Because SDL_compat.h defines KMOD_LMETA as KMOD_LGUI, I suppose it should also define SDLK_LMETA as SDLK_LGUI, and SDLK_RMETA likewise.
author Sam Lantinga <slouken@libsdl.org>
date Tue, 09 Mar 2010 06:07:48 +0000
parents 78db4f7ae2f3
children 947201caa46e
line wrap: on
line source

/**
 * Automated SDL_RWops test.
 *
 * Written by Edgar Simo "bobbens"
 *
 * Released under Public Domain.
 */


#include "SDL.h"
#include "../SDL_at.h"


#define RWOPS_READ      "rwops/read"
#define RWOPS_WRITE     "rwops/write"

static const char hello_world[] = "Hello World!";


/**
 * @brief Makes sure parameters work properly.
 */
static void rwops_testParam (void)
{
   SDL_RWops *rwops;

   /* Begin testcase. */
   SDL_ATbegin( "RWops Parameters" );

   /* These should all fail. */
   rwops = SDL_RWFromFile(NULL, NULL);
   if (SDL_ATassert( "SDL_RWFromFile(NULL, NULL) worked", rwops == NULL ))
      return;
   rwops = SDL_RWFromFile(NULL, "ab+");
   if (SDL_ATassert( "SDL_RWFromFile(NULL, \"ab+\") worked", rwops == NULL ))
      return;
   rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj");
   if (SDL_ATassert( "SDL_RWFromFile(NULL, \"sldfkjsldkfj\") worked", rwops == NULL ))
      return;
   rwops = SDL_RWFromFile("something", "");
   if (SDL_ATassert( "SDL_RWFromFile(\"something\", \"\") worked", rwops == NULL ))
      return;
   rwops = SDL_RWFromFile("something", NULL);
   if (SDL_ATassert( "SDL_RWFromFile(\"something\", NULL) worked", rwops == NULL ))
      return;


   /* End testcase. */
   SDL_ATend();
}


/**
 * @brief Does a generic rwops test.
 *
 * RWops should have "Hello World!" in it already if write is disabled.
 *
 *    @param write Test writing also.
 *    @return 1 if an assert is failed.
 */
static int rwops_testGeneric( SDL_RWops *rw, int write )
{
   char buf[sizeof(hello_world)];
   int i;

   /* Set to start. */
   i = SDL_RWseek( rw, 0, RW_SEEK_SET );
   if (SDL_ATvassert( i == 0,
            "Seeking with SDL_RWseek (RW_SEEK_SET): got %d, expected %d",
            i, 0 ))
      return 1;

   /* Test write. */
   i = SDL_RWwrite( rw, hello_world, sizeof(hello_world)-1, 1 );
   if (write) {
      if (SDL_ATassert( "Writing with SDL_RWwrite (failed to write)", i == 1 ))
         return 1;
   }
   else {
      if (SDL_ATassert( "Writing with SDL_RWwrite (wrote when shouldn't have)", i <= 0 ))
         return 1;
   }

   /* Test seek. */
   i = SDL_RWseek( rw, 6, RW_SEEK_SET );
   if (SDL_ATvassert( i == 6,
            "Seeking with SDL_RWseek (RW_SEEK_SET): got %d, expected %d",
            i, 0 ))
       return 1;

   /* Test seek. */
   i = SDL_RWseek( rw, 0, RW_SEEK_SET );
   if (SDL_ATvassert( i == 0,
            "Seeking with SDL_RWseek (RW_SEEK_SET): got %d, expected %d",
            i, 0 ))
      return 1;

   /* Test read. */
   i = SDL_RWread( rw, buf, 1, sizeof(hello_world)-1 );
   if (SDL_ATassert( "Reading with SDL_RWread", i == sizeof(hello_world)-1 ))
      return 1;
   if (SDL_ATassert( "Memory read does not match memory written",
            SDL_memcmp( buf, hello_world, sizeof(hello_world)-1 ) == 0 ))
      return 1;

   /* More seek tests. */
   i = SDL_RWseek( rw, -4, RW_SEEK_CUR );
   if (SDL_ATvassert( i == sizeof(hello_world)-5,
            "Seeking with SDL_RWseek (RW_SEEK_CUR): got %d, expected %d",
            i, sizeof(hello_world)-5 ))
      return 1;
   i = SDL_RWseek( rw, -1, RW_SEEK_END );
   if (SDL_ATvassert( i == sizeof(hello_world)-2,
            "Seeking with SDL_RWseek (RW_SEEK_END): got %d, expected %d",
            i, sizeof(hello_world)-2 ))
      return 1;

   return 0;
}


/**
 * @brief Tests opening from memory.
 */
static void rwops_testMem (void)
{
   char mem[sizeof(hello_world)];
   SDL_RWops *rw;

   /* Begin testcase. */
   SDL_ATbegin( "SDL_RWFromMem" );

   /* Open. */
   rw = SDL_RWFromMem( mem, sizeof(hello_world)-1 );
   if (SDL_ATassert( "Opening memory with SDL_RWFromMem", rw != NULL ))
      return;

   /* Run generic tests. */
   if (rwops_testGeneric( rw, 1 ))
      return;

   /* Close. */
   SDL_FreeRW( rw );

   /* End testcase. */
   SDL_ATend();
}


static const char const_mem[] = "Hello World!";
/**
 * @brief Tests opening from memory.
 */
static void rwops_testConstMem (void)
{
   SDL_RWops *rw;

   /* Begin testcase. */
   SDL_ATbegin( "SDL_RWFromConstMem" );

   /* Open. */
   rw = SDL_RWFromConstMem( const_mem, sizeof(const_mem)-1 );
   if (SDL_ATassert( "Opening memory with SDL_RWFromConstMem", rw != NULL ))
      return;

   /* Run generic tests. */
   if (rwops_testGeneric( rw, 0 ))
      return;

   /* Close. */
   SDL_FreeRW( rw );

   /* End testcase. */
   SDL_ATend();
}


/**
 * @brief Tests opening from memory.
 */
static void rwops_testFile (void)
{
   SDL_RWops *rw;

   /* Begin testcase. */
   SDL_ATbegin( "SDL_RWFromFile" );

   /* Read test. */
   rw = SDL_RWFromFile( RWOPS_READ, "r" );
   if (SDL_ATassert( "Opening memory with SDL_RWFromFile '"RWOPS_READ"'", rw != NULL ))
      return;
   if (rwops_testGeneric( rw, 0 ))
      return;
   SDL_FreeRW( rw );

   /* Write test. */
   rw = SDL_RWFromFile( RWOPS_WRITE, "w+" );
   if (SDL_ATassert( "Opening memory with SDL_RWFromFile '"RWOPS_WRITE"'", rw != NULL ))
      return;
   if (rwops_testGeneric( rw, 1 ))
      return;
   SDL_FreeRW( rw );

   /* End testcase. */
   SDL_ATend();
}


/**
 * @brief Tests opening from memory.
 */
static void rwops_testFP (void)
{
#ifdef HAVE_STDIO_H
   FILE *fp;
   SDL_RWops *rw;

   /* Begin testcase. */
   SDL_ATbegin( "SDL_RWFromFP" );

   /* Run read tests. */
   fp = fopen( RWOPS_READ, "r" );
   if (SDL_ATassert( "Failed to open file '"RWOPS_READ"'", fp != NULL))
      return;
   rw = SDL_RWFromFP( fp, 1 );
   if (SDL_ATassert( "Opening memory with SDL_RWFromFP", rw != NULL ))
      return;
   if (rwops_testGeneric( rw, 0 ))
      return;
   SDL_FreeRW( rw );

   /* Run write tests. */
   fp = fopen( RWOPS_WRITE, "w+" );
   if (SDL_ATassert( "Failed to open file '"RWOPS_WRITE"'", fp != NULL))
      return;
   rw = SDL_RWFromFP( fp, 1 );
   if (SDL_ATassert( "Opening memory with SDL_RWFromFP", rw != NULL ))
      return;
   if (rwops_testGeneric( rw, 1 ))
      return;
   SDL_FreeRW( rw );

   /* End testcase. */
   SDL_ATend();
#endif /* HAVE_STDIO_H */
}


/**
 * @brief Entry point.
 */
#ifdef TEST_STANDALONE
int main( int argc, const char *argv[] )
{
   (void) argc;
   (void) argv;
#else /* TEST_STANDALONE */
int test_rwops (void)
{
#endif /* TEST_STANDALONE */

   SDL_ATinit( "SDL_RWops" );

   rwops_testParam();
   rwops_testMem();
   rwops_testConstMem();
   rwops_testFile();
   rwops_testFP();

   return SDL_ATfinish();
}