Test of CPC Formats
This commit is contained in:
parent
e2321c2abe
commit
64b2761f14
@ -27,9 +27,12 @@
|
||||
/// Unit tests for picture format loaders/savers
|
||||
///
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "../global.h"
|
||||
#include "../fileformats.h"
|
||||
#include "../gfx2log.h"
|
||||
#include "../gfx2mem.h"
|
||||
|
||||
#define TESTFMT(fmt, sample) { # fmt, Test_ ## fmt, sample },
|
||||
static const struct {
|
||||
@ -48,7 +51,9 @@ static const struct {
|
||||
TESTFMT(ICO, "ico/gitlab_favicon.ico")
|
||||
TESTFMT(C64, "c64/multicolor/ARKANOID.KOA")
|
||||
TESTFMT(GPX, "c64/pixcen/Cyberbird.gpx")
|
||||
//TESTFMT(SCR, "CPC_SCR/DANCEOFF.SCR")
|
||||
TESTFMT(SCR, "CPC_SCR/DANCEOFF.SCR")
|
||||
TESTFMT(CM5, "cpcmode5/spidey.cm5")
|
||||
TESTFMT(PPH, "pph/BF.PPH")
|
||||
TESTFMT(MOTO,"thomson/exocet-alientis.map")
|
||||
TESTFMT(HGR, "apple2/hgr/pop-swordfight.hgr")
|
||||
TESTFMT(ACBM,"iff/ACBM/Jupiter_alt.pic")
|
||||
@ -66,12 +71,41 @@ static const struct {
|
||||
{ NULL, NULL, NULL}
|
||||
};
|
||||
|
||||
/**
|
||||
* Set the context File_directory and File_name
|
||||
*/
|
||||
static void context_set_file_path(T_IO_Context * context, const char * filepath)
|
||||
{
|
||||
char * p = strrchr(filepath, '/');
|
||||
|
||||
if (context->File_name)
|
||||
free(context->File_name);
|
||||
if (context->File_directory)
|
||||
free(context->File_directory);
|
||||
|
||||
if (p != NULL)
|
||||
{
|
||||
size_t dirlen = p - filepath;
|
||||
context->File_name = strdup(p + 1);
|
||||
context->File_directory = GFX2_malloc(dirlen + 1);
|
||||
memcpy(context->File_directory, filepath, dirlen);
|
||||
context->File_directory[dirlen] = '\0';
|
||||
}
|
||||
else
|
||||
{
|
||||
context->File_name = strdup(filepath);
|
||||
context->File_directory = strdup(".");
|
||||
}
|
||||
}
|
||||
|
||||
int Test_Formats(void)
|
||||
{
|
||||
T_IO_Context context;
|
||||
char path[256];
|
||||
FILE * f;
|
||||
int i, j;
|
||||
|
||||
memset(&context, 0, sizeof(context));
|
||||
for (i = 0; formats[i].name != NULL; i++)
|
||||
{
|
||||
GFX2_Log(GFX2_DEBUG, "Testing format %s\n", formats[i].name);
|
||||
@ -83,8 +117,9 @@ int Test_Formats(void)
|
||||
GFX2_Log(GFX2_ERROR, "error opening %s\n", path);
|
||||
return 0;
|
||||
}
|
||||
context_set_file_path(&context, path);
|
||||
File_error = 1;
|
||||
formats[i].Test(NULL, f);
|
||||
formats[i].Test(&context, f);
|
||||
fclose(f);
|
||||
if (File_error != 0)
|
||||
{
|
||||
@ -96,6 +131,9 @@ int Test_Formats(void)
|
||||
{
|
||||
if (j == i)
|
||||
continue;
|
||||
// skip Test_HGR(*.SCR) because Test_HGR() only tests for file size
|
||||
if (strcmp(formats[i].name, "HGR") == 0 && strcmp(formats[j].name, "SCR") == 0)
|
||||
continue;
|
||||
snprintf(path, sizeof(path), "../tests/pic-samples/%s", formats[j].sample);
|
||||
f = fopen(path, "rb");
|
||||
if (f == NULL)
|
||||
@ -103,8 +141,9 @@ int Test_Formats(void)
|
||||
GFX2_Log(GFX2_ERROR, "error opening %s\n", path);
|
||||
return 0;
|
||||
}
|
||||
context_set_file_path(&context, path);
|
||||
File_error = 1;
|
||||
formats[i].Test(NULL, f);
|
||||
formats[i].Test(&context, f);
|
||||
fclose(f);
|
||||
if (File_error == 0)
|
||||
{
|
||||
@ -113,5 +152,8 @@ int Test_Formats(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
//Destroy_context(&context);
|
||||
free(context.File_name);
|
||||
free(context.File_directory);
|
||||
return 1; // OK
|
||||
}
|
||||
|
||||
@ -78,8 +78,12 @@ static const struct {
|
||||
{ NULL, NULL}
|
||||
};
|
||||
|
||||
/**
|
||||
* Initializations for test program
|
||||
*/
|
||||
void init(void)
|
||||
{
|
||||
srandom(time(NULL));
|
||||
#ifdef ENABLE_FILENAMES_ICONV
|
||||
// iconv is used to convert filenames
|
||||
cd = iconv_open(TOCODE, FROMCODE); // From UTF8 to ANSI
|
||||
@ -102,8 +106,8 @@ int main(int argc, char * * argv)
|
||||
int i, r;
|
||||
int fail = 0;
|
||||
|
||||
srandom(time(NULL));
|
||||
GFX2_verbosity_level = GFX2_DEBUG;
|
||||
init();
|
||||
|
||||
for (i = 0; tests[i].test_func != 0; i++)
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user