diff test/automated/rwops/rwops.c @ 3259:22ac66da0765

Merged Edgar's code changes from Google Summer of Code 2009
author Sam Lantinga <slouken@libsdl.org>
date Mon, 07 Sep 2009 05:06:34 +0000
parents
children c32c53fca10d
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/automated/rwops/rwops.c	Mon Sep 07 05:06:34 2009 +0000
@@ -0,0 +1,271 @@
+/**
+ * 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",
+            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();
+}