test/testautomation_pixels.c
author Andreas Schiffler <aschiffler@ferzkopp.net>
Sat, 04 May 2013 09:11:18 -0700
changeset 7142 f4a670e51cde
parent 7134 09ee216e6a25
child 7151 99a4964db4c3
permissions -rw-r--r--
Added additional input validation to SDL_AllocPalette; added error codes; added test case to Pixels suite for coverage
aschiffler@7134
     1
/**
aschiffler@7134
     2
 * Pixels test suite
aschiffler@7134
     3
 */
aschiffler@7134
     4
aschiffler@7134
     5
#include <stdio.h>
aschiffler@7134
     6
aschiffler@7134
     7
#include "SDL.h"
aschiffler@7134
     8
#include "SDL_test.h"
aschiffler@7134
     9
aschiffler@7134
    10
/* Test case functions */
aschiffler@7134
    11
aschiffler@7134
    12
/* Definition of all RGB formats used to test pixel conversions */
aschiffler@7134
    13
const int _numRGBPixelFormats = 30;
aschiffler@7134
    14
Uint32 _RGBPixelFormats[] = 
aschiffler@7134
    15
  {
aschiffler@7134
    16
    SDL_PIXELFORMAT_INDEX1LSB,
aschiffler@7134
    17
    SDL_PIXELFORMAT_INDEX1MSB,
aschiffler@7134
    18
    SDL_PIXELFORMAT_INDEX4LSB,
aschiffler@7134
    19
    SDL_PIXELFORMAT_INDEX4MSB,
aschiffler@7134
    20
    SDL_PIXELFORMAT_INDEX8,
aschiffler@7134
    21
    SDL_PIXELFORMAT_RGB332,
aschiffler@7134
    22
    SDL_PIXELFORMAT_RGB444,
aschiffler@7134
    23
    SDL_PIXELFORMAT_RGB555,
aschiffler@7134
    24
    SDL_PIXELFORMAT_BGR555,
aschiffler@7134
    25
    SDL_PIXELFORMAT_ARGB4444,
aschiffler@7134
    26
    SDL_PIXELFORMAT_RGBA4444,
aschiffler@7134
    27
    SDL_PIXELFORMAT_ABGR4444,
aschiffler@7134
    28
    SDL_PIXELFORMAT_BGRA4444,
aschiffler@7134
    29
    SDL_PIXELFORMAT_ARGB1555,
aschiffler@7134
    30
    SDL_PIXELFORMAT_RGBA5551,
aschiffler@7134
    31
    SDL_PIXELFORMAT_ABGR1555,
aschiffler@7134
    32
    SDL_PIXELFORMAT_BGRA5551,
aschiffler@7134
    33
    SDL_PIXELFORMAT_RGB565,
aschiffler@7134
    34
    SDL_PIXELFORMAT_BGR565,
aschiffler@7134
    35
    SDL_PIXELFORMAT_RGB24,
aschiffler@7134
    36
    SDL_PIXELFORMAT_BGR24,
aschiffler@7134
    37
    SDL_PIXELFORMAT_RGB888,
aschiffler@7134
    38
    SDL_PIXELFORMAT_RGBX8888,
aschiffler@7134
    39
    SDL_PIXELFORMAT_BGR888,
aschiffler@7134
    40
    SDL_PIXELFORMAT_BGRX8888,
aschiffler@7134
    41
    SDL_PIXELFORMAT_ARGB8888,
aschiffler@7134
    42
    SDL_PIXELFORMAT_RGBA8888,
aschiffler@7134
    43
    SDL_PIXELFORMAT_ABGR8888,
aschiffler@7134
    44
    SDL_PIXELFORMAT_BGRA8888,
aschiffler@7134
    45
    SDL_PIXELFORMAT_ARGB2101010
aschiffler@7134
    46
  };
aschiffler@7134
    47
char* _RGBPixelFormatsVerbose[] = 
aschiffler@7134
    48
  {
aschiffler@7134
    49
    "SDL_PIXELFORMAT_INDEX1LSB",
aschiffler@7134
    50
    "SDL_PIXELFORMAT_INDEX1MSB",
aschiffler@7134
    51
    "SDL_PIXELFORMAT_INDEX4LSB",
aschiffler@7134
    52
    "SDL_PIXELFORMAT_INDEX4MSB",
aschiffler@7134
    53
    "SDL_PIXELFORMAT_INDEX8",
aschiffler@7134
    54
    "SDL_PIXELFORMAT_RGB332",
aschiffler@7134
    55
    "SDL_PIXELFORMAT_RGB444",
aschiffler@7134
    56
    "SDL_PIXELFORMAT_RGB555",
aschiffler@7134
    57
    "SDL_PIXELFORMAT_BGR555",
aschiffler@7134
    58
    "SDL_PIXELFORMAT_ARGB4444",
aschiffler@7134
    59
    "SDL_PIXELFORMAT_RGBA4444",
aschiffler@7134
    60
    "SDL_PIXELFORMAT_ABGR4444",
aschiffler@7134
    61
    "SDL_PIXELFORMAT_BGRA4444",
aschiffler@7134
    62
    "SDL_PIXELFORMAT_ARGB1555",
aschiffler@7134
    63
    "SDL_PIXELFORMAT_RGBA5551",
aschiffler@7134
    64
    "SDL_PIXELFORMAT_ABGR1555",
aschiffler@7134
    65
    "SDL_PIXELFORMAT_BGRA5551",
aschiffler@7134
    66
    "SDL_PIXELFORMAT_RGB565",
aschiffler@7134
    67
    "SDL_PIXELFORMAT_BGR565",
aschiffler@7134
    68
    "SDL_PIXELFORMAT_RGB24",
aschiffler@7134
    69
    "SDL_PIXELFORMAT_BGR24",
aschiffler@7134
    70
    "SDL_PIXELFORMAT_RGB888",
aschiffler@7134
    71
    "SDL_PIXELFORMAT_RGBX8888",
aschiffler@7134
    72
    "SDL_PIXELFORMAT_BGR888",
aschiffler@7134
    73
    "SDL_PIXELFORMAT_BGRX8888",
aschiffler@7134
    74
    "SDL_PIXELFORMAT_ARGB8888",
aschiffler@7134
    75
    "SDL_PIXELFORMAT_RGBA8888",
aschiffler@7134
    76
    "SDL_PIXELFORMAT_ABGR8888",
aschiffler@7134
    77
    "SDL_PIXELFORMAT_BGRA8888",
aschiffler@7134
    78
    "SDL_PIXELFORMAT_ARGB2101010"
aschiffler@7134
    79
  };
aschiffler@7134
    80
aschiffler@7134
    81
/* Definition of all Non-RGB formats used to test pixel conversions */
aschiffler@7134
    82
const int _numNonRGBPixelFormats = 5;
aschiffler@7134
    83
Uint32 _nonRGBPixelFormats[] = 
aschiffler@7134
    84
  {
aschiffler@7134
    85
    SDL_PIXELFORMAT_YV12,
aschiffler@7134
    86
    SDL_PIXELFORMAT_IYUV,
aschiffler@7134
    87
    SDL_PIXELFORMAT_YUY2,
aschiffler@7134
    88
    SDL_PIXELFORMAT_UYVY,
aschiffler@7134
    89
    SDL_PIXELFORMAT_YVYU 
aschiffler@7134
    90
  };
aschiffler@7134
    91
char* _nonRGBPixelFormatsVerbose[] = 
aschiffler@7134
    92
  {
aschiffler@7134
    93
    "SDL_PIXELFORMAT_YV12",
aschiffler@7134
    94
    "SDL_PIXELFORMAT_IYUV",
aschiffler@7134
    95
    "SDL_PIXELFORMAT_YUY2",
aschiffler@7134
    96
    "SDL_PIXELFORMAT_UYVY",
aschiffler@7134
    97
    "SDL_PIXELFORMAT_YVYU" 
aschiffler@7134
    98
  };
aschiffler@7134
    99
aschiffler@7134
   100
/* Test case functions */
aschiffler@7134
   101
aschiffler@7134
   102
/**
aschiffler@7134
   103
 * @brief Call to SDL_AllocFormat and SDL_FreeFormat
aschiffler@7142
   104
 *
aschiffler@7142
   105
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocFormat
aschiffler@7142
   106
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreeFormat 
aschiffler@7134
   107
 */
aschiffler@7134
   108
int
aschiffler@7134
   109
pixels_allocFreeFormat(void *arg)
aschiffler@7134
   110
{
aschiffler@7134
   111
  int i;
aschiffler@7134
   112
  Uint32 format;
aschiffler@7134
   113
  Uint32 masks;
aschiffler@7134
   114
  SDL_PixelFormat* result;
aschiffler@7134
   115
aschiffler@7134
   116
  /* RGB formats */
aschiffler@7134
   117
  for (i = 0; i < _numRGBPixelFormats; i++) {
aschiffler@7134
   118
    format = _RGBPixelFormats[i];
aschiffler@7134
   119
    SDLTest_Log("RGB Format: %s (%u)", _RGBPixelFormatsVerbose[i], format);
aschiffler@7134
   120
  
aschiffler@7134
   121
    /* Allocate format */
aschiffler@7134
   122
    result = SDL_AllocFormat(format);
aschiffler@7134
   123
    SDLTest_AssertPass("Call to SDL_AllocFormat()");
aschiffler@7134
   124
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");  
aschiffler@7134
   125
    if (result != NULL) {
aschiffler@7134
   126
      SDLTest_AssertCheck(result->format == format, "Verify value of result.format; expected: %u, got %u", format, result->format);  
aschiffler@7134
   127
      SDLTest_AssertCheck(result->BitsPerPixel > 0, "Verify value of result.BitsPerPixel; expected: >0, got %u", result->BitsPerPixel);  
aschiffler@7134
   128
      SDLTest_AssertCheck(result->BytesPerPixel > 0, "Verify value of result.BytesPerPixel; expected: >0, got %u", result->BytesPerPixel);  
aschiffler@7134
   129
      if (result->palette != NULL) {      
aschiffler@7134
   130
         masks = result->Rmask | result->Gmask | result->Bmask | result->Amask;
aschiffler@7134
   131
         SDLTest_AssertCheck(masks > 0, "Verify value of result.[RGBA]mask combined; expected: >0, got %u", masks);
aschiffler@7134
   132
      }
aschiffler@7134
   133
      
aschiffler@7134
   134
      /* Deallocate again */
aschiffler@7134
   135
      SDL_FreeFormat(result);
aschiffler@7134
   136
      SDLTest_AssertPass("Call to SDL_FreeFormat()");          
aschiffler@7134
   137
    }
aschiffler@7134
   138
  }
aschiffler@7134
   139
aschiffler@7134
   140
  /* Non-RGB formats */
aschiffler@7134
   141
  for (i = 0; i < _numNonRGBPixelFormats; i++) {
aschiffler@7134
   142
    format = _nonRGBPixelFormats[i];
aschiffler@7134
   143
    SDLTest_Log("non-RGB Format: %s (%u)", _nonRGBPixelFormatsVerbose[i], format);
aschiffler@7134
   144
  
aschiffler@7134
   145
    /* Try to allocate format */
aschiffler@7134
   146
    result = SDL_AllocFormat(format);
aschiffler@7134
   147
    SDLTest_AssertPass("Call to SDL_AllocFormat()");
aschiffler@7134
   148
    SDLTest_AssertCheck(result == NULL, "Verify result is NULL");  
aschiffler@7134
   149
  }
aschiffler@7134
   150
  
aschiffler@7142
   151
  /* Negative cases */
aschiffler@7142
   152
  format = 0xffffffff;
aschiffler@7142
   153
  result = SDL_AllocFormat(format);
aschiffler@7142
   154
  SDLTest_AssertPass("Call to SDL_AllocFormat(0xffffffff)");
aschiffler@7142
   155
  SDLTest_AssertCheck(result == NULL, "Verify result is NULL");  
aschiffler@7142
   156
  /* TODO: check error code */
aschiffler@7142
   157
aschiffler@7142
   158
  SDL_FreeFormat(NULL);
aschiffler@7142
   159
  SDLTest_AssertPass("Call to SDL_FreeFormat(NULL)");
aschiffler@7142
   160
  /* TODO: check error code */
aschiffler@7142
   161
  
aschiffler@7142
   162
  return TEST_COMPLETED;
aschiffler@7142
   163
}
aschiffler@7142
   164
aschiffler@7142
   165
/**
aschiffler@7142
   166
 * @brief Call to SDL_AllocPalette and SDL_FreePalette
aschiffler@7142
   167
 *
aschiffler@7142
   168
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_AllocPalette
aschiffler@7142
   169
 * @sa http://wiki.libsdl.org/moin.fcg/SDL_FreePalette
aschiffler@7142
   170
 */
aschiffler@7142
   171
int
aschiffler@7142
   172
pixels_allocFreePalette(void *arg)
aschiffler@7142
   173
{
aschiffler@7142
   174
  int variation;
aschiffler@7142
   175
  int i;
aschiffler@7142
   176
  int ncolors;
aschiffler@7142
   177
  SDL_Palette* result;
aschiffler@7142
   178
aschiffler@7142
   179
  /* Allocate palette */
aschiffler@7142
   180
  for (variation = 1; variation <= 3; variation++) {  
aschiffler@7142
   181
    switch (variation) {
aschiffler@7142
   182
      /* Just one color */
aschiffler@7142
   183
      case 1:
aschiffler@7142
   184
        ncolors = 1;
aschiffler@7142
   185
        break;
aschiffler@7142
   186
      /* Two colors */
aschiffler@7142
   187
      case 2:
aschiffler@7142
   188
        ncolors = 2;
aschiffler@7142
   189
        break;
aschiffler@7142
   190
      /* More than two colors */
aschiffler@7142
   191
      case 3:
aschiffler@7142
   192
        ncolors = SDLTest_RandomIntegerInRange(8, 16);
aschiffler@7142
   193
        break;
aschiffler@7142
   194
    }
aschiffler@7142
   195
aschiffler@7142
   196
    result = SDL_AllocPalette(ncolors);
aschiffler@7142
   197
    SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors);
aschiffler@7142
   198
    SDLTest_AssertCheck(result != NULL, "Verify result is not NULL");  
aschiffler@7142
   199
    if (result != NULL) {
aschiffler@7142
   200
      SDLTest_AssertCheck(result->ncolors == ncolors, "Verify value of result.ncolors; expected: %u, got %u", ncolors, result->ncolors);  
aschiffler@7142
   201
      if (result->ncolors > 0) {
aschiffler@7142
   202
        SDLTest_AssertCheck(result->colors != NULL, "Verify value of result.colors is not NULL");
aschiffler@7142
   203
        if (result->colors != NULL) {
aschiffler@7142
   204
          for(i = 0; i < result->ncolors; i++) {
aschiffler@7142
   205
            SDLTest_AssertCheck(result->colors[i].r == 255, "Verify value of result.colors[%d].r; expected: 255, got %u", i, result->colors[i].r);  
aschiffler@7142
   206
            SDLTest_AssertCheck(result->colors[i].g == 255, "Verify value of result.colors[%d].g; expected: 255, got %u", i, result->colors[i].g);  
aschiffler@7142
   207
            SDLTest_AssertCheck(result->colors[i].b == 255, "Verify value of result.colors[%d].b; expected: 255, got %u", i, result->colors[i].b);  
aschiffler@7142
   208
           }
aschiffler@7142
   209
         } 
aschiffler@7142
   210
      }
aschiffler@7142
   211
      
aschiffler@7142
   212
      /* Deallocate again */
aschiffler@7142
   213
      SDL_FreePalette(result);
aschiffler@7142
   214
      SDLTest_AssertPass("Call to SDL_FreePalette()");          
aschiffler@7142
   215
    }
aschiffler@7142
   216
  }
aschiffler@7142
   217
aschiffler@7142
   218
  /* Negative cases */
aschiffler@7142
   219
  for (ncolors = 0; ncolors > -3; ncolors--) {
aschiffler@7142
   220
    result = SDL_AllocPalette(ncolors);
aschiffler@7142
   221
    SDLTest_AssertPass("Call to SDL_AllocPalette(%d)", ncolors);
aschiffler@7142
   222
    SDLTest_AssertCheck(result == NULL, "Verify result is NULL");
aschiffler@7142
   223
    /* TODO: check error code */
aschiffler@7142
   224
  }
aschiffler@7142
   225
aschiffler@7142
   226
  SDL_FreePalette(NULL);
aschiffler@7142
   227
  SDLTest_AssertPass("Call to SDL_FreePalette(NULL)");
aschiffler@7142
   228
  /* TODO: check error code */
aschiffler@7142
   229
    
aschiffler@7134
   230
  return TEST_COMPLETED;
aschiffler@7134
   231
}
aschiffler@7134
   232
aschiffler@7134
   233
/* ================= Test References ================== */
aschiffler@7134
   234
aschiffler@7142
   235
/* Pixels test cases */
aschiffler@7134
   236
static const SDLTest_TestCaseReference pixelsTest1 =
aschiffler@7134
   237
		{ (SDLTest_TestCaseFp)pixels_allocFreeFormat, "pixels_allocFreeFormat", "Call to SDL_AllocFormat and SDL_FreeFormat", TEST_ENABLED };
aschiffler@7134
   238
aschiffler@7142
   239
static const SDLTest_TestCaseReference pixelsTest2 =
aschiffler@7142
   240
		{ (SDLTest_TestCaseFp)pixels_allocFreePalette, "pixels_allocFreePalette", "Call to SDL_AllocPalette and SDL_FreePalette", TEST_ENABLED };
aschiffler@7142
   241
aschiffler@7134
   242
/* Sequence of Pixels test cases */
aschiffler@7134
   243
static const SDLTest_TestCaseReference *pixelsTests[] =  {
aschiffler@7142
   244
	&pixelsTest1, &pixelsTest2, NULL
aschiffler@7134
   245
};
aschiffler@7134
   246
aschiffler@7134
   247
/* Pixels test suite (global) */
aschiffler@7134
   248
SDLTest_TestSuiteReference pixelsTestSuite = {
aschiffler@7134
   249
	"Pixels",
aschiffler@7134
   250
	NULL,
aschiffler@7134
   251
	pixelsTests,
aschiffler@7134
   252
	NULL
aschiffler@7134
   253
};