Reorganizing the project.

--HG--
rename : test/test-automation/SDL_test.h => test/test-automation/include/SDL_test.h
rename : test/test-automation/SDL_test.c => test/test-automation/src/libtest/SDL_test.c
rename : test/test-automation/common/common.c => test/test-automation/src/libtest/common/common.c
rename : test/test-automation/common/common.h => test/test-automation/src/libtest/common/common.h
rename : test/test-automation/common/images.h => test/test-automation/src/libtest/common/images.h
rename : test/test-automation/common/img_blit.c => test/test-automation/src/libtest/common/img_blit.c
rename : test/test-automation/common/img_blitblend.c => test/test-automation/src/libtest/common/img_blitblend.c
rename : test/test-automation/common/img_face.c => test/test-automation/src/libtest/common/img_face.c
rename : test/test-automation/common/img_primitives.c => test/test-automation/src/libtest/common/img_primitives.c
rename : test/test-automation/common/img_primitivesblend.c => test/test-automation/src/libtest/common/img_primitivesblend.c
rename : test/test-automation/fuzzer/fuzzer.c => test/test-automation/src/libtest/fuzzer/fuzzer.c
rename : test/test-automation/fuzzer/fuzzer.h => test/test-automation/src/libtest/fuzzer/fuzzer.h
rename : test/test-automation/fuzzer/utl_crc32.c => test/test-automation/src/libtest/fuzzer/utl_crc32.c
rename : test/test-automation/fuzzer/utl_crc32.h => test/test-automation/src/libtest/fuzzer/utl_crc32.h
rename : test/test-automation/fuzzer/utl_md5.c => test/test-automation/src/libtest/fuzzer/utl_md5.c
rename : test/test-automation/fuzzer/utl_md5.h => test/test-automation/src/libtest/fuzzer/utl_md5.h
rename : test/test-automation/fuzzer/utl_random.c => test/test-automation/src/libtest/fuzzer/utl_random.c
rename : test/test-automation/fuzzer/utl_random.h => test/test-automation/src/libtest/fuzzer/utl_random.h
rename : test/test-automation/logger_helpers.c => test/test-automation/src/libtest/logger_helpers.c
rename : test/test-automation/logger_helpers.h => test/test-automation/src/libtest/logger_helpers.h
rename : test/test-automation/plain_logger.c => test/test-automation/src/libtest/plain_logger.c
rename : test/test-automation/plain_logger.h => test/test-automation/src/libtest/plain_logger.h
rename : test/test-automation/xml.c => test/test-automation/src/libtest/xml.c
rename : test/test-automation/xml.h => test/test-automation/src/libtest/xml.h
rename : test/test-automation/xml_logger.c => test/test-automation/src/libtest/xml_logger.c
rename : test/test-automation/xml_logger.h => test/test-automation/src/libtest/xml_logger.h
rename : test/test-automation/logger.h => test/test-automation/src/runner/logger.h
rename : test/test-automation/runner.c => test/test-automation/src/runner/runner.c
rename : test/test-automation/support.c => test/test-automation/src/runner/support.c
rename : test/test-automation/support.h => test/test-automation/src/runner/support.h
rename : test/test-automation/testaudio/Makefile.am => test/test-automation/tests/testaudio/Makefile.am
rename : test/test-automation/testaudio/testaudio.c => test/test-automation/tests/testaudio/testaudio.c
rename : test/test-automation/testdummy/Makefile.am => test/test-automation/tests/testdummy/Makefile.am
rename : test/test-automation/testdummy/testdummy.c => test/test-automation/tests/testdummy/testdummy.c
rename : test/test-automation/testplatform/Makefile.am => test/test-automation/tests/testplatform/Makefile.am
rename : test/test-automation/testrect/Makefile.am => test/test-automation/tests/testrect/Makefile.am
rename : test/test-automation/testrect/testrect.c => test/test-automation/tests/testrect/testrect.c
rename : test/test-automation/testrender/Makefile.am => test/test-automation/tests/testrender/Makefile.am
rename : test/test-automation/testrender/testrender.c => test/test-automation/tests/testrender/testrender.c
rename : test/test-automation/testrwops/Makefile.am => test/test-automation/tests/testrwops/Makefile.am
rename : test/test-automation/testrwops/testrwops.c => test/test-automation/tests/testrwops/testrwops.c
rename : test/test-automation/testsurface/Makefile.am => test/test-automation/tests/testsurface/Makefile.am
rename : test/test-automation/testsurface/testsurface.c => test/test-automation/tests/testsurface/testsurface.c
This commit is contained in:
Markus Kauppila 2011-08-06 17:35:58 +03:00
parent 26ac384e0b
commit 2f3c2a946c
47 changed files with 61 additions and 579 deletions

View file

@ -0,0 +1,4 @@
lib_LTLIBRARIES = libtestaudio.la
libtestaudio_la_SOURCES = testaudio.c
libtestaudio_la_CLAGS = -fPIC -g
libtestaudio_la_LDFLAGS = `sdl-config --libs` -I ../../src/libtest/.libs/libtest.la

View file

@ -0,0 +1,140 @@
/**
* Original code: automated SDL rect test written by Edgar Simo "bobbens"
*/
#include <stdio.h>
#include <SDL/SDL.h>
#include "../../include/SDL_test.h"
/* Test cases */
static const TestCaseReference test1 =
(TestCaseReference){ "audio_printOutputDevices", "Checks available output (non-capture) device names.", TEST_ENABLED, TEST_REQUIRES_AUDIO, 0};
static const TestCaseReference test2 =
(TestCaseReference){ "audio_printInputDevices", "Checks available input (capture) device names.", TEST_ENABLED, TEST_REQUIRES_AUDIO, 0};
static const TestCaseReference test3 =
(TestCaseReference){ "audio_printAudioDrivers", "Checks available audio driver names.", TEST_ENABLED, TEST_REQUIRES_AUDIO, 0};
static const TestCaseReference test4 =
(TestCaseReference){ "audio_printCurrentAudioDriver", "Checks current audio driver name with initialized audio.", TEST_ENABLED, TEST_REQUIRES_AUDIO, 0};
/* Test suite */
extern const TestCaseReference *testSuite[] = {
&test1, &test2, &test3, &test4, NULL
};
TestCaseReference **QueryTestSuite() {
return (TestCaseReference **)testSuite;
}
/* Test case functions */
/**
* @brief Checks available output (non-capture) device names.
*/
int audio_printOutputDevices()
{
int ret;
int i, n;
char *name;
/* Start SDL. */
ret = SDL_Init( SDL_INIT_AUDIO );
AssertTrue(ret==0, "SDL_Init(SDL_INIT_AUDIO): %s", SDL_GetError());
/* Get number of devices. */
n = SDL_GetNumAudioDevices(0);
AssertTrue(n>=0, "Number of output devices < 0, reported as %i", n);
/* List devices. */
if (n>0)
{
for (i=0; i<n; i++) {
name = SDL_GetAudioDeviceName(i, 0);
AssertTrue(name != NULL, "name != NULL");
AssertTrue(strlen(name)>0, "name blank");
}
}
/* Quit SDL. */
SDL_Quit();
}
/**
* @brief Checks available input (capture) device names.
*/
int audio_printInputDevices()
{
int ret;
int i, n;
char *name;
/* Start SDL. */
ret = SDL_Init( SDL_INIT_AUDIO );
AssertTrue(ret==0, "SDL_Init(SDL_INIT_AUDIO): %s", SDL_GetError());
/* Get number of devices. */
n = SDL_GetNumAudioDevices(1);
AssertTrue(n>=0, "Number of input devices < 0, reported as %i", n);
/* List devices. */
if (n>0)
{
for (i=0; i<n; i++) {
name = SDL_GetAudioDeviceName(i, 1);
AssertTrue(name != NULL, "name != NULL");
AssertTrue(strlen(name)>0, "name empty");
}
}
/* Quit SDL. */
SDL_Quit();
}
/**
* @brief Checks available audio driver names.
*/
int audio_printAudioDrivers()
{
int i, n;
char *name;
/* Get number of drivers */
n = SDL_GetNumAudioDrivers();
AssertTrue(n>=0, "Number of audio drivers >= 0");
/* List drivers. */
if (n>0)
{
for (i=0; i<n; i++) {
name = SDL_GetAudioDriver(i);
AssertTrue(name != NULL, "name != NULL");
AssertTrue(strlen(name)>0, "name empty");
}
}
}
/**
* @brief Checks current audio driver name with initialized audio.
*/
int audio_printCurrentAudioDriver()
{
int ret;
char *name;
/* Start SDL. */
ret = SDL_Init(SDL_INIT_AUDIO);
AssertTrue(ret==0, "SDL_Init(SDL_INIT_AUDIO): %s", SDL_GetError());
/* Check current audio driver */
name = SDL_GetCurrentAudioDriver();
AssertTrue(name != NULL, "name != NULL");
AssertTrue(strlen(name)>0, "name empty");
/* Quit SDL. */
SDL_Quit();
}

View file

@ -0,0 +1,4 @@
lib_LTLIBRARIES = libtestdummy.la
libtestdummy_la_SOURCES = testdummy.c
libtestdummy_la_CLAGS = -fPIC -g
libtestdummy_la_LDFLAGS = `sdl-config --libs` -I ../../src/libtest/.libs/libtest.la

View file

@ -0,0 +1,135 @@
/*
Copyright (C) 2011 Markus Kauppila <markus.kauppila@gmail.com>
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgment in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
*/
/*! \file
* Dummy test suite for test runner. This can be used as a base for
* writing new tests. Dummy suite also works as reference to using
* various asserts and other (possible) utilities.
*/
#include <stdio.h>
#include <stdint.h>
#include <SDL/SDL.h>
#include "../../include/SDL_test.h"
/* Test case references */
static const TestCaseReference test1 =
(TestCaseReference){ "dummycase1", "description", TEST_ENABLED, 0, 4};
static const TestCaseReference test2 =
(TestCaseReference){ "dummycase2", "description", TEST_ENABLED, 0, 0};
static const TestCaseReference test3 =
(TestCaseReference){ "dummycase3", "description", TEST_ENABLED, 0, 2};
/* Test suite */
extern const TestCaseReference *testSuite[] = {
&test1, &test2, &test3, NULL
};
TestCaseReference **QueryTestSuite() {
return (TestCaseReference **)testSuite;
}
/* Create test fixture */
/*!
* SetUp function can be used to create a test fixture for test cases.
* The function will be called right before executing the test case.
*
* Note: If any assert in the function fails then the test will be skipped.
* In practice, the entire suite will be skipped if assert failure happens.
*
* Note: this function is optional.
*
* \param arg parameters given to test. Usually NULL
*/
void
SetUp(void *arg)
{
// create test fixture,
// for example, set up static variables used by test cases here
}
/*!
* TearDown function can be used to destroy a test fixture for test cases.
* The function will be called right after executing the test case.
*
* Note: this function is optional.
*
* \param arg parameters given to test. Usually NULL
*/
void
TearDown(void *arg)
{
// destroy test fixture
}
/* Test case functions */
void
dummycase1(void *arg)
{
AssertEquals(5, 5, "Assert message");
/*
for( ; 1 ; )
Log(0, "uint8 (same value): %u", RandomPositiveInteger());
// */
//Log(0, "uint8 (same value): %d", RandomUint8BoundaryValue(200, 200, SDL_TRUE));
for(; 0 ;) {
//Log(0, "int8: %u", RandomUint8BoundaryValue(0, 255, SDL_FALSE));
//Log(0, "uint16: %u", RandomUint16BoundaryValue(0, UINT16_MAX, SDL_FALSE));
//Log(0, "int32: %u", RandomUint32BoundaryValue(0, 0xFFFFFFFE, SDL_FALSE));
Log(0, "int64: %llu", RandomUint64BoundaryValue(2, 0xFFFFFFFFFFFFFFFE, SDL_FALSE));
}
for(; 0 ;) {
int min = -5;
int max = 5;
int random = RandomIntegerInRange(min, max);
if(random < min || random > max ) {
AssertFail("Generated incorrect integer");
}
Log(0, "%d", random);
}
//Log(0, "Random: %s", RandomAsciiString());
}
void
dummycase2(void *arg)
{
char *msg = "eello";
//msg[0] = 'H';
AssertTrue(1, "Assert message");
}
void
dummycase3(void *arg)
{
while(0);
//AssertTrue(1, "Assert message");
}

View file

@ -0,0 +1,4 @@
lib_LTLIBRARIES = libtestplatform.la
libtestplatform_la_SOURCES = testplatform.c
libtestplatform_la_CLAGS = -fPIC -g
libtestplatform_la_LDFLAGS = `sdl-config --libs` -I ../../src/libtest/.libs/libtest.la

View file

@ -0,0 +1,4 @@
lib_LTLIBRARIES = libtestrect.la
libtestrect_la_SOURCES = testrect.c
libtestrect_la_CLAGS = -fPIC -g
libtestrect_la_LDFLAGS = `sdl-config --libs` -I ../../src/libtest/.libs/libtest.la

View file

@ -0,0 +1,167 @@
/**
* Original code: automated SDL rect test written by Edgar Simo "bobbens"
*/
#include <stdio.h>
#include <SDL/SDL.h>
#include "../../include/SDL_test.h"
/* Test cases */
static const TestCaseReference test1 =
(TestCaseReference){ "rect_testIntersectRectAndLine", "description", TEST_ENABLED, 0, 0 };
static const TestCaseReference test2 =
(TestCaseReference){ "rect_testIntersectRectAndLineFuzzed", "Tests rect to line intersection with fuzzed values", TEST_ENABLED, 0, 0 };
/* Test suite */
extern const TestCaseReference *testSuite[] = {
&test1, &test2, NULL
};
TestCaseReference **QueryTestSuite() {
return (TestCaseReference **)testSuite;
}
/*!
* \brief Tests SDL_IntersectRectAndLine()
*
* \sa
* http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine
*/
int rect_testIntersectRectAndLine (void *arg)
{
SDL_Rect rect = { 0, 0, 32, 32 };
int x1, y1;
int x2, y2;
SDL_bool clipped;
x1 = -10;
y1 = 0;
x2 = -10;
y2 = 31;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( !clipped &&
x1 == -10 && y1 == 0 && x2 == -10 && y2 == 31,
"line outside to the left was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = 40;
y1 = 0;
x2 = 40;
y2 = 31;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( !clipped &&
x1 == 40 && y1 == 0 && x2 == 40 && y2 == 31,
"line outside to the right was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = 0;
y1 = -10;
x2 = 31;
y2 = -10;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( !clipped &&
x1 == 0 && y1 == -10 && x2 == 31 && y2 == -10,
"line outside above was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = 0;
y1 = 40;
x2 = 31;
y2 = 40;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( !clipped &&
x1 == 0 && y1 == 40 && x2 == 31 && y2 == 40,
"line outside below was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = 0;
y1 = 0;
x2 = 31;
y2 = 31;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( clipped &&
x1 == 0 && y1 == 0 && x2 == 31 && y2 == 31,
"line fully inside rect was clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = -10;
y1 = 15;
x2 = 40;
y2 = 15;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( clipped &&
x1 == 0 && y1 == 15 && x2 == 31 && y2 == 15,
"horizontal line rect was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = -32;
y1 = -32;
x2 = 63;
y2 = 63;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( clipped &&
x1 == 0 && y1 == 0 && x2 == 31 && y2 == 31,
"diagonal line to lower right was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = 63;
y1 = 63;
x2 = -32;
y2 = -32;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( clipped &&
x1 == 31 && y1 == 31 && x2 == 0 && y2 == 0,
"diagonal line to upper left was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = 63;
y1 = -32;
x2 = -32;
y2 = 63;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( clipped &&
x1 == 31 && y1 == 0 && x2 == 0 && y2 == 31,
"diagonal line to lower left was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
x1 = -32;
y1 = 63;
x2 = 63;
y2 = -32;
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( clipped &&
x1 == 0 && y1 == 31 && x2 == 31 && y2 == 0,
"diagonal line to upper right was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
}
/*!
* \brief Tests SDL_IntersectRectAndLine()
*
* \sa
* http://wiki.libsdl.org/moin.cgi/SDL_IntersectRectAndLine
*/
int rect_testIntersectRectAndLineFuzzed(void *arg)
{
SDL_Rect rect = { 0, 0, RandomInteger(), RandomInteger() };
int x1, y1;
int x2, y2;
SDL_bool clipped;
x1 = -RandomInteger();
y1 = RandomInteger();
x2 = -RandomInteger();
y2 = RandomInteger();
clipped = SDL_IntersectRectAndLine(&rect, &x1, &y1, &x2, &y2);
AssertTrue( !clipped,
/*&& x1 == -10 && y1 == 0 && x2 == -10 && y2 == 31, */
"line outside to the left was incorrectly clipped: %d,%d - %d,%d",
x1, y1, x2, y2);
}

View file

@ -0,0 +1,4 @@
lib_LTLIBRARIES = libtestrender.la
libtestrender_la_SOURCES = testrender.c
libtestrender_la_CLAGS = -fPIC -g
libtestrender_la_LDFLAGS = `sdl-config --libs` -I ../../src/libtest/.libs/libtest.la

View file

@ -0,0 +1,39 @@
/**
* Original code: automated SDL platform test written by Edgar Simo "bobbens"
* Extended and updated by aschiffler at ferzkopp dot net
*/
#include <stdio.h>
#include <SDL/SDL.h>
#include "../../include/SDL_test.h"
/*!
* Note: Port tests from "/test/automated/render" here
*
*/
/* Test cases */
static const TestCaseReference test1 =
(TestCaseReference){ "render_test", "rendery", TEST_ENABLED, 0, 0 };
/* Test suite */
extern const TestCaseReference *testSuite[] = {
&test1, NULL
};
TestCaseReference **QueryTestSuite() {
return (TestCaseReference **)testSuite;
}
/**
* @brief Document test case here
*/
int
render_test(void *arg)
{
AssertPass("");
}

View file

@ -0,0 +1,4 @@
lib_LTLIBRARIES = libtestrwops.la
libtestrwops_la_SOURCES = testrwops.c
libtestrwops_la_CLAGS = -fPIC -g
libtestrwops_la_LDFLAGS = `sdl-config --libs` -I ../../src/libtest/.libs/libtest.la

View file

@ -0,0 +1,39 @@
/**
* Original code: automated SDL platform test written by Edgar Simo "bobbens"
* Extended and updated by aschiffler at ferzkopp dot net
*/
#include <stdio.h>
#include <SDL/SDL.h>
#include "../../include/SDL_test.h"
/*!
* Note: Port tests from "/test/automated/rwops" here
*
*/
/* Test cases */
static const TestCaseReference test1 =
(TestCaseReference){ "rwops_test", "rwopsy", TEST_ENABLED, 0, 0 };
/* Test suite */
extern const TestCaseReference *testSuite[] = {
&test1, NULL
};
TestCaseReference **QueryTestSuite() {
return (TestCaseReference **)testSuite;
}
/**
* @brief Document test case here
*/
int
rwops_test(void *arg)
{
AssertPass("");
}

View file

@ -0,0 +1,4 @@
lib_LTLIBRARIES = libtestsurface.la
libtestsurface_la_SOURCES = testsurface.c
libtestsurface_la_CLAGS = -fPIC -g
libtestsurface_la_LDFLAGS = `sdl-config --libs` -I ../../src/libtest/.libs/libtest.la

View file

@ -0,0 +1,675 @@
/**
* Original code: automated SDL surface test written by Edgar Simo "bobbens"
*/
#include <stdio.h>
#include <sys/stat.h>
#include <SDL/SDL.h>
#include "../../include/SDL_test.h"
/* Test case references */
static const TestCaseReference test1 =
(TestCaseReference){ "surface_testLoad", "Tests sprite loading.", TEST_ENABLED, 0, 0};
static const TestCaseReference test2 =
(TestCaseReference){ "surface_testBlit", "Tests some blitting routines.", TEST_ENABLED, 0, 0};
static const TestCaseReference test3 =
(TestCaseReference){ "surface_testBlitBlendNone", "Tests blitting routines with none blending.", TEST_ENABLED, 0, 0};
static const TestCaseReference test4 =
(TestCaseReference){ "surface_testLoadFailure", "Tests sprite loading. A failure case.", TEST_ENABLED, 0, 0};
static const TestCaseReference test5 =
(TestCaseReference){ "surface_testConversion", "Tests sprite conversion.", TEST_ENABLED, 0, 0};
static const TestCaseReference test6 =
(TestCaseReference){ "surface_testBlitColorMod", "Tests some blitting routines with color mod.", TEST_ENABLED, 0, 0};
static const TestCaseReference test7 =
(TestCaseReference){ "surface_testBlitAlphaMod", "Tests some blitting routines with alpha mod.", TEST_ENABLED, 0, 0};
static const TestCaseReference test8 =
(TestCaseReference){ "surface_testBlitBlendLoop", "Test blittin routines with blending", TEST_ENABLED, 0, 0};
static const TestCaseReference test9 =
(TestCaseReference){ "surface_testBlitBlendBlend", "Tests blitting routines with blend blending.", TEST_ENABLED, 0, 0};
static const TestCaseReference test10 =
(TestCaseReference){ "surface_testBlitBlendAdd", "Tests blitting routines with add blending.", TEST_ENABLED, 0, 0};
static const TestCaseReference test11 =
(TestCaseReference){ "surface_testBlitBlendMod", "Tests blitting routines with modblending.", TEST_ENABLED, 0, 0};
/* Test suite */
extern const TestCaseReference *testSuite[] = {
&test1, &test2, &test3, &test4, &test5,
&test6, &test7, &test8, &test9, &test10, &test11, NULL
};
TestCaseReference **QueryTestSuite() {
return (TestCaseReference **)testSuite;
}
/* Function prototypes */
SDL_Surface *_CreateTestSurface();
/* Create test fixture */
static SDL_Surface *testsur = NULL;
void
SetUp(void *arg)
{
int ret = SDL_Init(SDL_INIT_VIDEO);
AssertTrue(ret == 0, "SDL_Init(SDL_INIT_VIDEO)");
testsur = _CreateTestSurface();
AssertTrue(testsur != NULL, "SDL_Init(SDL_INIT_VIDEO)");
}
void
TearDown(void *arg)
{
SDL_FreeSurface( testsur );
SDL_Quit();
}
/* Helper functions for the test cases */
#define TEST_SURFACE_WIDTH 80
#define TEST_SURFACE_HEIGHT 60
/*!
* Creates test surface
*/
SDL_Surface *
_CreateTestSurface()
{
SDL_Surface *testsur = NULL;
/* Create the test surface. */
testsur = SDL_CreateRGBSurface( 0,
TEST_SURFACE_WIDTH, TEST_SURFACE_HEIGHT, 32,
RMASK, GMASK, BMASK, AMASK );
if(testsur->w != TEST_SURFACE_WIDTH) {
AssertFail("Test surface width doesn't match");
}
if(testsur->h != TEST_SURFACE_HEIGHT) {
AssertFail("Test surface height doesn't match");
}
AssertTrue(testsur != NULL, "SDL_CreateRGBSurface");
return testsur;
}
/*!
* Create test surface from in-memory image
*/
SDL_Surface *
_createTestSurfaceFromMemory()
{
SDL_Surface *face = NULL;
/* Create face surface. */
face = SDL_CreateRGBSurfaceFrom( (void*)img_face.pixel_data,
img_face.width, img_face.height, 32, img_face.width*4,
#if (SDL_BYTEORDER == SDL_BIG_ENDIAN)
0xff000000, /* Red bit mask. */
0x00ff0000, /* Green bit mask. */
0x0000ff00, /* Blue bit mask. */
0x000000ff /* Alpha bit mask. */
#else
0x000000ff, /* Red bit mask. */
0x0000ff00, /* Green bit mask. */
0x00ff0000, /* Blue bit mask. */
0xff000000 /* Alpha bit mask. */
#endif
);
AssertTrue(face != NULL, "SDL_CreateRGBSurfaceFrom");
return face;
}
/**
* @brief Tests a blend mode.
*/
void _testBlitBlendMode(SDL_Surface *testsur, SDL_Surface *face, int mode)
{
int ret;
int i, j, ni, nj;
SDL_Rect rect;
AssertTrue(testsur != NULL, "testsur != NULL");
AssertTrue(face != NULL, "face != NULL");
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
/* Steps to take. */
ni = testsur->w - face->w;
nj = testsur->h - face->h;
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
/* Test blend mode. */
for (j=0; j <= nj; j+=4) {
for (i=0; i <= ni; i+=4) {
/* Set blend mode. */
ret = SDL_SetSurfaceBlendMode( face, mode );
AssertTrue(ret == 0, "SDL_SetSurfaceBlendMode");
/* Blitting. */
rect.x = i;
rect.y = j;
// TODO Add pixel level validation, SDL_BlitSurface might be no-op
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
AssertTrue(ret == 0, "SDL_BlitSurface");
}
}
}
int
_AssertFileExist(const char *filename)
{
struct stat st;
int ret = stat(filename, &st);
AssertTrue(ret == 0, "Does file %s exist", filename);
}
/* Test case functions */
/**
* @brief Tests sprite loading
*/
void surface_testLoad(void *arg)
{
int ret;
SDL_Surface *face, *rface;
/* Clear surface. */
/*
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
*/
/* Create the blit surface. */
const char *filename = "icon.bmp";
_AssertFileExist(filename);
face = SDL_LoadBMP(filename);
AssertTrue(face != NULL, "SDL_CreateLoadBmp");
AssertTrue(face->w == 32, "testing icon width");
AssertTrue(face->h == 32, "testing icon height");
}
/*!
* Tests sprite conversion.
*/
void surface_testConversion(void *arg)
{
SDL_Surface *rface = NULL, *face = NULL;
int ret = 0;
const char *filename = "icon.bmp";
_AssertFileExist(filename);
face = SDL_LoadBMP(filename);
AssertTrue(face != NULL, "SDL_CreateLoadBmp");
/* Set transparent pixel as the pixel at (0,0) */
if (face->format->palette) {
ret = SDL_SetColorKey(face, SDL_RLEACCEL, *(Uint8 *) face->pixels);
AssertTrue(ret == 0, "SDL_SetColorKey");
}
/* Convert to 32 bit to compare. */
rface = SDL_ConvertSurface( face, testsur->format, 0 );
AssertTrue(rface != NULL, "SDL_ConvertSurface");
/* See if it's the same. */
AssertTrue(surface_compare( rface, &img_face, 0 ) == 0,
"Comparing primitives output.");
/* Clean up. */
SDL_FreeSurface( rface );
SDL_FreeSurface( face );
}
/**
* @brief Tests sprite loading. A failure case.
*/
void surface_testLoadFailure(void *arg)
{
SDL_Surface *face = SDL_LoadBMP("nonexistant.bmp");
AssertTrue(face == NULL, "SDL_CreateLoadBmp");
}
/**
* @brief Tests some blitting routines.
*/
void surface_testBlit(void *arg)
{
int ret;
SDL_Rect rect;
SDL_Surface *face;
int i, j, ni, nj;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
face = _createTestSurfaceFromMemory();
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
ni = testsur->w - face->w;
nj = testsur->h - face->h;
/* Loop blit. */
for (j=0; j <= nj; j+=4) {
for (i=0; i <= ni; i+=4) {
/* Blitting. */
rect.x = i;
rect.y = j;
// TODO Add pixel level validation, SDL_BlitSurface might be no-op
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
AssertTrue(ret == 0, "SDL_BlitSurface");
}
}
/* See if it's the same. */
AssertTrue(surface_compare( testsur, &img_blit, 0 ) == 0,
"Comparing blitting output (normal blit).");
/* Clean up. */
SDL_FreeSurface( face );
}
/**
* @brief Tests some blitting routines with color mod
*/
void surface_testBlitColorMod(void *arg)
{
int ret;
SDL_Rect rect;
SDL_Surface *face;
int i, j, ni, nj;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
face = _createTestSurfaceFromMemory();
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
ni = testsur->w - face->w;
nj = testsur->h - face->h;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
/* Test blitting with colour mod. */
for (j=0; j <= nj; j+=4) {
for (i=0; i <= ni; i+=4) {
/* Set colour mod. */
ret = SDL_SetSurfaceColorMod( face, (255/nj)*j, (255/ni)*i, (255/nj)*j );
AssertTrue(ret == 0, "SDL_SetSurfaceColorMod");
/* Blitting. */
rect.x = i;
rect.y = j;
// TODO Add pixel level validation, SDL_BlitSurface might be no-op
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
AssertTrue(ret == 0, "SDL_BlitSurface");
}
}
/* See if it's the same. */
AssertTrue(surface_compare( testsur, &img_blitColour, 0 ) == 0,
"Comparing blitting output (using SDL_SetSurfaceColorMod).");
/* Clean up. */
SDL_FreeSurface( face );
}
/**
* @brief Tests some blitting routines with alpha mod
*/
void surface_testBlitAlphaMod(void *arg)
{
int ret;
SDL_Rect rect;
SDL_Surface *face;
int i, j, ni, nj;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
face = _createTestSurfaceFromMemory();
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
ni = testsur->w - face->w;
nj = testsur->h - face->h;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
/* Restore colour. */
ret = SDL_SetSurfaceColorMod( face, 255, 255, 255 );
AssertTrue(ret == 0, "SDL_SetSurfaceColorMod");
/* Test blitting with colour mod. */
for (j=0; j <= nj; j+=4) {
for (i=0; i <= ni; i+=4) {
/* Set alpha mod. */
ret = SDL_SetSurfaceAlphaMod( face, (255/ni)*i );
AssertTrue(ret == 0, "SDL_SetSurfaceAlphaMod");
/* Blitting. */
rect.x = i;
rect.y = j;
// TODO Add pixel level validation, SDL_BlitSurface might be no-op
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
AssertTrue(ret == 0, "SDL_BlitSurface");
}
}
/* See if it's the same. */
AssertTrue(surface_compare( testsur, &img_blitAlpha, 0 ) == 0,
"Comparing blitting output (using SDL_SetSurfaceAlphaMod).");
/* Clean up. */
SDL_FreeSurface( face );
}
/**
* @brief Tests some more blitting routines.
*/
void surface_testBlitBlendNone(void *arg)
{
int ret;
SDL_Rect rect;
SDL_Surface *face;
int i, j, ni, nj;
int mode;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
face = _createTestSurfaceFromMemory();
/* Set alpha mod. */
// TODO alpha value could be generated by fuzzer
ret = SDL_SetSurfaceAlphaMod( face, 100 );
AssertTrue(ret == 0, "SDL_SetSurfaceAlphaMod");
/* Steps to take. */
ni = testsur->w - face->w;
nj = testsur->h - face->h;
AssertTrue(ni != 0, "ni != 0");
AssertTrue(nj != 0, "nj != 0");
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
/* Test None. */
_testBlitBlendMode( testsur, face, SDL_BLENDMODE_NONE );
AssertTrue(surface_compare( testsur, &img_blendNone, 0 ) == 0,
"Comparing blitting blending output (using SDL_BLENDMODE_NONE).");
/* Test Blend. */
_testBlitBlendMode( testsur, face, SDL_BLENDMODE_BLEND );
AssertTrue(surface_compare( testsur, &img_blendBlend, 0 ) == 0,
"Comparing blitting blending output (using SDL_BLENDMODE_BLEND).");
/* Test Add. */
_testBlitBlendMode( testsur, face, SDL_BLENDMODE_ADD );
AssertTrue(surface_compare( testsur, &img_blendAdd, 0 ) == 0,
"Comparing blitting blending output (using SDL_BLENDMODE_ADD).");
/* Test Mod. */
_testBlitBlendMode( testsur, face, SDL_BLENDMODE_MOD );
AssertTrue(surface_compare( testsur, &img_blendMod, 0 ) == 0,
"Comparing blitting blending output not the same (using SDL_BLENDMODE_MOD).");
}
/**
* @brief Tests some more blitting routines.
*/
void surface_testBlitBlendBlend(void *arg)
{
int ret;
SDL_Rect rect;
SDL_Surface *face;
int i, j, ni, nj;
int mode;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
face = _createTestSurfaceFromMemory();
/* Set alpha mod. */
// TODO alpha value could be generated by fuzzer
ret = SDL_SetSurfaceAlphaMod( face, 100 );
AssertTrue(ret == 0, "SDL_SetSurfaceAlphaMod");
/* Steps to take. */
ni = testsur->w - face->w;
nj = testsur->h - face->h;
AssertTrue(ni != 0, "ni != 0");
AssertTrue(nj != 0, "nj != 0");
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
/* Test Blend. */
_testBlitBlendMode( testsur, face, SDL_BLENDMODE_BLEND );
AssertTrue(surface_compare( testsur, &img_blendBlend, 0 ) == 0,
"Comparing blitting blending output (using SDL_BLENDMODE_BLEND).");
}
/**
* @brief Tests some more blitting routines.
*/
void surface_testBlitBlendAdd(void *arg)
{
int ret;
SDL_Rect rect;
SDL_Surface *face;
int i, j, ni, nj;
int mode;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
face = _createTestSurfaceFromMemory();
/* Set alpha mod. */
// TODO alpha value could be generated by fuzzer
ret = SDL_SetSurfaceAlphaMod( face, 100 );
AssertTrue(ret == 0, "SDL_SetSurfaceAlphaMod");
/* Steps to take. */
ni = testsur->w - face->w;
nj = testsur->h - face->h;
AssertTrue(ni != 0, "ni != 0");
AssertTrue(nj != 0, "nj != 0");
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
/* Test Add. */
_testBlitBlendMode( testsur, face, SDL_BLENDMODE_ADD );
AssertTrue(surface_compare( testsur, &img_blendAdd, 0 ) == 0,
"Comparing blitting blending output (using SDL_BLENDMODE_ADD).");
}
/**
* @brief Tests some more blitting routines.
*/
void surface_testBlitBlendMod(void *arg)
{
int ret;
SDL_Rect rect;
SDL_Surface *face;
int i, j, ni, nj;
int mode;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
face = _createTestSurfaceFromMemory();
/* Set alpha mod. */
// TODO alpha value could be generated by fuzzer
ret = SDL_SetSurfaceAlphaMod( face, 100 );
AssertTrue(ret == 0, "SDL_SetSurfaceAlphaMod");
/* Steps to take. */
ni = testsur->w - face->w;
nj = testsur->h - face->h;
AssertTrue(ni != 0, "ni != 0");
AssertTrue(nj != 0, "nj != 0");
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
/* Test None. */
/* Test Mod. */
_testBlitBlendMode( testsur, face, SDL_BLENDMODE_MOD );
AssertTrue(surface_compare( testsur, &img_blendMod, 0 ) == 0,
"Comparing blitting blending output (using SDL_BLENDMODE_MOD).");
}
/**
* @brief Tests some more blitting routines with loop
*/
void surface_testBlitBlendLoop(void *arg) {
int ret;
SDL_Rect rect;
SDL_Surface *face;
int i, j, ni, nj;
int mode;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
face = _createTestSurfaceFromMemory();
/* Set alpha mod. */
// TODO alpha value could be generated by fuzzer
ret = SDL_SetSurfaceAlphaMod( face, 100 );
AssertTrue(ret == 0, "SDL_SetSurfaceAlphaMod");
/* Steps to take. */
ni = testsur->w - face->w;
nj = testsur->h - face->h;
AssertTrue(ni != 0, "ni != 0");
AssertTrue(nj != 0, "nj != 0");
/* Constant values. */
rect.w = face->w;
rect.h = face->h;
/* Clear surface. */
ret = SDL_FillRect( testsur, NULL,
SDL_MapRGB( testsur->format, 0, 0, 0 ) );
AssertTrue(ret == 0, "SDL_FillRect");
/* Loop blit. */
for (j=0; j <= nj; j+=4) {
for (i=0; i <= ni; i+=4) {
/* Set colour mod. */
ret = SDL_SetSurfaceColorMod( face, (255/nj)*j, (255/ni)*i, (255/nj)*j );
AssertTrue(ret == 0, "SDL_SetSurfaceColorMod");
/* Set alpha mod. */
ret = SDL_SetSurfaceAlphaMod( face, (100/ni)*i );
AssertTrue(ret == 0, "SDL_SetSurfaceAlphaMod");
/* Crazy blending mode magic. */
mode = (i/4*j/4) % 4;
if (mode==0) mode = SDL_BLENDMODE_NONE;
else if (mode==1) mode = SDL_BLENDMODE_BLEND;
else if (mode==2) mode = SDL_BLENDMODE_ADD;
else if (mode==3) mode = SDL_BLENDMODE_MOD;
ret = SDL_SetSurfaceBlendMode( face, mode );
AssertTrue(ret == 0, "SDL_SetSurfaceBlendMode");
/* Blitting. */
rect.x = i;
rect.y = j;
ret = SDL_BlitSurface( face, NULL, testsur, &rect );
AssertTrue(ret == 0, "SDL_BlitSurface");
}
}
/* Check to see if matches. */
AssertTrue(surface_compare( testsur, &img_blendAll, 0 ) == 0,
"Surface comparison (surface_compare).");
/* Clean up. */
SDL_FreeSurface( face );
}