test/testautomation_rwops.c
author Andreas Schiffler <aschiffler@ferzkopp.net>
Tue, 12 Mar 2013 09:10:37 -0700
changeset 6996 bc0fd5bced25
parent 6821 f36771112651
child 6999 681820ca0e78
permissions -rw-r--r--
Fix bug 1560 - SDL_RWFromConstMem write operation returns -1 but should return 0.
aschiffler@6781
     1
aschiffler@6760
     2
/**
aschiffler@6760
     3
 * Automated SDL_RWops test.
aschiffler@6760
     4
 *
aschiffler@6760
     5
 * Original code written by Edgar Simo "bobbens"
aschiffler@6760
     6
 * Ported by Markus Kauppila (markus.kauppila@gmail.com)
aschiffler@6819
     7
 * Updated and extended for SDL_test by aschiffler at ferzkopp dot net
aschiffler@6760
     8
 *
aschiffler@6760
     9
 * Released under Public Domain.
aschiffler@6760
    10
 */
aschiffler@6760
    11
aschiffler@6760
    12
/* quiet windows compiler warnings */
aschiffler@6760
    13
#define _CRT_SECURE_NO_WARNINGS
aschiffler@6760
    14
aschiffler@6760
    15
#include <stdio.h>
aschiffler@6760
    16
aschiffler@6760
    17
#include "SDL.h"
aschiffler@6760
    18
#include "SDL_test.h"
aschiffler@6760
    19
aschiffler@6760
    20
/* ================= Test Case Implementation ================== */
aschiffler@6760
    21
aschiffler@6760
    22
const char* RWopsReadTestFilename = "rwops_read";
aschiffler@6760
    23
const char* RWopsWriteTestFilename = "rwops_write";
aschiffler@6760
    24
aschiffler@6760
    25
static const char RWopsHelloWorldTestString[] = "Hello World!";
aschiffler@6760
    26
static const char RWopsHelloWorldCompString[] = "Hello World!";
aschiffler@6760
    27
aschiffler@6760
    28
/* Fixture */
aschiffler@6760
    29
aschiffler@6760
    30
void
aschiffler@6760
    31
RWopsSetUp(void *arg)
aschiffler@6760
    32
{
aschiffler@6760
    33
	int fileLen = SDL_strlen(RWopsHelloWorldTestString);
aschiffler@6760
    34
	FILE *handle;
aschiffler@6760
    35
	int writtenLen;
aschiffler@6760
    36
	int result;
aschiffler@6760
    37
aschiffler@6760
    38
	/* Clean up from previous runs (if any); ignore errors */
aschiffler@6760
    39
	remove(RWopsReadTestFilename);
aschiffler@6760
    40
	remove(RWopsWriteTestFilename);
aschiffler@6760
    41
aschiffler@6760
    42
	/* Create a test file */
aschiffler@6760
    43
	handle = fopen(RWopsReadTestFilename, "w");
aschiffler@6760
    44
	SDLTest_AssertCheck(handle != NULL, "Verify creation of file '%s' returned non NULL handle", RWopsReadTestFilename);
aschiffler@6819
    45
        if (handle == NULL) return;
aschiffler@6760
    46
aschiffler@6760
    47
	/* Write some known test into it */
aschiffler@6760
    48
	writtenLen = (int)fwrite(RWopsHelloWorldTestString, 1, fileLen, handle);
aschiffler@6760
    49
	SDLTest_AssertCheck(fileLen == writtenLen, "Verify number of written bytes, expected %i, got %i", fileLen, writtenLen);
aschiffler@6760
    50
	result = fclose(handle);
aschiffler@6760
    51
	SDLTest_AssertCheck(result == 0, "Verify result from fclose, expected 0, got %i", result);
aschiffler@6760
    52
aschiffler@6760
    53
	SDLTest_AssertPass("Creation of test file completed");
aschiffler@6760
    54
}
aschiffler@6760
    55
aschiffler@6760
    56
void
aschiffler@6760
    57
RWopsTearDown(void *arg)
aschiffler@6760
    58
{
aschiffler@6760
    59
	int result;
aschiffler@6760
    60
	
aschiffler@6760
    61
	/* Remove the created files to clean up; ignore errors for write filename */
aschiffler@6760
    62
	result = remove(RWopsReadTestFilename);
aschiffler@6760
    63
	SDLTest_AssertCheck(result == 0, "Verify result from remove(%s), expected 0, got %i", RWopsReadTestFilename, result);
aschiffler@6760
    64
	remove(RWopsWriteTestFilename);
aschiffler@6760
    65
aschiffler@6760
    66
	SDLTest_AssertPass("Cleanup of test files completed");
aschiffler@6760
    67
}
aschiffler@6760
    68
aschiffler@6760
    69
/**
aschiffler@6760
    70
 * @brief Makes sure parameters work properly. Local helper function.
aschiffler@6760
    71
 *
aschiffler@6760
    72
 * \sa
aschiffler@6760
    73
 * http://wiki.libsdl.org/moin.cgi/SDL_RWseek
aschiffler@6760
    74
 * http://wiki.libsdl.org/moin.cgi/SDL_RWread
aschiffler@6760
    75
 */
aschiffler@6760
    76
void 
aschiffler@6760
    77
_testGenericRWopsValidations(SDL_RWops *rw, int write)
aschiffler@6760
    78
{
aschiffler@6760
    79
   char buf[sizeof(RWopsHelloWorldTestString)];
aschiffler@6779
    80
   Sint64 i;
aschiffler@6996
    81
   size_t s;
aschiffler@6760
    82
   int seekPos = SDLTest_RandomIntegerInRange(4, 8);
aschiffler@6760
    83
aschiffler@6760
    84
   /* Clear buffer */
aschiffler@6760
    85
   SDL_zero(buf);
aschiffler@6760
    86
aschiffler@6760
    87
   /* Set to start. */
aschiffler@6760
    88
   i = SDL_RWseek(rw, 0, RW_SEEK_SET );
aschiffler@6760
    89
   SDLTest_AssertPass("Call to SDL_RWseek succeeded");
aschiffler@6779
    90
   SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (RW_SEEK_SET), expected 0, got %i", i);
aschiffler@6760
    91
aschiffler@6760
    92
   /* Test write. */
aschiffler@6996
    93
   s = SDL_RWwrite(rw, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1, 1);
aschiffler@6760
    94
   SDLTest_AssertPass("Call to SDL_RWwrite succeeded");
aschiffler@6760
    95
   if (write) {
aschiffler@6996
    96
		SDLTest_AssertCheck(s == (size_t)1, "Verify result of writing one byte with SDL_RWwrite, expected 1, got %i", s);
aschiffler@6760
    97
   }
aschiffler@6760
    98
   else {
aschiffler@6996
    99
		SDLTest_AssertCheck(s == (size_t)0, "Verify result of writing with SDL_RWwrite, expected: 0, got %i", s);
aschiffler@6760
   100
   }
aschiffler@6760
   101
aschiffler@6760
   102
   /* Test seek to random position */
aschiffler@6760
   103
   i = SDL_RWseek( rw, seekPos, RW_SEEK_SET );
aschiffler@6760
   104
   SDLTest_AssertPass("Call to SDL_RWseek succeeded");
aschiffler@6779
   105
   SDLTest_AssertCheck(i == (Sint64)seekPos, "Verify seek to %i with SDL_RWseek (RW_SEEK_SET), expected %i, got %i", seekPos, seekPos, i);
aschiffler@6760
   106
aschiffler@6760
   107
   /* Test seek back to start */
aschiffler@6760
   108
   i = SDL_RWseek(rw, 0, RW_SEEK_SET );
aschiffler@6760
   109
   SDLTest_AssertPass("Call to SDL_RWseek succeeded");
aschiffler@6779
   110
   SDLTest_AssertCheck(i == (Sint64)0, "Verify seek to 0 with SDL_RWseek (RW_SEEK_SET), expected 0, got %i", i);
aschiffler@6760
   111
aschiffler@6760
   112
   /* Test read */
aschiffler@6996
   113
   s = SDL_RWread( rw, buf, 1, sizeof(RWopsHelloWorldTestString)-1 );
aschiffler@6760
   114
   SDLTest_AssertPass("Call to SDL_RWread succeeded");
aschiffler@6760
   115
   SDLTest_AssertCheck(
aschiffler@6996
   116
	   s == (size_t)(sizeof(RWopsHelloWorldTestString)-1), 
aschiffler@6760
   117
	   "Verify result from SDL_RWread, expected %i, got %i",
aschiffler@6760
   118
	   sizeof(RWopsHelloWorldTestString)-1,
aschiffler@6996
   119
	   s);
aschiffler@6760
   120
   SDLTest_AssertCheck(
aschiffler@6760
   121
	   SDL_memcmp(buf, RWopsHelloWorldTestString, sizeof(RWopsHelloWorldTestString)-1 ) == 0, 
aschiffler@6760
   122
	   "Verify read bytes match expected string, expected '%s', got '%s'", RWopsHelloWorldTestString, buf);
aschiffler@6760
   123
aschiffler@6760
   124
   /* More seek tests. */
aschiffler@6760
   125
   i = SDL_RWseek( rw, -4, RW_SEEK_CUR );
aschiffler@6760
   126
   SDLTest_AssertPass("Call to SDL_RWseek(...,-4,RW_SEEK_CUR) succeeded");
aschiffler@6760
   127
   SDLTest_AssertCheck(
aschiffler@6779
   128
	   i == (Sint64)(sizeof(RWopsHelloWorldTestString)-5), 
aschiffler@6760
   129
	   "Verify seek to -4 with SDL_RWseek (RW_SEEK_CUR), expected %i, got %i",
aschiffler@6760
   130
	   sizeof(RWopsHelloWorldTestString)-5,
aschiffler@6760
   131
	   i);
aschiffler@6760
   132
aschiffler@6760
   133
   i = SDL_RWseek( rw, -1, RW_SEEK_END );
aschiffler@6760
   134
   SDLTest_AssertPass("Call to SDL_RWseek(...,-1,RW_SEEK_END) succeeded");
aschiffler@6760
   135
   SDLTest_AssertCheck(
aschiffler@6779
   136
	   i == (Sint64)(sizeof(RWopsHelloWorldTestString)-2), 
aschiffler@6760
   137
	   "Verify seek to -1 with SDL_RWseek (RW_SEEK_END), expected %i, got %i",
aschiffler@6760
   138
	   sizeof(RWopsHelloWorldTestString)-2,
aschiffler@6760
   139
	   i);
aschiffler@6760
   140
}
aschiffler@6760
   141
aschiffler@6760
   142
/*!
aschiffler@6760
   143
 * Negative test for SDL_RWFromFile parameters
aschiffler@6760
   144
 *
aschiffler@6760
   145
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile
aschiffler@6760
   146
 *
aschiffler@6760
   147
 */
aschiffler@6760
   148
int
aschiffler@6760
   149
rwops_testParamNegative (void)
aschiffler@6760
   150
{
aschiffler@6760
   151
   SDL_RWops *rwops;
aschiffler@6760
   152
aschiffler@6760
   153
   /* These should all fail. */
aschiffler@6760
   154
   rwops = SDL_RWFromFile(NULL, NULL);
aschiffler@6760
   155
   SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, NULL) succeeded");
aschiffler@6760
   156
   SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, NULL) returns NULL");
aschiffler@6760
   157
aschiffler@6760
   158
   rwops = SDL_RWFromFile(NULL, "ab+");
aschiffler@6760
   159
   SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, \"ab+\") succeeded");
aschiffler@6760
   160
   SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, \"ab+\") returns NULL");
aschiffler@6760
   161
aschiffler@6760
   162
   rwops = SDL_RWFromFile(NULL, "sldfkjsldkfj");
aschiffler@6760
   163
   SDLTest_AssertPass("Call to SDL_RWFromFile(NULL, \"sldfkjsldkfj\") succeeded");
aschiffler@6760
   164
   SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(NULL, \"sldfkjsldkfj\") returns NULL");
aschiffler@6760
   165
aschiffler@6760
   166
   rwops = SDL_RWFromFile("something", "");
aschiffler@6760
   167
   SDLTest_AssertPass("Call to SDL_RWFromFile(\"something\", \"\") succeeded");
aschiffler@6760
   168
   SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(\"something\", \"\") returns NULL");
aschiffler@6760
   169
aschiffler@6760
   170
   rwops = SDL_RWFromFile("something", NULL);
aschiffler@6760
   171
   SDLTest_AssertPass("Call to SDL_RWFromFile(\"something\", NULL) succeeded");
aschiffler@6760
   172
   SDLTest_AssertCheck(rwops == NULL, "Verify SDL_RWFromFile(\"something\", NULL) returns NULL");
aschiffler@6760
   173
aschiffler@6760
   174
   return TEST_COMPLETED;
aschiffler@6760
   175
}
aschiffler@6760
   176
aschiffler@6760
   177
/**
aschiffler@6760
   178
 * @brief Tests opening from memory.
aschiffler@6760
   179
 *
aschiffler@6760
   180
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_RWFromMem
aschiffler@6819
   181
 * http://wiki.libsdl.org/moin.cgi/SDL_RWClose
aschiffler@6760
   182
 */
aschiffler@6760
   183
int
aschiffler@6760
   184
rwops_testMem (void)
aschiffler@6760
   185
{
aschiffler@6760
   186
   char mem[sizeof(RWopsHelloWorldTestString)];
aschiffler@6760
   187
   SDL_RWops *rw;
aschiffler@6760
   188
aschiffler@6760
   189
   /* Clear buffer */
aschiffler@6760
   190
   SDL_zero(mem);
aschiffler@6760
   191
aschiffler@6760
   192
   /* Open */
aschiffler@6760
   193
   rw = SDL_RWFromMem(mem, sizeof(RWopsHelloWorldTestString)-1);
aschiffler@6760
   194
   SDLTest_AssertPass("Call to SDL_RWFromMem() succeeded");
aschiffler@6760
   195
   SDLTest_AssertCheck(rw != NULL, "Verify opening memory with SDL_RWFromMem does not return NULL");
aschiffler@6760
   196
aschiffler@6760
   197
   /* Bail out if NULL */
aschiffler@6760
   198
   if (rw == NULL) return TEST_ABORTED;
aschiffler@6760
   199
aschiffler@6760
   200
   /* Run generic tests */
aschiffler@6760
   201
   _testGenericRWopsValidations(rw, 1);
aschiffler@6760
   202
aschiffler@6760
   203
   /* Close */
aschiffler@6760
   204
   SDL_RWclose(rw);
aschiffler@6760
   205
   SDLTest_AssertPass("Call to SDL_RWclose() succeeded");
aschiffler@6760
   206
aschiffler@6760
   207
   return TEST_COMPLETED;
aschiffler@6760
   208
}
aschiffler@6760
   209
aschiffler@6760
   210
aschiffler@6760
   211
/**
aschiffler@6760
   212
 * @brief Tests opening from memory.
aschiffler@6760
   213
 *
aschiffler@6760
   214
 * \sa
aschiffler@6760
   215
 * http://wiki.libsdl.org/moin.cgi/SDL_RWFromConstMem
aschiffler@6819
   216
 * http://wiki.libsdl.org/moin.cgi/SDL_RWClose
aschiffler@6760
   217
 */
aschiffler@6760
   218
int 
aschiffler@6760
   219
rwops_testConstMem (void)
aschiffler@6760
   220
{
aschiffler@6760
   221
   SDL_RWops *rw;
aschiffler@6760
   222
aschiffler@6760
   223
   /* Open handle */
aschiffler@6760
   224
   rw = SDL_RWFromConstMem( RWopsHelloWorldCompString, sizeof(RWopsHelloWorldCompString)-1 );
aschiffler@6760
   225
   SDLTest_AssertPass("Call to SDL_RWFromConstMem() succeeded");
aschiffler@6760
   226
   SDLTest_AssertCheck(rw != NULL, "Verify opening memory with SDL_RWFromConstMem does not return NULL");
aschiffler@6760
   227
aschiffler@6760
   228
   /* Bail out if NULL */
aschiffler@6760
   229
   if (rw == NULL) return TEST_ABORTED;
aschiffler@6760
   230
aschiffler@6760
   231
   /* Run generic tests */
aschiffler@6760
   232
   _testGenericRWopsValidations( rw, 0 );
aschiffler@6760
   233
aschiffler@6760
   234
   /* Close handle */
aschiffler@6760
   235
   SDL_RWclose(rw);
aschiffler@6760
   236
   SDLTest_AssertPass("Call to SDL_RWclose() succeeded");
aschiffler@6760
   237
aschiffler@6760
   238
  return TEST_COMPLETED;
aschiffler@6760
   239
}
aschiffler@6760
   240
aschiffler@6760
   241
aschiffler@6760
   242
/**
aschiffler@6760
   243
 * @brief Tests reading from file.
aschiffler@6760
   244
 *
aschiffler@6760
   245
 * \sa
aschiffler@6760
   246
 * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile
aschiffler@6819
   247
 * http://wiki.libsdl.org/moin.cgi/SDL_RWClose
aschiffler@6760
   248
 */
aschiffler@6760
   249
int
aschiffler@6760
   250
rwops_testFileRead(void)
aschiffler@6760
   251
{
aschiffler@6760
   252
   SDL_RWops *rw;
aschiffler@6760
   253
aschiffler@6760
   254
   /* Read test. */
aschiffler@6760
   255
   rw = SDL_RWFromFile(RWopsReadTestFilename, "r");
aschiffler@6760
   256
   SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"r\") succeeded");
aschiffler@6760
   257
   SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in read mode does not return NULL");
aschiffler@6760
   258
aschiffler@6760
   259
   // Bail out if NULL
aschiffler@6760
   260
   if (rw == NULL) return TEST_ABORTED;
aschiffler@6760
   261
aschiffler@6760
   262
   /* Run generic tests */
aschiffler@6760
   263
   _testGenericRWopsValidations( rw, 0 );
aschiffler@6760
   264
aschiffler@6760
   265
   /* Close handle */
aschiffler@6760
   266
   SDL_RWclose(rw);
aschiffler@6760
   267
   SDLTest_AssertPass("Call to SDL_RWclose() succeeded");
aschiffler@6760
   268
aschiffler@6760
   269
   return TEST_COMPLETED;
aschiffler@6760
   270
}
aschiffler@6760
   271
aschiffler@6760
   272
/**
aschiffler@6819
   273
 * @brief Tests writing from file.
aschiffler@6760
   274
 *
aschiffler@6760
   275
 * \sa
aschiffler@6760
   276
 * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile
aschiffler@6819
   277
 * http://wiki.libsdl.org/moin.cgi/SDL_RWClose
aschiffler@6760
   278
 */
aschiffler@6760
   279
int
aschiffler@6760
   280
rwops_testFileWrite(void)
aschiffler@6760
   281
{
aschiffler@6760
   282
   SDL_RWops *rw;
aschiffler@6760
   283
aschiffler@6760
   284
   /* Write test. */
aschiffler@6760
   285
   rw = SDL_RWFromFile(RWopsWriteTestFilename, "w+");
aschiffler@6760
   286
   SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"w+\") succeeded");
aschiffler@6760
   287
   SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in write mode does not return NULL");
aschiffler@6760
   288
aschiffler@6760
   289
   // Bail out if NULL
aschiffler@6760
   290
   if (rw == NULL) return TEST_ABORTED;
aschiffler@6760
   291
aschiffler@6760
   292
   /* Run generic tests */
aschiffler@6760
   293
   _testGenericRWopsValidations( rw, 1 );
aschiffler@6760
   294
aschiffler@6760
   295
   /* Close handle */
aschiffler@6760
   296
   SDL_RWclose(rw);
aschiffler@6760
   297
   SDLTest_AssertPass("Call to SDL_RWclose() succeeded");
aschiffler@6760
   298
aschiffler@6760
   299
   return TEST_COMPLETED;
aschiffler@6760
   300
}
aschiffler@6760
   301
aschiffler@6760
   302
aschiffler@6760
   303
/**
aschiffler@6760
   304
 * @brief Tests reading from file handle
aschiffler@6760
   305
 *
aschiffler@6760
   306
 * \sa
aschiffler@6760
   307
 * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFP
aschiffler@6819
   308
 * http://wiki.libsdl.org/moin.cgi/SDL_RWClose
aschiffler@6760
   309
 *
aschiffler@6760
   310
 */
aschiffler@6760
   311
int
aschiffler@6760
   312
rwops_testFPRead(void)
aschiffler@6760
   313
{
aschiffler@6760
   314
   FILE *fp;
aschiffler@6760
   315
   SDL_RWops *rw;
aschiffler@6760
   316
aschiffler@6760
   317
   /* Run read tests. */
aschiffler@6760
   318
   fp = fopen(RWopsReadTestFilename, "r");
aschiffler@6760
   319
   SDLTest_AssertCheck(fp != NULL, "Verify handle from opening file '%s' in read mode is not NULL", RWopsReadTestFilename);
aschiffler@6760
   320
aschiffler@6760
   321
   /* Bail out if NULL */
aschiffler@6760
   322
   if (fp == NULL) return TEST_ABORTED;
aschiffler@6760
   323
aschiffler@6760
   324
   /* Open */
aschiffler@6779
   325
   rw = SDL_RWFromFP( fp, SDL_TRUE );
aschiffler@6760
   326
   SDLTest_AssertPass("Call to SDL_RWFromFP() succeeded");
aschiffler@6760
   327
   SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFP in read mode does not return NULL");
aschiffler@6760
   328
aschiffler@6760
   329
   /* Bail out if NULL */
aschiffler@6781
   330
   if (rw == NULL) {
aschiffler@6781
   331
     fclose(fp);
aschiffler@6781
   332
     return TEST_ABORTED;
aschiffler@6781
   333
   }
aschiffler@6760
   334
aschiffler@6760
   335
   /* Run generic tests */
aschiffler@6760
   336
   _testGenericRWopsValidations( rw, 0 );
aschiffler@6760
   337
aschiffler@6814
   338
   /* Close handle - does fclose() */
aschiffler@6760
   339
   SDL_RWclose(rw);
aschiffler@6760
   340
   SDLTest_AssertPass("Call to SDL_RWclose() succeeded");
aschiffler@6760
   341
aschiffler@6760
   342
   return TEST_COMPLETED;
aschiffler@6760
   343
}
aschiffler@6760
   344
aschiffler@6760
   345
aschiffler@6760
   346
/**
aschiffler@6760
   347
 * @brief Tests writing to file handle
aschiffler@6760
   348
 *
aschiffler@6760
   349
 * \sa
aschiffler@6760
   350
 * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFP
aschiffler@6819
   351
 * http://wiki.libsdl.org/moin.cgi/SDL_RWClose
aschiffler@6760
   352
 *
aschiffler@6760
   353
 */
aschiffler@6760
   354
int
aschiffler@6760
   355
rwops_testFPWrite(void)
aschiffler@6760
   356
{
aschiffler@6760
   357
   FILE *fp;
aschiffler@6760
   358
   SDL_RWops *rw;
aschiffler@6760
   359
aschiffler@6760
   360
   /* Run write tests. */
aschiffler@6760
   361
   fp = fopen(RWopsWriteTestFilename, "w+");
aschiffler@6760
   362
   SDLTest_AssertCheck(fp != NULL, "Verify handle from opening file '%s' in write mode is not NULL", RWopsWriteTestFilename);
aschiffler@6760
   363
aschiffler@6760
   364
   /* Bail out if NULL */
aschiffler@6760
   365
   if (fp == NULL) return TEST_ABORTED;
aschiffler@6760
   366
aschiffler@6760
   367
   /* Open */
aschiffler@6779
   368
   rw = SDL_RWFromFP( fp, SDL_TRUE );
aschiffler@6760
   369
   SDLTest_AssertPass("Call to SDL_RWFromFP() succeeded");
aschiffler@6760
   370
   SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFP in write mode does not return NULL");
aschiffler@6760
   371
aschiffler@6760
   372
   /* Bail out if NULL */
aschiffler@6781
   373
   if (rw == NULL) {
aschiffler@6781
   374
     fclose(fp);
aschiffler@6781
   375
     return TEST_ABORTED;
aschiffler@6781
   376
   }
aschiffler@6760
   377
aschiffler@6760
   378
   /* Run generic tests */
aschiffler@6760
   379
   _testGenericRWopsValidations( rw, 1 );
aschiffler@6760
   380
aschiffler@6814
   381
   /* Close handle - does fclose() */
aschiffler@6760
   382
   SDL_RWclose(rw);
aschiffler@6760
   383
   SDLTest_AssertPass("Call to SDL_RWclose() succeeded");
aschiffler@6760
   384
aschiffler@6760
   385
   return TEST_COMPLETED;
aschiffler@6760
   386
}
aschiffler@6760
   387
aschiffler@6781
   388
/**
aschiffler@6781
   389
 * @brief Tests alloc and free RW context.
aschiffler@6781
   390
 *
aschiffler@6819
   391
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_AllocRW
aschiffler@6781
   392
 * \sa http://wiki.libsdl.org/moin.cgi/SDL_FreeRW
aschiffler@6781
   393
 */
aschiffler@6781
   394
int
aschiffler@6781
   395
rwops_testAllocFree (void)
aschiffler@6781
   396
{
aschiffler@6781
   397
   /* Allocate context */
aschiffler@6781
   398
   SDL_RWops *rw = SDL_AllocRW();
aschiffler@6781
   399
   SDLTest_AssertPass("Call to SDL_AllocRW() succeeded");
aschiffler@6781
   400
   SDLTest_AssertCheck(rw != NULL, "Validate result from SDL_AllocRW() is not NULL");
aschiffler@6781
   401
   if (rw==NULL) return TEST_ABORTED;
aschiffler@6781
   402
          
aschiffler@6781
   403
   /* Free context again */
aschiffler@6781
   404
   SDL_FreeRW(rw);
aschiffler@6781
   405
   SDLTest_AssertPass("Call to SDL_FreeRW() succeeded");
aschiffler@6781
   406
aschiffler@6781
   407
   return TEST_COMPLETED;
aschiffler@6781
   408
}
aschiffler@6781
   409
aschiffler@6819
   410
/**
aschiffler@6819
   411
 * @brief Tests writing and reading from file using endian aware functions.
aschiffler@6819
   412
 *
aschiffler@6819
   413
 * \sa
aschiffler@6819
   414
 * http://wiki.libsdl.org/moin.cgi/SDL_RWFromFile
aschiffler@6819
   415
 * http://wiki.libsdl.org/moin.cgi/SDL_RWClose
aschiffler@6819
   416
 * http://wiki.libsdl.org/moin.cgi/SDL_ReadBE16
aschiffler@6819
   417
 * http://wiki.libsdl.org/moin.cgi/SDL_WriteBE16
aschiffler@6819
   418
 */
aschiffler@6819
   419
int
aschiffler@6819
   420
rwops_testFileWriteReadEndian(void)
aschiffler@6819
   421
{
aschiffler@6819
   422
   SDL_RWops *rw;
aschiffler@6821
   423
   Sint64 result;
aschiffler@6819
   424
   int mode;
aschiffler@6819
   425
   size_t objectsWritten;
aschiffler@6819
   426
   Uint16 BE16value;
aschiffler@6819
   427
   Uint32 BE32value;
aschiffler@6819
   428
   Uint64 BE64value;
aschiffler@6819
   429
   Uint16 LE16value;
aschiffler@6819
   430
   Uint32 LE32value;
aschiffler@6819
   431
   Uint64 LE64value;
aschiffler@6819
   432
   Uint16 BE16test;
aschiffler@6819
   433
   Uint32 BE32test;
aschiffler@6819
   434
   Uint64 BE64test;
aschiffler@6819
   435
   Uint16 LE16test;
aschiffler@6819
   436
   Uint32 LE32test;
aschiffler@6819
   437
   Uint64 LE64test;
aschiffler@6819
   438
aschiffler@6819
   439
   for (mode = 0; mode < 3; mode++) {
aschiffler@6819
   440
   
aschiffler@6819
   441
     /* Create test data */
aschiffler@6819
   442
     switch (mode) {
aschiffler@6819
   443
       case 0:
aschiffler@6819
   444
        SDLTest_Log("All 0 values");
aschiffler@6819
   445
        BE16value = 0;
aschiffler@6819
   446
        BE32value = 0;
aschiffler@6819
   447
        BE64value = 0;
aschiffler@6819
   448
        LE16value = 0;
aschiffler@6819
   449
        LE32value = 0;
aschiffler@6819
   450
        LE64value = 0;
aschiffler@6819
   451
        break;
aschiffler@6819
   452
       case 1:
aschiffler@6819
   453
        SDLTest_Log("All 1 values");
aschiffler@6819
   454
        BE16value = 1;
aschiffler@6819
   455
        BE32value = 1;
aschiffler@6819
   456
        BE64value = 1;
aschiffler@6819
   457
        LE16value = 1;
aschiffler@6819
   458
        LE32value = 1;
aschiffler@6819
   459
        LE64value = 1;
aschiffler@6819
   460
        break;
aschiffler@6819
   461
       case 2:
aschiffler@6819
   462
        SDLTest_Log("Random values");
aschiffler@6819
   463
        BE16value = SDLTest_RandomUint16();
aschiffler@6819
   464
        BE32value = SDLTest_RandomUint32();
aschiffler@6819
   465
        BE64value = SDLTest_RandomUint64();
aschiffler@6819
   466
        LE16value = SDLTest_RandomUint16();
aschiffler@6819
   467
        LE32value = SDLTest_RandomUint32();
aschiffler@6819
   468
        LE64value = SDLTest_RandomUint64();
aschiffler@6819
   469
        break;
aschiffler@6819
   470
     }
aschiffler@6819
   471
   
aschiffler@6819
   472
     /* Write test. */
aschiffler@6819
   473
     rw = SDL_RWFromFile(RWopsWriteTestFilename, "w+");
aschiffler@6819
   474
     SDLTest_AssertPass("Call to SDL_RWFromFile(..,\"w+\")");
aschiffler@6819
   475
     SDLTest_AssertCheck(rw != NULL, "Verify opening file with SDL_RWFromFile in write mode does not return NULL");
aschiffler@6819
   476
aschiffler@6819
   477
     // Bail out if NULL
aschiffler@6819
   478
     if (rw == NULL) return TEST_ABORTED;
aschiffler@6819
   479
aschiffler@6819
   480
     /* Write test data */
aschiffler@6819
   481
     objectsWritten = SDL_WriteBE16(rw, BE16value);
aschiffler@6819
   482
     SDLTest_AssertPass("Call to SDL_WriteBE16");
aschiffler@6819
   483
     SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten);   
aschiffler@6819
   484
     objectsWritten = SDL_WriteBE32(rw, BE32value);
aschiffler@6819
   485
     SDLTest_AssertPass("Call to SDL_WriteBE32");
aschiffler@6819
   486
     SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten);   
aschiffler@6819
   487
     objectsWritten = SDL_WriteBE64(rw, BE64value);
aschiffler@6819
   488
     SDLTest_AssertPass("Call to SDL_WriteBE64");
aschiffler@6819
   489
     SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten);   
aschiffler@6819
   490
     objectsWritten = SDL_WriteLE16(rw, LE16value);
aschiffler@6819
   491
     SDLTest_AssertPass("Call to SDL_WriteLE16");
aschiffler@6819
   492
     SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten);   
aschiffler@6819
   493
     objectsWritten = SDL_WriteLE32(rw, LE32value);
aschiffler@6819
   494
     SDLTest_AssertPass("Call to SDL_WriteLE32");
aschiffler@6819
   495
     SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten);   
aschiffler@6819
   496
     objectsWritten = SDL_WriteLE64(rw, LE64value);
aschiffler@6819
   497
     SDLTest_AssertPass("Call to SDL_WriteLE64");
aschiffler@6819
   498
     SDLTest_AssertCheck(objectsWritten == 1, "Validate number of objects written, expected: 1, got: %i", objectsWritten);   
aschiffler@6819
   499
aschiffler@6819
   500
     /* Test seek to start */
aschiffler@6819
   501
     result = SDL_RWseek( rw, 0, RW_SEEK_SET );
aschiffler@6819
   502
     SDLTest_AssertPass("Call to SDL_RWseek succeeded");
aschiffler@6819
   503
     SDLTest_AssertCheck(result == 0, "Verify result from position 0 with SDL_RWseek, expected 0, got %i", result);
aschiffler@6819
   504
aschiffler@6819
   505
     /* Read test data */
aschiffler@6819
   506
     BE16test = SDL_ReadBE16(rw);
aschiffler@6819
   507
     SDLTest_AssertPass("Call to SDL_ReadBE16");
aschiffler@6819
   508
     SDLTest_AssertCheck(BE16test == BE16value, "Validate return value from SDL_ReadBE16, expected: %hu, got: %hu", BE16value, BE16test);
aschiffler@6819
   509
     BE32test = SDL_ReadBE32(rw);
aschiffler@6819
   510
     SDLTest_AssertPass("Call to SDL_ReadBE32");
aschiffler@6819
   511
     SDLTest_AssertCheck(BE32test == BE32value, "Validate return value from SDL_ReadBE32, expected: %u, got: %u", BE32value, BE32test);   
aschiffler@6819
   512
     BE64test = SDL_ReadBE64(rw);
aschiffler@6819
   513
     SDLTest_AssertPass("Call to SDL_ReadBE64");
aschiffler@6819
   514
     SDLTest_AssertCheck(BE64test == BE64value, "Validate return value from SDL_ReadBE64, expected: %llu, got: %llu", BE64value, BE64test);   
aschiffler@6819
   515
     LE16test = SDL_ReadLE16(rw);
aschiffler@6819
   516
     SDLTest_AssertPass("Call to SDL_ReadLE16");
aschiffler@6819
   517
     SDLTest_AssertCheck(LE16test == LE16value, "Validate return value from SDL_ReadLE16, expected: %hu, got: %hu", LE16value, LE16test);
aschiffler@6819
   518
     LE32test = SDL_ReadLE32(rw);
aschiffler@6819
   519
     SDLTest_AssertPass("Call to SDL_ReadLE32");
aschiffler@6819
   520
     SDLTest_AssertCheck(LE32test == LE32value, "Validate return value from SDL_ReadLE32, expected: %u, got: %u", LE32value, LE32test);   
aschiffler@6819
   521
     LE64test = SDL_ReadLE64(rw);
aschiffler@6819
   522
     SDLTest_AssertPass("Call to SDL_ReadLE64");
aschiffler@6819
   523
     SDLTest_AssertCheck(LE64test == LE64value, "Validate return value from SDL_ReadLE64, expected: %llu, got: %llu", LE64value, LE64test);
aschiffler@6819
   524
aschiffler@6819
   525
     /* Close handle */
aschiffler@6819
   526
     SDL_RWclose(rw);
aschiffler@6819
   527
     SDLTest_AssertPass("Call to SDL_RWclose() succeeded");
aschiffler@6819
   528
   
aschiffler@6819
   529
   }
aschiffler@6819
   530
aschiffler@6819
   531
   return TEST_COMPLETED;
aschiffler@6819
   532
}
aschiffler@6819
   533
aschiffler@6781
   534
aschiffler@6760
   535
/* ================= Test References ================== */
aschiffler@6760
   536
aschiffler@6760
   537
/* RWops test cases */
aschiffler@6760
   538
static const SDLTest_TestCaseReference rwopsTest1 =
aschiffler@6760
   539
		{ (SDLTest_TestCaseFp)rwops_testParamNegative, "rwops_testParamNegative", "Negative test for SDL_RWFromFile parameters", TEST_ENABLED };
aschiffler@6760
   540
aschiffler@6760
   541
static const SDLTest_TestCaseReference rwopsTest2 =
aschiffler@6760
   542
		{ (SDLTest_TestCaseFp)rwops_testMem, "rwops_testMem", "Tests opening from memory", TEST_ENABLED };
aschiffler@6760
   543
aschiffler@6760
   544
static const SDLTest_TestCaseReference rwopsTest3 =
aschiffler@6760
   545
		{ (SDLTest_TestCaseFp)rwops_testConstMem, "rwops_testConstMem", "Tests opening from (const) memory", TEST_ENABLED };
aschiffler@6760
   546
aschiffler@6760
   547
static const SDLTest_TestCaseReference rwopsTest4 =
aschiffler@6760
   548
		{ (SDLTest_TestCaseFp)rwops_testFileRead, "rwops_testFileRead", "Tests reading from a file", TEST_ENABLED };
aschiffler@6760
   549
aschiffler@6760
   550
static const SDLTest_TestCaseReference rwopsTest5 =
aschiffler@6760
   551
		{ (SDLTest_TestCaseFp)rwops_testFileWrite, "rwops_testFileWrite", "Test writing to a file", TEST_ENABLED };
aschiffler@6760
   552
aschiffler@6760
   553
static const SDLTest_TestCaseReference rwopsTest6 =
aschiffler@6760
   554
		{ (SDLTest_TestCaseFp)rwops_testFPRead, "rwops_testFPRead", "Test reading from file pointer", TEST_ENABLED };
aschiffler@6760
   555
aschiffler@6760
   556
static const SDLTest_TestCaseReference rwopsTest7 =
aschiffler@6760
   557
		{ (SDLTest_TestCaseFp)rwops_testFPWrite, "rwops_testFPWrite", "Test writing to file pointer", TEST_ENABLED };
aschiffler@6760
   558
aschiffler@6781
   559
static const SDLTest_TestCaseReference rwopsTest8 =
aschiffler@6781
   560
		{ (SDLTest_TestCaseFp)rwops_testAllocFree, "rwops_testAllocFree", "Test alloc and free of RW context", TEST_ENABLED };
aschiffler@6781
   561
aschiffler@6819
   562
static const SDLTest_TestCaseReference rwopsTest9 =
aschiffler@6819
   563
		{ (SDLTest_TestCaseFp)rwops_testFileWriteReadEndian, "rwops_testFileWriteReadEndian", "Test writing and reading via the Endian aware functions", TEST_ENABLED };
aschiffler@6819
   564
aschiffler@6760
   565
/* Sequence of RWops test cases */
aschiffler@6760
   566
static const SDLTest_TestCaseReference *rwopsTests[] =  {
aschiffler@6819
   567
	&rwopsTest1, &rwopsTest2, &rwopsTest3, &rwopsTest4, &rwopsTest5, &rwopsTest6, 
aschiffler@6819
   568
	&rwopsTest7, &rwopsTest8, &rwopsTest9, NULL
aschiffler@6760
   569
};
aschiffler@6760
   570
aschiffler@6760
   571
/* RWops test suite (global) */
aschiffler@6760
   572
SDLTest_TestSuiteReference rwopsTestSuite = {
aschiffler@6760
   573
	"RWops",
aschiffler@6760
   574
	RWopsSetUp,
aschiffler@6760
   575
	rwopsTests,
aschiffler@6760
   576
	RWopsTearDown
aschiffler@6760
   577
};