• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* See COPYING.txt for the full license governing this code. */
2 /**
3  * \file SDL_visualtest_variator_common.h
4  *
5  * Header for common functionality used by variators.
6  */
7 
8 #include <SDL_types.h>
9 #include "SDL_visualtest_sut_configparser.h"
10 
11 #ifndef _SDL_visualtest_variator_common_h
12 #define _SDL_visualtest_variator_common_h
13 
14 /** The number of variations one integer option would generate */
15 #define SDL_SUT_INTEGER_OPTION_TEST_STEPS 3
16 
17 /* Set up for C function definitions, even when using C++ */
18 #ifdef __cplusplus
19 extern "C" {
20 #endif
21 
22 /** enum for indicating the type of variator being used */
23 typedef enum SDLVisualTest_VariatorType
24 {
25     SDL_VARIATOR_NONE = 0,
26     SDL_VARIATOR_EXHAUSTIVE,
27     SDL_VARIATOR_RANDOM
28 } SDLVisualTest_VariatorType;
29 
30 /**
31  * One possible value for a command line option to the SUT.
32  */
33 typedef union SDLVisualTest_SUTOptionValue
34 {
35     /*! Value if the option is of type boolean */
36     SDL_bool bool_value;
37     /*! Value if the option is of type integer. If on is true then the option
38         will be passed to the SUT, otherwise it will be ignored. */
39     struct {
40         int value;
41         SDL_bool on;
42     } integer;
43     /*! Index of the string in the enum_values field of the corresponding
44         SDLVisualTest_SUTOption object. If on is true the option will passed
45         to the SUT, otherwise it will be ignored. */
46     struct {
47         int index;
48         SDL_bool on;
49     } enumerated;
50     /*! Value if the option is of type string. If on is true the option will
51         be passed to the SUT, otherwise it will be ignored. */
52     struct {
53         char* value;
54         SDL_bool on;
55     } string;
56 } SDLVisualTest_SUTOptionValue;
57 
58 /**
59  * Represents a valid combination of parameters that can be passed to the SUT.
60  * The ordering of the values here is the same as the ordering of the options in
61  * the SDLVisualTest_SUTConfig object for this variation.
62  */
63 typedef struct SDLVisualTest_Variation
64 {
65     /*! Pointer to array of option values */
66     SDLVisualTest_SUTOptionValue* vars;
67     /*! Number of option values in \c vars */
68     int num_vars;
69 } SDLVisualTest_Variation;
70 
71 /**
72  * "Increments" the value of the option by one and returns the carry. We wrap
73  * around to the initial value on overflow which makes the carry one.
74  * For example: "incrementing" an SDL_FALSE option makes it SDL_TRUE with no
75  * carry, and "incrementing" an SDL_TRUE option makes it SDL_FALSE with carry
76  * one. For integers, a random value in the valid range for the option is used.
77  *
78  * \param var Value of the option
79  * \param opt Object with metadata about the option
80  *
81  * \return 1 if there is a carry for enum and bool type options, 0 otherwise.
82  *         1 is always returned for integer and string type options. -1 is
83  *         returned on error.
84  */
85 int SDLVisualTest_NextValue(SDLVisualTest_SUTOptionValue* var,
86                             SDLVisualTest_SUTOption* opt);
87 
88 /**
89  * Converts a variation object into a string of command line arguments.
90  *
91  * \param variation Variation object to be converted.
92  * \param config Config object for the SUT.
93  * \param buffer Pointer to the buffer the arguments string will be copied into.
94  * \param size Size of the buffer.
95  *
96  * \return 1 on success, 0 on failure
97  */
98 int SDLVisualTest_MakeStrFromVariation(SDLVisualTest_Variation* variation,
99                                        SDLVisualTest_SUTConfig* config,
100                                        char* buffer, int size);
101 
102 /**
103  * Initializes the variation using the following rules:
104  * - Boolean options are initialized to SDL_FALSE.
105  * - Integer options are initialized to the minimum valid value they can hold.
106  * - Enum options are initialized to the first element in the list of values they
107  *   can take.
108  * - String options are initialized to the name of the option.
109  *
110  * \return 1 on success, 0 on failure.
111  */
112 int SDLVisualTest_InitVariation(SDLVisualTest_Variation* variation,
113                                 SDLVisualTest_SUTConfig* config);
114 
115 /* Ends C function definitions when using C++ */
116 #ifdef __cplusplus
117 }
118 #endif
119 
120 #endif /* _SDL_visualtest_variator_common_h */