1 /* 2 Copyright (C) 1997-2014 Sam Lantinga <slouken (at) libsdl.org> 3 4 This software is provided 'as-is', without any express or implied 5 warranty. In no event will the authors be held liable for any damages 6 arising from the use of this software. 7 8 Permission is granted to anyone to use this software for any purpose, 9 including commercial applications, and to alter it and redistribute it 10 freely. 11 */ 12 13 #include <stdlib.h> 14 #include <stdio.h> 15 #include <time.h> 16 17 #include "SDL.h" 18 #include "SDL_test.h" 19 20 #include "testautomation_suites.h" 21 22 static SDLTest_CommonState *state; 23 24 /* Call this instead of exit(), so we can clean up SDL: atexit() is evil. */ 25 static void 26 quit(int rc) 27 { 28 SDLTest_CommonQuit(state); 29 exit(rc); 30 } 31 32 int 33 main(int argc, char *argv[]) 34 { 35 int result; 36 int testIterations = 1; 37 Uint64 userExecKey = 0; 38 char *userRunSeed = NULL; 39 char *filter = NULL; 40 int i, done; 41 SDL_Event event; 42 43 /* Initialize test framework */ 44 state = SDLTest_CommonCreateState(argv, SDL_INIT_VIDEO); 45 if (!state) { 46 return 1; 47 } 48 49 /* Parse commandline */ 50 for (i = 1; i < argc;) { 51 int consumed; 52 53 consumed = SDLTest_CommonArg(state, i); 54 if (consumed == 0) { 55 consumed = -1; 56 if (SDL_strcasecmp(argv[i], "--iterations") == 0) { 57 if (argv[i + 1]) { 58 testIterations = SDL_atoi(argv[i + 1]); 59 if (testIterations < 1) testIterations = 1; 60 consumed = 2; 61 } 62 } 63 else if (SDL_strcasecmp(argv[i], "--execKey") == 0) { 64 if (argv[i + 1]) { 65 SDL_sscanf(argv[i + 1], "%llu", (long long unsigned int *)&userExecKey); 66 consumed = 2; 67 } 68 } 69 else if (SDL_strcasecmp(argv[i], "--seed") == 0) { 70 if (argv[i + 1]) { 71 userRunSeed = SDL_strdup(argv[i + 1]); 72 consumed = 2; 73 } 74 } 75 else if (SDL_strcasecmp(argv[i], "--filter") == 0) { 76 if (argv[i + 1]) { 77 filter = SDL_strdup(argv[i + 1]); 78 consumed = 2; 79 } 80 } 81 } 82 if (consumed < 0) { 83 SDL_Log("Usage: %s %s [--iterations #] [--execKey #] [--seed string] [--filter suite_name|test_name]\n", 84 argv[0], SDLTest_CommonUsage(state)); 85 quit(1); 86 } 87 88 i += consumed; 89 } 90 91 /* Initialize common state */ 92 if (!SDLTest_CommonInit(state)) { 93 quit(2); 94 } 95 96 /* Create the windows, initialize the renderers */ 97 for (i = 0; i < state->num_windows; ++i) { 98 SDL_Renderer *renderer = state->renderers[i]; 99 SDL_SetRenderDrawColor(renderer, 0xFF, 0xFF, 0xFF, 0xFF); 100 SDL_RenderClear(renderer); 101 } 102 103 /* Call Harness */ 104 result = SDLTest_RunSuites(testSuites, (const char *)userRunSeed, userExecKey, (const char *)filter, testIterations); 105 106 /* Empty event queue */ 107 done = 0; 108 for (i=0; i<100; i++) { 109 while (SDL_PollEvent(&event)) { 110 SDLTest_CommonEvent(state, &event, &done); 111 } 112 SDL_Delay(10); 113 } 114 115 /* Clean up */ 116 SDL_free(userRunSeed); 117 SDL_free(filter); 118 119 /* Shutdown everything */ 120 quit(result); 121 return(result); 122 } 123 124 /* vi: set ts=4 sw=4 expandtab: */ 125