239 lines
6.1 KiB
C
239 lines
6.1 KiB
C
#include "harness/hooks.h"
|
|
#include "harness/os.h"
|
|
#include "tests.h"
|
|
#include <assert.h>
|
|
#include <errno.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
#include <string.h>
|
|
#include <sys/stat.h>
|
|
|
|
#define UNITY_USE_COMMAND_LINE_ARGS 1
|
|
|
|
#include "framework/unity.h"
|
|
|
|
#include "common/errors.h"
|
|
#include "common/newgame.h"
|
|
#include "common/utility.h"
|
|
|
|
#include "common/drmem.h"
|
|
#include "common/globvars.h"
|
|
#include "common/grafdata.h"
|
|
#include "harness.h"
|
|
#include "harness/config.h"
|
|
#include "harness/os.h"
|
|
|
|
#define debug(format_, ...) fprintf(stderr, format_, __VA_ARGS__)
|
|
|
|
#define debug(format_, ...) fprintf(stderr, format_, __VA_ARGS__)
|
|
|
|
extern void test_utility_suite();
|
|
extern void test_loading_suite();
|
|
extern void test_controls_suite();
|
|
extern void test_input_suite();
|
|
extern void test_dossys_suite();
|
|
extern void test_init_suite();
|
|
extern void test_graphics_suite();
|
|
extern void test_powerup_suite();
|
|
extern void test_flicplay_suite();
|
|
|
|
char* root_dir;
|
|
|
|
void setUp(void) {
|
|
gEncryption_method = 0;
|
|
}
|
|
|
|
void tearDown(void) {
|
|
}
|
|
|
|
static const char* temp_folder;
|
|
static char temp_folder_buffer[PATH_MAX + 1];
|
|
|
|
static void setup_temp_folder() {
|
|
#ifdef _WIN32
|
|
DWORD res;
|
|
char tmpBuffer[PATH_MAX + 1];
|
|
res = GetTempPathA(sizeof(tmpBuffer), tmpBuffer);
|
|
if (res == 0) {
|
|
abort();
|
|
}
|
|
sprintf(temp_folder_buffer, "%s\\dethrace_test_%d", tmpBuffer, GetCurrentProcessId());
|
|
#else
|
|
sprintf(temp_folder_buffer, "/tmp/dethrace_test_%d", getpid());
|
|
#endif
|
|
temp_folder = temp_folder_buffer;
|
|
}
|
|
|
|
void TEST_ASSERT_EQUAL_FILE_CONTENTS_BINARY(const uint8_t* expected, char* filename, int len) {
|
|
FILE* f;
|
|
long filesize;
|
|
int res;
|
|
f = fopen(filename, "rb");
|
|
TEST_ASSERT_NOT_NULL(f);
|
|
res = fseek(f, 0, SEEK_END);
|
|
TEST_ASSERT_NOT_EQUAL(-1, res);
|
|
filesize = ftell(f);
|
|
TEST_ASSERT_NOT_EQUAL(-1, filesize);
|
|
TEST_ASSERT_EQUAL(len, filesize);
|
|
fseek(f, 0, SEEK_SET);
|
|
uint8_t* tmpBuffer = (uint8_t*)malloc(filesize);
|
|
res = fread(tmpBuffer, filesize, 1, f);
|
|
TEST_ASSERT_EQUAL_INT(1, res);
|
|
fclose(f);
|
|
TEST_ASSERT_EQUAL_MEMORY(expected, tmpBuffer, len);
|
|
free(tmpBuffer);
|
|
}
|
|
|
|
void TEST_ASSERT_EQUAL_FILE_TEXT(const char* expected, char* filename) {
|
|
FILE* f;
|
|
char* tmpBuffer;
|
|
long filesize;
|
|
int res;
|
|
int len;
|
|
|
|
len = strlen(expected);
|
|
f = fopen(filename, "rb");
|
|
TEST_ASSERT_NOT_NULL(f);
|
|
res = fseek(f, 0, SEEK_END);
|
|
TEST_ASSERT_NOT_EQUAL(-1, res);
|
|
filesize = ftell(f);
|
|
TEST_ASSERT_NOT_EQUAL(-1, filesize);
|
|
fseek(f, 0, SEEK_SET);
|
|
tmpBuffer = (char*)malloc(filesize + 1);
|
|
TEST_ASSERT_NOT_NULL(tmpBuffer);
|
|
res = fread(tmpBuffer, 1, filesize, f);
|
|
tmpBuffer[filesize] = '\0';
|
|
fclose(f);
|
|
TEST_ASSERT_EQUAL_STRING(expected, tmpBuffer);
|
|
TEST_ASSERT_EQUAL_INT(filesize, res);
|
|
TEST_ASSERT_EQUAL_INT(len, filesize);
|
|
TEST_ASSERT_EQUAL_INT(filesize, strlen(tmpBuffer));
|
|
free(tmpBuffer);
|
|
}
|
|
|
|
void setup_global_vars(int argc, char* argv[]) {
|
|
strcpy(gDir_separator, "/");
|
|
|
|
root_dir = getenv("DETHRACE_ROOT_DIR");
|
|
if (root_dir != NULL) {
|
|
printf("DETHRACE_ROOT_DIR: %s\n", root_dir);
|
|
if (chdir(root_dir)) {
|
|
fprintf(stderr, "Failed to chdir to \"%s\" (reason=\"%s\")\n", root_dir, strerror(errno));
|
|
}
|
|
strncpy(gApplication_path, root_dir, 256);
|
|
strcat(gApplication_path, "/DATA");
|
|
} else {
|
|
printf("WARN: DETHRACE_ROOT_DIR is not defined. Skipping tests which require it\n");
|
|
strcpy(gApplication_path, ".");
|
|
}
|
|
|
|
BrV1dbBeginWrapper_Float();
|
|
CreateStainlessClasses();
|
|
|
|
gCurrent_graf_data = &gGraf_data[0];
|
|
gGraf_data_index = 0;
|
|
gGraf_spec_index = 0;
|
|
gRender_screen = BrPixelmapAllocate(BR_PMT_INDEX_8, 320, 200, NULL, 0);
|
|
|
|
gSelf = BrActorAllocate(BR_ACTOR_NONE, NULL);
|
|
gUniverse_actor = BrActorAllocate(BR_ACTOR_NONE, NULL);
|
|
gNon_track_actor = BrActorAllocate(BR_ACTOR_NONE, NULL);
|
|
|
|
strcpy(gBasic_car_names[0], "BLKEAGLE.TXT");
|
|
|
|
OpenDiagnostics();
|
|
|
|
setup_temp_folder();
|
|
printf("INFO: temp folder is \"%s\"\n", temp_folder);
|
|
|
|
harness_debug_level = 7;
|
|
harness_game_info.mode = eGame_carmageddon;
|
|
|
|
int fake_argc = 0;
|
|
char* fake_argv[3];
|
|
fake_argv[fake_argc++] = argv[0];
|
|
fake_argv[fake_argc++] = "--platform=null";
|
|
if (getenv("NO_SIGNAL_HANDLER") != NULL) {
|
|
fake_argv[fake_argc++] = "--no-signal-handler";
|
|
}
|
|
|
|
Harness_ForceNullPlatform();
|
|
|
|
Harness_Init(&fake_argc, fake_argv);
|
|
}
|
|
|
|
int has_data_directory() {
|
|
return root_dir != NULL;
|
|
}
|
|
|
|
void create_temp_file(char buffer[PATH_MAX + 1], const char* prefix) {
|
|
#ifdef _WIN32
|
|
DWORD attributes;
|
|
UINT res;
|
|
BOOL success;
|
|
|
|
attributes = GetFileAttributesA(temp_folder);
|
|
if ((attributes == INVALID_FILE_ATTRIBUTES) || ((attributes & FILE_ATTRIBUTE_DIRECTORY) == 0)) {
|
|
LOG_TRACE("Temporary folder does not exist => creating");
|
|
success = CreateDirectoryA(temp_folder, NULL);
|
|
if (success == 0) {
|
|
abort();
|
|
}
|
|
}
|
|
res = GetTempFileNameA(temp_folder, prefix, 0, buffer);
|
|
if (res == 0) {
|
|
abort();
|
|
}
|
|
strcat(buffer, prefix);
|
|
#else
|
|
int fdres;
|
|
struct stat sb;
|
|
int res;
|
|
|
|
res = stat(temp_folder, &sb);
|
|
if (res == -1 || !S_ISDIR(sb.st_mode)) {
|
|
res = mkdir(temp_folder, 0770);
|
|
if (res == -1) {
|
|
fprintf(stderr, "mmkdir(\"%s\") failed: %s\n", temp_folder, strerror(errno));
|
|
abort();
|
|
}
|
|
}
|
|
strcpy(buffer, temp_folder);
|
|
strcat(buffer, "/");
|
|
strcat(buffer, prefix);
|
|
strcat(buffer, "XXXXXX");
|
|
fdres = mkstemp(buffer);
|
|
if (fdres == -1) {
|
|
fprintf(stderr, "mkstemp(\"%s\") failed: %s\n", buffer, strerror(errno));
|
|
abort();
|
|
}
|
|
close(fdres);
|
|
#endif
|
|
}
|
|
|
|
int main(int argc, char** argv) {
|
|
|
|
UNITY_BEGIN();
|
|
|
|
if (UnityParseOptions(argc, argv) != 0) {
|
|
exit(1);
|
|
}
|
|
|
|
setup_global_vars(argc, argv);
|
|
|
|
printf("Completed setup\n");
|
|
|
|
// DETHRACE
|
|
test_utility_suite();
|
|
test_init_suite();
|
|
test_loading_suite();
|
|
test_controls_suite();
|
|
test_input_suite();
|
|
test_dossys_suite();
|
|
test_graphics_suite();
|
|
test_powerup_suite();
|
|
test_flicplay_suite();
|
|
|
|
return UNITY_END();
|
|
}
|