2015-06-21 09:33:46 -06:00
/**
* Original code : automated SDL surface test written by Edgar Simo " bobbens "
* Adapted / rewritten for test lib by Andreas Schiffler
*/
2023-07-03 09:29:42 -06:00
/* Suppress C4996 VS compiler warnings for unlink() */
2022-12-04 14:35:20 -07:00
# if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_DEPRECATE)
2015-06-21 09:33:46 -06:00
# define _CRT_SECURE_NO_DEPRECATE
2022-12-04 14:35:20 -07:00
# endif
# if defined(_MSC_VER) && !defined(_CRT_NONSTDC_NO_DEPRECATE)
2015-06-21 09:33:46 -06:00
# define _CRT_NONSTDC_NO_DEPRECATE
2022-12-04 14:35:20 -07:00
# endif
2015-06-21 09:33:46 -06:00
# include <stdio.h>
# ifndef _MSC_VER
# include <unistd.h>
# endif
# include <sys/stat.h>
2022-11-26 21:43:38 -07:00
# include <SDL3/SDL.h>
# include <SDL3/SDL_test.h>
2023-03-08 08:12:45 -07:00
# include "testautomation_suites.h"
2023-01-26 11:23:57 -07:00
# include "testautomation_images.h"
2015-06-21 09:33:46 -06:00
2024-01-20 07:31:37 -07:00
# 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 ( ) ) ; \
} \
}
2015-06-21 09:33:46 -06:00
/* ================= Test Case Implementation ================== */
/* Shared test surface */
static SDL_Surface * referenceSurface = NULL ;
static SDL_Surface * testSurface = NULL ;
/* Fixture */
/* Create a 32-bit writable surface for blitting tests */
2022-12-29 14:58:16 -07:00
static void surfaceSetUp ( void * arg )
2015-06-21 09:33:46 -06:00
{
int result ;
SDL_BlendMode blendMode = SDL_BLENDMODE_NONE ;
SDL_BlendMode currentBlendMode ;
2022-12-29 14:58:16 -07:00
2015-06-21 09:33:46 -06:00
referenceSurface = SDLTest_ImageBlit ( ) ; /* For size info */
2022-12-01 09:04:02 -07:00
testSurface = SDL_CreateSurface ( referenceSurface - > w , referenceSurface - > h , SDL_PIXELFORMAT_RGBA32 ) ;
2015-06-21 09:33:46 -06:00
SDLTest_AssertCheck ( testSurface ! = NULL , " Check that testSurface is not NULL " ) ;
if ( testSurface ! = NULL ) {
2022-11-30 13:51:59 -07:00
/* Disable blend mode for target surface */
result = SDL_SetSurfaceBlendMode ( testSurface , blendMode ) ;
SDLTest_AssertCheck ( result = = 0 , " Validate result from SDL_SetSurfaceBlendMode, expected: 0, got: %i " , result ) ;
result = SDL_GetSurfaceBlendMode ( testSurface , & currentBlendMode ) ;
SDLTest_AssertCheck ( result = = 0 , " Validate result from SDL_GetSurfaceBlendMode, expected: 0, got: %i " , result ) ;
SDLTest_AssertCheck ( currentBlendMode = = blendMode , " Validate blendMode, expected: %i, got: %i " , blendMode , currentBlendMode ) ;
2015-06-21 09:33:46 -06:00
}
}
2022-12-29 14:58:16 -07:00
static void surfaceTearDown ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( referenceSurface ) ;
2015-06-21 09:33:46 -06:00
referenceSurface = NULL ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( testSurface ) ;
2015-06-21 09:33:46 -06:00
testSurface = NULL ;
}
/**
* Helper that clears the test surface
*/
2023-03-08 08:12:45 -07:00
static void clearTestSurface ( void )
2015-06-21 09:33:46 -06:00
{
int ret ;
Uint32 color ;
/* Clear surface. */
2022-11-30 13:51:59 -07:00
color = SDL_MapRGBA ( testSurface - > format , 0 , 0 , 0 , 0 ) ;
2015-06-21 09:33:46 -06:00
SDLTest_AssertPass ( " Call to SDL_MapRGBA() " ) ;
2022-12-27 07:36:39 -07:00
ret = SDL_FillSurfaceRect ( testSurface , NULL , color ) ;
SDLTest_AssertPass ( " Call to SDL_FillSurfaceRect() " ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify result from SDL_FillSurfaceRect, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
}
/**
* Helper that blits in a specific blend mode , - 1 for basic blitting , - 2 for color mod , - 3 for alpha mod , - 4 for mixed blend modes .
*/
2022-12-29 14:58:16 -07:00
static void testBlitBlendMode ( int mode )
2015-06-21 09:33:46 -06:00
{
int ret ;
int i , j , ni , nj ;
SDL_Surface * face ;
SDL_Rect rect ;
int nmode ;
SDL_BlendMode bmode ;
int checkFailCount1 ;
int checkFailCount2 ;
int checkFailCount3 ;
int checkFailCount4 ;
/* Check test surface */
SDLTest_AssertCheck ( testSurface ! = NULL , " Verify testSurface is not NULL " ) ;
2022-11-27 09:38:43 -07:00
if ( testSurface = = NULL ) {
return ;
}
2015-06-21 09:33:46 -06:00
/* Create sample surface */
face = SDLTest_ImageFace ( ) ;
SDLTest_AssertCheck ( face ! = NULL , " Verify face surface is not NULL " ) ;
2022-11-27 09:38:43 -07:00
if ( face = = NULL ) {
return ;
}
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Reset alpha modulation */
2015-06-21 09:33:46 -06:00
ret = SDL_SetSurfaceAlphaMod ( face , 255 ) ;
SDLTest_AssertPass ( " Call to SDL_SetSurfaceAlphaMod() " ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify result from SDL_SetSurfaceAlphaMod(), expected: 0, got: %i " , ret ) ;
2022-11-30 13:51:59 -07:00
/* Reset color modulation */
2015-06-21 09:33:46 -06:00
ret = SDL_SetSurfaceColorMod ( face , 255 , 255 , 255 ) ;
SDLTest_AssertPass ( " Call to SDL_SetSurfaceColorMod() " ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify result from SDL_SetSurfaceColorMod(), expected: 0, got: %i " , ret ) ;
2022-11-30 13:51:59 -07:00
/* Reset color key */
2022-12-27 07:36:39 -07:00
ret = SDL_SetSurfaceColorKey ( face , SDL_FALSE , 0 ) ;
SDLTest_AssertPass ( " Call to SDL_SetSurfaceColorKey() " ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify result from SDL_SetSurfaceColorKey(), expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
/* Clear the test surface */
2022-12-29 14:58:16 -07:00
clearTestSurface ( ) ;
2015-06-21 09:33:46 -06:00
/* Target rect size */
rect . w = face - > w ;
rect . h = face - > h ;
/* Steps to take */
ni = testSurface - > w - face - > w ;
nj = testSurface - > h - face - > h ;
/* Optionally set blend mode. */
if ( mode > = 0 ) {
2022-11-30 13:51:59 -07:00
ret = SDL_SetSurfaceBlendMode ( face , ( SDL_BlendMode ) mode ) ;
2015-06-21 09:33:46 -06:00
SDLTest_AssertPass ( " Call to SDL_SetSurfaceBlendMode() " ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify result from SDL_SetSurfaceBlendMode(..., %i), expected: 0, got: %i " , mode , ret ) ;
}
/* Test blend mode. */
checkFailCount1 = 0 ;
checkFailCount2 = 0 ;
checkFailCount3 = 0 ;
checkFailCount4 = 0 ;
2022-11-30 13:51:59 -07:00
for ( j = 0 ; j < = nj ; j + = 4 ) {
for ( i = 0 ; i < = ni ; i + = 4 ) {
if ( mode = = - 2 ) {
/* Set color mod. */
2024-02-03 12:23:16 -07:00
ret = SDL_SetSurfaceColorMod ( face , ( Uint8 ) ( ( 255 / nj ) * j ) , ( Uint8 ) ( ( 255 / ni ) * i ) , ( Uint8 ) ( ( 255 / nj ) * j ) ) ;
2022-11-30 13:51:59 -07:00
if ( ret ! = 0 ) {
checkFailCount2 + + ;
}
} else if ( mode = = - 3 ) {
/* Set alpha mod. */
2024-02-03 12:23:16 -07:00
ret = SDL_SetSurfaceAlphaMod ( face , ( Uint8 ) ( ( 255 / ni ) * i ) ) ;
2022-11-30 13:51:59 -07:00
if ( ret ! = 0 ) {
checkFailCount3 + + ;
}
} else if ( mode = = - 4 ) {
/* Crazy blending mode magic. */
nmode = ( i / 4 * j / 4 ) % 4 ;
if ( nmode = = 0 ) {
bmode = SDL_BLENDMODE_NONE ;
} else if ( nmode = = 1 ) {
bmode = SDL_BLENDMODE_BLEND ;
} else if ( nmode = = 2 ) {
bmode = SDL_BLENDMODE_ADD ;
} else if ( nmode = = 3 ) {
bmode = SDL_BLENDMODE_MOD ;
} else {
/* Should be impossible, but some static checkers are too imprecise and will complain */
SDLTest_LogError ( " Invalid: nmode=%d " , nmode ) ;
return ;
}
ret = SDL_SetSurfaceBlendMode ( face , bmode ) ;
if ( ret ! = 0 ) {
checkFailCount4 + + ;
}
2015-06-21 09:33:46 -06:00
}
2022-11-30 13:51:59 -07:00
/* Blitting. */
rect . x = i ;
rect . y = j ;
ret = SDL_BlitSurface ( face , NULL , testSurface , & rect ) ;
2022-11-27 09:38:43 -07:00
if ( ret ! = 0 ) {
2022-11-30 13:51:59 -07:00
checkFailCount1 + + ;
2022-11-27 09:38:43 -07:00
}
2015-06-21 09:33:46 -06:00
}
}
SDLTest_AssertCheck ( checkFailCount1 = = 0 , " Validate results from calls to SDL_BlitSurface, expected: 0, got: %i " , checkFailCount1 ) ;
SDLTest_AssertCheck ( checkFailCount2 = = 0 , " Validate results from calls to SDL_SetSurfaceColorMod, expected: 0, got: %i " , checkFailCount2 ) ;
SDLTest_AssertCheck ( checkFailCount3 = = 0 , " Validate results from calls to SDL_SetSurfaceAlphaMod, expected: 0, got: %i " , checkFailCount3 ) ;
SDLTest_AssertCheck ( checkFailCount4 = = 0 , " Validate results from calls to SDL_SetSurfaceBlendMode, expected: 0, got: %i " , checkFailCount4 ) ;
/* Clean up */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( face ) ;
2015-06-21 09:33:46 -06:00
face = NULL ;
}
/* Helper to check that a file exists */
2022-12-29 14:58:16 -07:00
static void AssertFileExist ( const char * filename )
2015-06-21 09:33:46 -06:00
{
struct stat st ;
int ret = stat ( filename , & st ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify file '%s' exists " , filename ) ;
}
/* Test case functions */
/**
2023-11-06 08:26:06 -07:00
* Tests sprite saving and loading
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testSaveLoadBitmap ( void * arg )
2015-06-21 09:33:46 -06:00
{
int ret ;
const char * sampleFilename = " testSaveLoadBitmap.bmp " ;
SDL_Surface * face ;
SDL_Surface * rface ;
/* Create sample surface */
face = SDLTest_ImageFace ( ) ;
SDLTest_AssertCheck ( face ! = NULL , " Verify face surface is not NULL " ) ;
2022-11-27 09:38:43 -07:00
if ( face = = NULL ) {
return TEST_ABORTED ;
}
2015-06-21 09:33:46 -06:00
/* Delete test file; ignore errors */
unlink ( sampleFilename ) ;
/* Save a surface */
ret = SDL_SaveBMP ( face , sampleFilename ) ;
SDLTest_AssertPass ( " Call to SDL_SaveBMP() " ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify result from SDL_SaveBMP, expected: 0, got: %i " , ret ) ;
2022-12-29 14:58:16 -07:00
AssertFileExist ( sampleFilename ) ;
2015-06-21 09:33:46 -06:00
/* Load a surface */
rface = SDL_LoadBMP ( sampleFilename ) ;
SDLTest_AssertPass ( " Call to SDL_LoadBMP() " ) ;
SDLTest_AssertCheck ( rface ! = NULL , " Verify result from SDL_LoadBMP is not NULL " ) ;
if ( rface ! = NULL ) {
SDLTest_AssertCheck ( face - > w = = rface - > w , " Verify width of loaded surface, expected: %i, got: %i " , face - > w , rface - > w ) ;
SDLTest_AssertCheck ( face - > h = = rface - > h , " Verify height of loaded surface, expected: %i, got: %i " , face - > h , rface - > h ) ;
}
/* Delete test file; ignore errors */
unlink ( sampleFilename ) ;
/* Clean up */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( face ) ;
2015-06-21 09:33:46 -06:00
face = NULL ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( rface ) ;
2015-06-21 09:33:46 -06:00
rface = NULL ;
return TEST_COMPLETED ;
}
2023-02-01 16:21:53 -07:00
/**
2015-06-21 09:33:46 -06:00
* Tests surface conversion .
*/
2023-03-08 08:12:45 -07:00
static int surface_testSurfaceConversion ( void * arg )
2015-06-21 09:33:46 -06:00
{
SDL_Surface * rface = NULL , * face = NULL ;
int ret = 0 ;
/* Create sample surface */
face = SDLTest_ImageFace ( ) ;
SDLTest_AssertCheck ( face ! = NULL , " Verify face surface is not NULL " ) ;
2022-11-27 09:38:43 -07:00
if ( face = = NULL ) {
2015-06-21 09:33:46 -06:00
return TEST_ABORTED ;
2022-11-27 09:38:43 -07:00
}
2015-06-21 09:33:46 -06:00
/* Set transparent pixel as the pixel at (0,0) */
if ( face - > format - > palette ) {
2022-12-27 07:36:39 -07:00
ret = SDL_SetSurfaceColorKey ( face , SDL_RLEACCEL , * ( Uint8 * ) face - > pixels ) ;
SDLTest_AssertPass ( " Call to SDL_SetSurfaceColorKey() " ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify result from SDL_SetSurfaceColorKey, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
}
/* Convert to 32 bit to compare. */
2022-11-30 13:51:59 -07:00
rface = SDL_ConvertSurface ( face , testSurface - > format ) ;
2015-06-21 09:33:46 -06:00
SDLTest_AssertPass ( " Call to SDL_ConvertSurface() " ) ;
SDLTest_AssertCheck ( rface ! = NULL , " Verify result from SDL_ConvertSurface is not NULL " ) ;
/* Compare surface. */
2022-11-30 13:51:59 -07:00
ret = SDLTest_CompareSurfaces ( rface , face , 0 ) ;
2015-06-21 09:33:46 -06:00
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( face ) ;
2015-06-21 09:33:46 -06:00
face = NULL ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( rface ) ;
2015-06-21 09:33:46 -06:00
rface = NULL ;
return TEST_COMPLETED ;
}
2023-02-01 16:21:53 -07:00
/**
2015-06-21 09:33:46 -06:00
* Tests surface conversion across all pixel formats .
*/
2023-03-08 08:12:45 -07:00
static int surface_testCompleteSurfaceConversion ( void * arg )
2015-06-21 09:33:46 -06:00
{
Uint32 pixel_formats [ ] = {
SDL_PIXELFORMAT_INDEX8 ,
SDL_PIXELFORMAT_RGB332 ,
SDL_PIXELFORMAT_RGB444 ,
2019-11-02 16:58:52 -06:00
SDL_PIXELFORMAT_BGR444 ,
2015-06-21 09:33:46 -06:00
SDL_PIXELFORMAT_RGB555 ,
SDL_PIXELFORMAT_BGR555 ,
SDL_PIXELFORMAT_ARGB4444 ,
SDL_PIXELFORMAT_RGBA4444 ,
SDL_PIXELFORMAT_ABGR4444 ,
SDL_PIXELFORMAT_BGRA4444 ,
SDL_PIXELFORMAT_ARGB1555 ,
SDL_PIXELFORMAT_RGBA5551 ,
SDL_PIXELFORMAT_ABGR1555 ,
SDL_PIXELFORMAT_BGRA5551 ,
SDL_PIXELFORMAT_RGB565 ,
SDL_PIXELFORMAT_BGR565 ,
SDL_PIXELFORMAT_RGB24 ,
SDL_PIXELFORMAT_BGR24 ,
2023-07-01 15:01:14 -06:00
SDL_PIXELFORMAT_XRGB8888 ,
2015-06-21 09:33:46 -06:00
SDL_PIXELFORMAT_RGBX8888 ,
2023-07-01 15:01:14 -06:00
SDL_PIXELFORMAT_XBGR8888 ,
2015-06-21 09:33:46 -06:00
SDL_PIXELFORMAT_BGRX8888 ,
SDL_PIXELFORMAT_ARGB8888 ,
SDL_PIXELFORMAT_RGBA8888 ,
SDL_PIXELFORMAT_ABGR8888 ,
SDL_PIXELFORMAT_BGRA8888 ,
2024-02-02 19:24:15 -07:00
#if 0 /* We aren't testing HDR10 colorspace conversion */
2023-11-06 01:21:26 -07:00
SDL_PIXELFORMAT_XRGB2101010 ,
SDL_PIXELFORMAT_XBGR2101010 ,
2022-03-15 10:48:38 -06:00
SDL_PIXELFORMAT_ARGB2101010 ,
2023-11-06 01:21:26 -07:00
SDL_PIXELFORMAT_ABGR2101010 ,
2024-02-02 19:24:15 -07:00
# endif
2015-06-21 09:33:46 -06:00
} ;
SDL_Surface * face = NULL , * cvt1 , * cvt2 , * final ;
SDL_PixelFormat * fmt1 , * fmt2 ;
int i , j , ret = 0 ;
/* Create sample surface */
face = SDLTest_ImageFace ( ) ;
SDLTest_AssertCheck ( face ! = NULL , " Verify face surface is not NULL " ) ;
2022-11-27 09:38:43 -07:00
if ( face = = NULL ) {
2015-06-21 09:33:46 -06:00
return TEST_ABORTED ;
2022-11-27 09:38:43 -07:00
}
2015-06-21 09:33:46 -06:00
/* Set transparent pixel as the pixel at (0,0) */
if ( face - > format - > palette ) {
2022-12-27 07:36:39 -07:00
ret = SDL_SetSurfaceColorKey ( face , SDL_RLEACCEL , * ( Uint8 * ) face - > pixels ) ;
SDLTest_AssertPass ( " Call to SDL_SetSurfaceColorKey() " ) ;
SDLTest_AssertCheck ( ret = = 0 , " Verify result from SDL_SetSurfaceColorKey, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
}
2022-11-30 13:51:59 -07:00
for ( i = 0 ; i < SDL_arraysize ( pixel_formats ) ; + + i ) {
for ( j = 0 ; j < SDL_arraysize ( pixel_formats ) ; + + j ) {
2022-12-27 07:08:13 -07:00
fmt1 = SDL_CreatePixelFormat ( pixel_formats [ i ] ) ;
2024-03-11 13:16:20 -06:00
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 ] ) ;
2022-11-29 10:40:09 -07:00
cvt1 = SDL_ConvertSurface ( face , fmt1 ) ;
2024-03-11 13:16:20 -06:00
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 ] ) ;
2015-06-21 09:33:46 -06:00
2022-12-27 07:08:13 -07:00
fmt2 = SDL_CreatePixelFormat ( pixel_formats [ j ] ) ;
2024-03-11 13:16:20 -06:00
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 ] ) ;
2022-11-29 10:40:09 -07:00
cvt2 = SDL_ConvertSurface ( cvt1 , fmt2 ) ;
2024-03-11 13:16:20 -06:00
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 ] ) ;
2015-06-21 09:33:46 -06:00
2024-03-11 13:16:20 -06:00
if ( fmt1 & & fmt2 & &
fmt1 - > bytes_per_pixel = = face - > format - > bytes_per_pixel & &
2024-02-11 09:03:26 -07:00
fmt2 - > bytes_per_pixel = = face - > format - > bytes_per_pixel & &
2022-11-30 13:51:59 -07:00
( fmt1 - > Amask ! = 0 ) = = ( face - > format - > Amask ! = 0 ) & &
( fmt2 - > Amask ! = 0 ) = = ( face - > format - > Amask ! = 0 ) ) {
final = SDL_ConvertSurface ( cvt2 , face - > format ) ;
2023-11-11 02:28:24 -07:00
SDL_assert ( final ! = NULL ) ;
2015-06-21 09:33:46 -06:00
/* Compare surface. */
2022-11-30 13:51:59 -07:00
ret = SDLTest_CompareSurfaces ( face , final , 0 ) ;
2015-06-21 09:33:46 -06:00
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( final ) ;
2015-06-21 09:33:46 -06:00
}
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( cvt1 ) ;
2022-12-27 07:08:13 -07:00
SDL_DestroyPixelFormat ( fmt1 ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( cvt2 ) ;
2022-12-27 07:08:13 -07:00
SDL_DestroyPixelFormat ( fmt2 ) ;
2015-06-21 09:33:46 -06:00
}
}
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( face ) ;
2015-06-21 09:33:46 -06:00
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Tests sprite loading . A failure case .
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testLoadFailure ( void * arg )
2015-06-21 09:33:46 -06:00
{
SDL_Surface * face = SDL_LoadBMP ( " nonexistant.bmp " ) ;
SDLTest_AssertCheck ( face = = NULL , " SDL_CreateLoadBmp " ) ;
return TEST_COMPLETED ;
}
/**
2023-11-06 08:26:06 -07:00
* Tests some blitting routines .
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testBlit ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07:00
int ret ;
SDL_Surface * compareSurface ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Basic blitting */
2022-12-29 14:58:16 -07:00
testBlitBlendMode ( - 1 ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Verify result by comparing surfaces */
compareSurface = SDLTest_ImageBlit ( ) ;
ret = SDLTest_CompareSurfaces ( testSurface , compareSurface , 0 ) ;
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( compareSurface ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Tests some blitting routines with color mod
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testBlitColorMod ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07:00
int ret ;
SDL_Surface * compareSurface ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Basic blitting with color mod */
2022-12-29 14:58:16 -07:00
testBlitBlendMode ( - 2 ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Verify result by comparing surfaces */
compareSurface = SDLTest_ImageBlitColor ( ) ;
ret = SDLTest_CompareSurfaces ( testSurface , compareSurface , 0 ) ;
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( compareSurface ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Tests some blitting routines with alpha mod
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testBlitAlphaMod ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07:00
int ret ;
SDL_Surface * compareSurface ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Basic blitting with alpha mod */
2022-12-29 14:58:16 -07:00
testBlitBlendMode ( - 3 ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Verify result by comparing surfaces */
compareSurface = SDLTest_ImageBlitAlpha ( ) ;
ret = SDLTest_CompareSurfaces ( testSurface , compareSurface , 0 ) ;
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( compareSurface ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Tests some more blitting routines .
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testBlitBlendNone ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07:00
int ret ;
SDL_Surface * compareSurface ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Basic blitting */
2022-12-29 14:58:16 -07:00
testBlitBlendMode ( SDL_BLENDMODE_NONE ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Verify result by comparing surfaces */
compareSurface = SDLTest_ImageBlitBlendNone ( ) ;
ret = SDLTest_CompareSurfaces ( testSurface , compareSurface , 0 ) ;
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( compareSurface ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Tests some more blitting routines .
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testBlitBlendBlend ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07:00
int ret ;
SDL_Surface * compareSurface ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Blend blitting */
2022-12-29 14:58:16 -07:00
testBlitBlendMode ( SDL_BLENDMODE_BLEND ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Verify result by comparing surfaces */
compareSurface = SDLTest_ImageBlitBlend ( ) ;
ret = SDLTest_CompareSurfaces ( testSurface , compareSurface , 0 ) ;
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( compareSurface ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Tests some more blitting routines .
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testBlitBlendAdd ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07:00
int ret ;
SDL_Surface * compareSurface ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Add blitting */
2022-12-29 14:58:16 -07:00
testBlitBlendMode ( SDL_BLENDMODE_ADD ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Verify result by comparing surfaces */
compareSurface = SDLTest_ImageBlitBlendAdd ( ) ;
ret = SDLTest_CompareSurfaces ( testSurface , compareSurface , 0 ) ;
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( compareSurface ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Tests some more blitting routines .
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testBlitBlendMod ( void * arg )
2015-06-21 09:33:46 -06:00
{
2022-11-30 13:51:59 -07:00
int ret ;
SDL_Surface * compareSurface ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Mod blitting */
2022-12-29 14:58:16 -07:00
testBlitBlendMode ( SDL_BLENDMODE_MOD ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Verify result by comparing surfaces */
compareSurface = SDLTest_ImageBlitBlendMod ( ) ;
ret = SDLTest_CompareSurfaces ( testSurface , compareSurface , 0 ) ;
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( compareSurface ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
/**
2023-11-06 08:26:06 -07:00
* Tests some more blitting routines with loop
2015-06-21 09:33:46 -06:00
*/
2023-03-08 08:12:45 -07:00
static int surface_testBlitBlendLoop ( void * arg )
2022-11-30 13:51:59 -07:00
{
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
int ret ;
SDL_Surface * compareSurface ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* All blitting modes */
2022-12-29 14:58:16 -07:00
testBlitBlendMode ( - 4 ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Verify result by comparing surfaces */
compareSurface = SDLTest_ImageBlitBlendAll ( ) ;
ret = SDLTest_CompareSurfaces ( testSurface , compareSurface , 0 ) ;
SDLTest_AssertCheck ( ret = = 0 , " Validate result from SDLTest_CompareSurfaces, expected: 0, got: %i " , ret ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
/* Clean up. */
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( compareSurface ) ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
return TEST_COMPLETED ;
2015-06-21 09:33:46 -06:00
}
2023-03-08 08:12:45 -07:00
static int surface_testOverflow ( void * arg )
2022-06-13 09:54:42 -06:00
{
char buf [ 1024 ] ;
const char * expectedError ;
SDL_Surface * surface ;
SDL_memset ( buf , ' \0 ' , sizeof ( buf ) ) ;
expectedError = " Parameter 'width' is invalid " ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurface ( - 3 , 100 , SDL_PIXELFORMAT_INDEX8 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect negative width " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , - 1 , 1 , 4 , SDL_PIXELFORMAT_INDEX8 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect negative width " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , - 1 , 1 , 4 , SDL_PIXELFORMAT_RGBA8888 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect negative width " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
expectedError = " Parameter 'height' is invalid " ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurface ( 100 , - 3 , SDL_PIXELFORMAT_INDEX8 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect negative height " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 1 , - 1 , 4 , SDL_PIXELFORMAT_INDEX8 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect negative height " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 1 , - 1 , 4 , SDL_PIXELFORMAT_RGBA8888 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect negative height " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
expectedError = " Parameter 'pitch' is invalid " ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 4 , 1 , - 1 , SDL_PIXELFORMAT_INDEX8 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect negative pitch " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 1 , 1 , - 1 , SDL_PIXELFORMAT_RGBA8888 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect negative pitch " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2023-01-24 23:49:33 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 1 , 1 , 0 , SDL_PIXELFORMAT_RGBA8888 ) ;
SDLTest_AssertCheck ( surface = = NULL , " Should detect zero pitch " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
surface = SDL_CreateSurfaceFrom ( NULL , 1 , 1 , 0 , SDL_PIXELFORMAT_RGBA8888 ) ;
SDLTest_AssertCheck ( surface ! = NULL , " Allow zero pitch for partially set up surfaces: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
SDL_DestroySurface ( surface ) ;
2022-06-13 09:54:42 -06:00
/* Less than 1 byte per pixel: the pitch can legitimately be less than
* the width , but it must be enough to hold the appropriate number of
2023-11-17 04:42:14 -07:00
* bits per pixel . SDL_PIXELFORMAT_INDEX4 * needs 1 byte per 2 pixels . */
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 6 , 1 , 3 , SDL_PIXELFORMAT_INDEX4LSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 6px * 4 bits per px fits in 3 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2023-11-17 04:42:14 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 6 , 1 , 3 , SDL_PIXELFORMAT_INDEX4MSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 6px * 4 bits per px fits in 3 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2022-06-13 09:54:42 -06:00
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 7 , 1 , 3 , SDL_PIXELFORMAT_INDEX4LSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect pitch < width * bpp " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2023-11-17 04:42:14 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 7 , 1 , 3 , SDL_PIXELFORMAT_INDEX4MSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect pitch < width * bpp " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 7 , 1 , 4 , SDL_PIXELFORMAT_INDEX4LSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 7px * 4 bits per px fits in 4 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2023-11-17 04:42:14 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 7 , 1 , 4 , SDL_PIXELFORMAT_INDEX4MSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 7px * 4 bits per px fits in 4 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2022-06-13 09:54:42 -06:00
2023-11-17 04:43:39 -07:00
/* SDL_PIXELFORMAT_INDEX2* needs 1 byte per 4 pixels. */
surface = SDL_CreateSurfaceFrom ( buf , 12 , 1 , 3 , SDL_PIXELFORMAT_INDEX2LSB ) ;
SDLTest_AssertCheck ( surface ! = NULL , " 12px * 2 bits per px fits in 3 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
SDL_DestroySurface ( surface ) ;
surface = SDL_CreateSurfaceFrom ( buf , 12 , 1 , 3 , SDL_PIXELFORMAT_INDEX2MSB ) ;
SDLTest_AssertCheck ( surface ! = NULL , " 12px * 2 bits per px fits in 3 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
SDL_DestroySurface ( surface ) ;
surface = SDL_CreateSurfaceFrom ( buf , 13 , 1 , 3 , SDL_PIXELFORMAT_INDEX2LSB ) ;
SDLTest_AssertCheck ( surface = = NULL , " Should detect pitch < width * bpp (%d) " , surface ? surface - > pitch : 0 ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
surface = SDL_CreateSurfaceFrom ( buf , 13 , 1 , 3 , SDL_PIXELFORMAT_INDEX2MSB ) ;
SDLTest_AssertCheck ( surface = = NULL , " Should detect pitch < width * bpp " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
surface = SDL_CreateSurfaceFrom ( buf , 13 , 1 , 4 , SDL_PIXELFORMAT_INDEX2LSB ) ;
SDLTest_AssertCheck ( surface ! = NULL , " 13px * 2 bits per px fits in 4 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
SDL_DestroySurface ( surface ) ;
surface = SDL_CreateSurfaceFrom ( buf , 13 , 1 , 4 , SDL_PIXELFORMAT_INDEX2MSB ) ;
SDLTest_AssertCheck ( surface ! = NULL , " 13px * 2 bits per px fits in 4 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
SDL_DestroySurface ( surface ) ;
2022-06-13 09:54:42 -06:00
/* SDL_PIXELFORMAT_INDEX1* needs 1 byte per 8 pixels. */
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 16 , 1 , 2 , SDL_PIXELFORMAT_INDEX1LSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 16px * 1 bit per px fits in 2 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2023-11-17 04:42:14 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 16 , 1 , 2 , SDL_PIXELFORMAT_INDEX1MSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 16px * 1 bit per px fits in 2 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2022-06-13 09:54:42 -06:00
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 17 , 1 , 2 , SDL_PIXELFORMAT_INDEX1LSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect pitch < width * bpp " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2023-11-17 04:42:14 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 17 , 1 , 2 , SDL_PIXELFORMAT_INDEX1MSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect pitch < width * bpp " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 17 , 1 , 3 , SDL_PIXELFORMAT_INDEX1LSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 17px * 1 bit per px fits in 3 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2023-11-17 04:42:14 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 17 , 1 , 3 , SDL_PIXELFORMAT_INDEX1MSB ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 17px * 1 bit per px fits in 3 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2022-06-13 09:54:42 -06:00
/* SDL_PIXELFORMAT_INDEX8 and SDL_PIXELFORMAT_RGB332 require 1 byte per pixel. */
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 5 , 1 , 5 , SDL_PIXELFORMAT_RGB332 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 5px * 8 bits per px fits in 5 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 5 , 1 , 5 , SDL_PIXELFORMAT_INDEX8 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 5px * 8 bits per px fits in 5 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2022-06-13 09:54:42 -06:00
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 6 , 1 , 5 , SDL_PIXELFORMAT_RGB332 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect pitch < width * bpp " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 6 , 1 , 5 , SDL_PIXELFORMAT_INDEX8 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect pitch < width * bpp " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
/* Everything else requires more than 1 byte per pixel, and rounds up
* each pixel to an integer number of bytes ( e . g . RGB555 is really
* XRGB1555 , with 1 bit per pixel wasted ) . */
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 3 , 1 , 6 , SDL_PIXELFORMAT_RGB555 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 3px * 15 (really 16) bits per px fits in 6 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 3 , 1 , 6 , SDL_PIXELFORMAT_RGB555 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface ! = NULL , " 5px * 15 (really 16) bits per px fits in 6 bytes: %s " ,
surface ! = NULL ? " (success) " : SDL_GetError ( ) ) ;
2022-12-27 07:36:39 -07:00
SDL_DestroySurface ( surface ) ;
2022-06-13 09:54:42 -06:00
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 4 , 1 , 6 , SDL_PIXELFORMAT_RGB555 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " 4px * 15 (really 16) bits per px doesn't fit in 6 bytes " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurfaceFrom ( buf , 4 , 1 , 6 , SDL_PIXELFORMAT_XRGB1555 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " 4px * 15 (really 16) bits per px doesn't fit in 6 bytes " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-11-30 13:51:59 -07:00
if ( sizeof ( size_t ) = = 4 & & sizeof ( int ) > = 4 ) {
2024-01-18 12:41:26 -07:00
SDL_ClearError ( ) ;
expectedError = " aligning pitch would overflow " ;
2024-01-18 12:35:33 -07:00
/* 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 " ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2024-01-18 12:41:26 -07:00
SDL_ClearError ( ) ;
expectedError = " width * bpp would overflow " ;
2024-01-18 12:40:40 -07:00
/* 0x4000'0000 * 4bpp = 0x1'0000'0000 which (just) overflows */
surface = SDL_CreateSurface ( 0x40000000 , 1 , SDL_PIXELFORMAT_ARGB8888 ) ;
2022-06-13 09:54:42 -06:00
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 ( ) ) ;
2024-01-18 12:41:26 -07:00
SDL_ClearError ( ) ;
expectedError = " height * pitch would overflow " ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurface ( ( 1 < < 29 ) - 1 , ( 1 < < 29 ) - 1 , SDL_PIXELFORMAT_INDEX8 ) ;
2022-06-13 09:54:42 -06:00
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 ( ) ) ;
2024-01-18 12:41:26 -07:00
SDL_ClearError ( ) ;
expectedError = " height * pitch would overflow " ;
2022-12-01 09:04:02 -07:00
surface = SDL_CreateSurface ( ( 1 < < 15 ) + 1 , ( 1 < < 15 ) + 1 , SDL_PIXELFORMAT_ARGB8888 ) ;
2022-06-13 09:54:42 -06:00
SDLTest_AssertCheck ( surface = = NULL , " Should detect overflow in width * height * bytes per pixel " ) ;
SDLTest_AssertCheck ( SDL_strcmp ( SDL_GetError ( ) , expectedError ) = = 0 ,
" Expected \" %s \" , got \" %s \" " , expectedError , SDL_GetError ( ) ) ;
2022-11-27 09:38:43 -07:00
} else {
2022-06-13 09:54:42 -06:00
SDLTest_Log ( " Can't easily overflow size_t on this platform " ) ;
}
return TEST_COMPLETED ;
}
2024-01-20 07:31:37 -07:00
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 ] ) ;
2024-02-11 09:03:26 -07:00
offset + = ( surface - > w - 1 ) * surface - > format - > bytes_per_pixel ;
2024-01-20 07:31:37 -07:00
SDLTest_AssertCheck ( pixels [ offset ] = = 0xFF ,
" Expected pixels[%d] == 0xFF got 0x%.2X " , offset , pixels [ offset ] ) ;
SDL_DestroySurface ( surface ) ;
return TEST_COMPLETED ;
}
2015-06-21 09:33:46 -06:00
/* ================= Test References ================== */
/* Surface test cases */
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest1 = {
( SDLTest_TestCaseFp ) surface_testSaveLoadBitmap , " surface_testSaveLoadBitmap " , " Tests sprite saving and loading. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest2 = {
( SDLTest_TestCaseFp ) surface_testBlit , " surface_testBlit " , " Tests basic blitting. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest3 = {
( SDLTest_TestCaseFp ) surface_testBlitBlendNone , " surface_testBlitBlendNone " , " Tests blitting routines with none blending mode. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest4 = {
( SDLTest_TestCaseFp ) surface_testLoadFailure , " surface_testLoadFailure " , " Tests sprite loading. A failure case. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest5 = {
( SDLTest_TestCaseFp ) surface_testSurfaceConversion , " surface_testSurfaceConversion " , " Tests surface conversion. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest6 = {
( SDLTest_TestCaseFp ) surface_testCompleteSurfaceConversion , " surface_testCompleteSurfaceConversion " , " Tests surface conversion across all pixel formats " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest7 = {
( SDLTest_TestCaseFp ) surface_testBlitColorMod , " surface_testBlitColorMod " , " Tests some blitting routines with color mod. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest8 = {
( SDLTest_TestCaseFp ) surface_testBlitAlphaMod , " surface_testBlitAlphaMod " , " Tests some blitting routines with alpha mod. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest9 = {
( SDLTest_TestCaseFp ) surface_testBlitBlendLoop , " surface_testBlitBlendLoop " , " Test blitting routines with various blending modes " , TEST_DISABLED
} ;
2015-06-21 09:33:46 -06:00
/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest10 = {
( SDLTest_TestCaseFp ) surface_testBlitBlendBlend , " surface_testBlitBlendBlend " , " Tests blitting routines with blend blending mode. " , TEST_DISABLED
} ;
2015-06-21 09:33:46 -06:00
/* TODO: rewrite test case, define new test data and re-enable; current implementation fails */
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest11 = {
( SDLTest_TestCaseFp ) surface_testBlitBlendAdd , " surface_testBlitBlendAdd " , " Tests blitting routines with add blending mode. " , TEST_DISABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTest12 = {
( SDLTest_TestCaseFp ) surface_testBlitBlendMod , " surface_testBlitBlendMod " , " Tests blitting routines with mod blending mode. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference surfaceTestOverflow = {
surface_testOverflow , " surface_testOverflow " , " Test overflow detection. " , TEST_ENABLED
} ;
2022-06-13 09:54:42 -06:00
2024-01-20 07:31:37 -07:00
static const SDLTest_TestCaseReference surfaceTestFlip = {
surface_testFlip , " surface_testFlip " , " Test surface flipping. " , TEST_ENABLED
} ;
2015-06-21 09:33:46 -06:00
/* Sequence of Surface test cases */
2022-11-30 13:51:59 -07:00
static const SDLTest_TestCaseReference * surfaceTests [ ] = {
2015-06-21 09:33:46 -06:00
& surfaceTest1 , & surfaceTest2 , & surfaceTest3 , & surfaceTest4 , & surfaceTest5 ,
& surfaceTest6 , & surfaceTest7 , & surfaceTest8 , & surfaceTest9 , & surfaceTest10 ,
2024-01-20 07:31:37 -07:00
& surfaceTest11 , & surfaceTest12 , & surfaceTestOverflow , & surfaceTestFlip , NULL
2015-06-21 09:33:46 -06:00
} ;
/* Surface test suite (global) */
SDLTest_TestSuiteReference surfaceTestSuite = {
" Surface " ,
2022-12-29 14:58:16 -07:00
surfaceSetUp ,
2015-06-21 09:33:46 -06:00
surfaceTests ,
2022-12-29 14:58:16 -07:00
surfaceTearDown
2015-06-21 09:33:46 -06:00
} ;