forked from Green-Sky/tomato
sdl (master post 3.1 preview) Merge commit 'e4f454091a943345938608570b104400f62fd625'
This commit is contained in:
104
external/sdl/SDL/test/testautomation_surface.c
vendored
104
external/sdl/SDL/test/testautomation_surface.c
vendored
@@ -22,6 +22,15 @@
|
||||
#include "testautomation_suites.h"
|
||||
#include "testautomation_images.h"
|
||||
|
||||
|
||||
#define CHECK_FUNC(FUNC, PARAMS) \
|
||||
{ \
|
||||
int result = FUNC PARAMS; \
|
||||
if (result != 0) { \
|
||||
SDLTest_AssertCheck(result == 0, "Validate result from %s, expected: 0, got: %i, %s", #FUNC, result, SDL_GetError()); \
|
||||
} \
|
||||
}
|
||||
|
||||
/* ================= Test Case Implementation ================== */
|
||||
|
||||
/* Shared test surface */
|
||||
@@ -146,13 +155,13 @@ static void testBlitBlendMode(int mode)
|
||||
for (i = 0; i <= ni; i += 4) {
|
||||
if (mode == -2) {
|
||||
/* Set color mod. */
|
||||
ret = SDL_SetSurfaceColorMod(face, (255 / nj) * j, (255 / ni) * i, (255 / nj) * j);
|
||||
ret = SDL_SetSurfaceColorMod(face, (Uint8)((255 / nj) * j), (Uint8)((255 / ni) * i), (Uint8)((255 / nj) * j));
|
||||
if (ret != 0) {
|
||||
checkFailCount2++;
|
||||
}
|
||||
} else if (mode == -3) {
|
||||
/* Set alpha mod. */
|
||||
ret = SDL_SetSurfaceAlphaMod(face, (255 / ni) * i);
|
||||
ret = SDL_SetSurfaceAlphaMod(face, (Uint8)((255 / ni) * i));
|
||||
if (ret != 0) {
|
||||
checkFailCount3++;
|
||||
}
|
||||
@@ -327,10 +336,12 @@ static int surface_testCompleteSurfaceConversion(void *arg)
|
||||
SDL_PIXELFORMAT_RGBA8888,
|
||||
SDL_PIXELFORMAT_ABGR8888,
|
||||
SDL_PIXELFORMAT_BGRA8888,
|
||||
#if 0 /* We aren't testing HDR10 colorspace conversion */
|
||||
SDL_PIXELFORMAT_XRGB2101010,
|
||||
SDL_PIXELFORMAT_XBGR2101010,
|
||||
SDL_PIXELFORMAT_ARGB2101010,
|
||||
SDL_PIXELFORMAT_ABGR2101010,
|
||||
#endif
|
||||
};
|
||||
SDL_Surface *face = NULL, *cvt1, *cvt2, *final;
|
||||
SDL_PixelFormat *fmt1, *fmt2;
|
||||
@@ -353,17 +364,22 @@ static int surface_testCompleteSurfaceConversion(void *arg)
|
||||
for (i = 0; i < SDL_arraysize(pixel_formats); ++i) {
|
||||
for (j = 0; j < SDL_arraysize(pixel_formats); ++j) {
|
||||
fmt1 = SDL_CreatePixelFormat(pixel_formats[i]);
|
||||
SDL_assert(fmt1 != NULL);
|
||||
SDLTest_AssertCheck(fmt1 != NULL, "SDL_CreatePixelFormat(%s[0x%08" SDL_PRIx32 "]) should return a non-null pixel format",
|
||||
SDL_GetPixelFormatName(pixel_formats[i]), pixel_formats[i]);
|
||||
cvt1 = SDL_ConvertSurface(face, fmt1);
|
||||
SDL_assert(cvt1 != NULL);
|
||||
SDLTest_AssertCheck(cvt1 != NULL, "SDL_ConvertSurface(..., %s[0x%08" SDL_PRIx32 "]) should return a non-null surface",
|
||||
SDL_GetPixelFormatName(pixel_formats[i]), pixel_formats[i]);
|
||||
|
||||
fmt2 = SDL_CreatePixelFormat(pixel_formats[j]);
|
||||
SDL_assert(fmt1 != NULL);
|
||||
SDLTest_AssertCheck(fmt2 != NULL, "SDL_CreatePixelFormat(%s[0x%08" SDL_PRIx32 "]) should return a non-null pixel format",
|
||||
SDL_GetPixelFormatName(pixel_formats[i]), pixel_formats[i]);
|
||||
cvt2 = SDL_ConvertSurface(cvt1, fmt2);
|
||||
SDL_assert(cvt2 != NULL);
|
||||
SDLTest_AssertCheck(cvt2 != NULL, "SDL_ConvertSurface(..., %s[0x%08" SDL_PRIx32 "]) should return a non-null surface",
|
||||
SDL_GetPixelFormatName(pixel_formats[i]), pixel_formats[i]);
|
||||
|
||||
if (fmt1->BytesPerPixel == face->format->BytesPerPixel &&
|
||||
fmt2->BytesPerPixel == face->format->BytesPerPixel &&
|
||||
if (fmt1 && fmt2 &&
|
||||
fmt1->bytes_per_pixel == face->format->bytes_per_pixel &&
|
||||
fmt2->bytes_per_pixel == face->format->bytes_per_pixel &&
|
||||
(fmt1->Amask != 0) == (face->format->Amask != 0) &&
|
||||
(fmt2->Amask != 0) == (face->format->Amask != 0)) {
|
||||
final = SDL_ConvertSurface(cvt2, face->format);
|
||||
@@ -757,19 +773,29 @@ static int surface_testOverflow(void *arg)
|
||||
"Expected \"%s\", got \"%s\"", expectedError, SDL_GetError());
|
||||
|
||||
if (sizeof(size_t) == 4 && sizeof(int) >= 4) {
|
||||
expectedError = "Out of memory";
|
||||
surface = SDL_CreateSurface(SDL_MAX_SINT32, 1, SDL_PIXELFORMAT_INDEX8);
|
||||
SDLTest_AssertCheck(surface == NULL, "Should detect overflow in width + alignment");
|
||||
SDL_ClearError();
|
||||
expectedError = "aligning pitch would overflow";
|
||||
/* 0x5555'5555 * 3bpp = 0xffff'ffff which fits in size_t, but adding
|
||||
* alignment padding makes it overflow */
|
||||
surface = SDL_CreateSurface(0x55555555, 1, SDL_PIXELFORMAT_RGB24);
|
||||
SDLTest_AssertCheck(surface == NULL, "Should detect overflow in pitch + alignment");
|
||||
SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0,
|
||||
"Expected \"%s\", got \"%s\"", expectedError, SDL_GetError());
|
||||
surface = SDL_CreateSurface(SDL_MAX_SINT32 / 2, 1, SDL_PIXELFORMAT_ARGB8888);
|
||||
SDL_ClearError();
|
||||
expectedError = "width * bpp would overflow";
|
||||
/* 0x4000'0000 * 4bpp = 0x1'0000'0000 which (just) overflows */
|
||||
surface = SDL_CreateSurface(0x40000000, 1, SDL_PIXELFORMAT_ARGB8888);
|
||||
SDLTest_AssertCheck(surface == NULL, "Should detect overflow in width * bytes per pixel");
|
||||
SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0,
|
||||
"Expected \"%s\", got \"%s\"", expectedError, SDL_GetError());
|
||||
SDL_ClearError();
|
||||
expectedError = "height * pitch would overflow";
|
||||
surface = SDL_CreateSurface((1 << 29) - 1, (1 << 29) - 1, SDL_PIXELFORMAT_INDEX8);
|
||||
SDLTest_AssertCheck(surface == NULL, "Should detect overflow in width * height");
|
||||
SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0,
|
||||
"Expected \"%s\", got \"%s\"", expectedError, SDL_GetError());
|
||||
SDL_ClearError();
|
||||
expectedError = "height * pitch would overflow";
|
||||
surface = SDL_CreateSurface((1 << 15) + 1, (1 << 15) + 1, SDL_PIXELFORMAT_ARGB8888);
|
||||
SDLTest_AssertCheck(surface == NULL, "Should detect overflow in width * height * bytes per pixel");
|
||||
SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0,
|
||||
@@ -781,6 +807,54 @@ static int surface_testOverflow(void *arg)
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
static int surface_testFlip(void *arg)
|
||||
{
|
||||
SDL_Surface *surface;
|
||||
Uint8 *pixels;
|
||||
int offset;
|
||||
const char *expectedError;
|
||||
|
||||
surface = SDL_CreateSurface(3, 3, SDL_PIXELFORMAT_RGB24);
|
||||
SDLTest_AssertCheck(surface != NULL, "SDL_CreateSurface()");
|
||||
|
||||
SDL_ClearError();
|
||||
expectedError = "Parameter 'surface' is invalid";
|
||||
SDL_FlipSurface(NULL, SDL_FLIP_HORIZONTAL);
|
||||
SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0,
|
||||
"Expected \"%s\", got \"%s\"", expectedError, SDL_GetError());
|
||||
|
||||
SDL_ClearError();
|
||||
expectedError = "Parameter 'flip' is invalid";
|
||||
SDL_FlipSurface(surface, SDL_FLIP_NONE);
|
||||
SDLTest_AssertCheck(SDL_strcmp(SDL_GetError(), expectedError) == 0,
|
||||
"Expected \"%s\", got \"%s\"", expectedError, SDL_GetError());
|
||||
|
||||
pixels = (Uint8 *)surface->pixels;
|
||||
*pixels = 0xFF;
|
||||
offset = 0;
|
||||
|
||||
SDLTest_AssertPass("Call to SDL_FlipSurface(surface, SDL_FLIP_VERTICAL)");
|
||||
CHECK_FUNC(SDL_FlipSurface, (surface, SDL_FLIP_VERTICAL));
|
||||
SDLTest_AssertCheck(pixels[offset] == 0x00,
|
||||
"Expected pixels[%d] == 0x00 got 0x%.2X", offset, pixels[offset]);
|
||||
offset = 2 * surface->pitch;
|
||||
SDLTest_AssertCheck(pixels[offset] == 0xFF,
|
||||
"Expected pixels[%d] == 0xFF got 0x%.2X", offset, pixels[offset]);
|
||||
|
||||
SDLTest_AssertPass("Call to SDL_FlipSurface(surface, SDL_FLIP_HORIZONTAL)");
|
||||
CHECK_FUNC(SDL_FlipSurface, (surface, SDL_FLIP_HORIZONTAL));
|
||||
SDLTest_AssertCheck(pixels[offset] == 0x00,
|
||||
"Expected pixels[%d] == 0x00 got 0x%.2X", offset, pixels[offset]);
|
||||
offset += (surface->w - 1) * surface->format->bytes_per_pixel;
|
||||
SDLTest_AssertCheck(pixels[offset] == 0xFF,
|
||||
"Expected pixels[%d] == 0xFF got 0x%.2X", offset, pixels[offset]);
|
||||
|
||||
SDL_DestroySurface(surface);
|
||||
|
||||
return TEST_COMPLETED;
|
||||
}
|
||||
|
||||
|
||||
/* ================= Test References ================== */
|
||||
|
||||
/* Surface test cases */
|
||||
@@ -839,11 +913,15 @@ static const SDLTest_TestCaseReference surfaceTestOverflow = {
|
||||
surface_testOverflow, "surface_testOverflow", "Test overflow detection.", TEST_ENABLED
|
||||
};
|
||||
|
||||
static const SDLTest_TestCaseReference surfaceTestFlip = {
|
||||
surface_testFlip, "surface_testFlip", "Test surface flipping.", TEST_ENABLED
|
||||
};
|
||||
|
||||
/* Sequence of Surface test cases */
|
||||
static const SDLTest_TestCaseReference *surfaceTests[] = {
|
||||
&surfaceTest1, &surfaceTest2, &surfaceTest3, &surfaceTest4, &surfaceTest5,
|
||||
&surfaceTest6, &surfaceTest7, &surfaceTest8, &surfaceTest9, &surfaceTest10,
|
||||
&surfaceTest11, &surfaceTest12, &surfaceTestOverflow, NULL
|
||||
&surfaceTest11, &surfaceTest12, &surfaceTestOverflow, &surfaceTestFlip, NULL
|
||||
};
|
||||
|
||||
/* Surface test suite (global) */
|
||||
|
||||
Reference in New Issue
Block a user