1 | /* |
2 | Copyright (C) 1997-2021 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 |
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], "%" SDL_PRIu64, &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 | static const char *options[] = { "[--iterations #]" , "[--execKey #]" , "[--seed string]" , "[--filter suite_name|test_name]" , NULL }; |
84 | SDLTest_CommonLogUsage(state, argv[0], options); |
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 | |