1 /*
2   Copyright (C) 1997-2016 Sam Lantinga <slouken@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
quit(int rc)26 quit(int rc)
27 {
28     SDLTest_CommonQuit(state);
29     exit(rc);
30 }
31 
32 int
main(int argc,char * argv[])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], "%"SDL_PRIu64, (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