1 /**
2  * New/updated tests: aschiffler at ferzkopp dot net
3  */
4 
5 #include <stdio.h>
6 #include <string.h>
7 
8 #include "SDL.h"
9 #include "SDL_test.h"
10 
11 /* ================= Test Case Implementation ================== */
12 
13 /* Test case functions */
14 
15 /**
16  * \brief Check call to SDL_HasClipboardText
17  *
18  * \sa
19  * http://wiki.libsdl.org/SDL_HasClipboardText
20  */
21 int
clipboard_testHasClipboardText(void * arg)22 clipboard_testHasClipboardText(void *arg)
23 {
24     SDL_HasClipboardText();
25     SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded");
26 
27     return TEST_COMPLETED;
28 }
29 
30 /**
31  * \brief Check call to SDL_GetClipboardText
32  *
33  * \sa
34  * http://wiki.libsdl.org/SDL_GetClipboardText
35  */
36 int
clipboard_testGetClipboardText(void * arg)37 clipboard_testGetClipboardText(void *arg)
38 {
39     char *charResult;
40     charResult = SDL_GetClipboardText();
41     SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded");
42 
43     SDL_free(charResult);
44 
45     return TEST_COMPLETED;
46 }
47 
48 /**
49  * \brief Check call to SDL_SetClipboardText
50  * \sa
51  * http://wiki.libsdl.org/SDL_SetClipboardText
52  */
53 int
clipboard_testSetClipboardText(void * arg)54 clipboard_testSetClipboardText(void *arg)
55 {
56     char *textRef = SDLTest_RandomAsciiString();
57     char *text = SDL_strdup(textRef);
58     int result;
59     result = SDL_SetClipboardText((const char *)text);
60     SDLTest_AssertPass("Call to SDL_SetClipboardText succeeded");
61     SDLTest_AssertCheck(
62         result == 0,
63         "Validate SDL_SetClipboardText result, expected 0, got %i",
64         result);
65     SDLTest_AssertCheck(
66         SDL_strcmp(textRef, text) == 0,
67         "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'",
68         textRef, text);
69 
70     /* Cleanup */
71     SDL_free(textRef);
72     SDL_free(text);
73 
74    return TEST_COMPLETED;
75 }
76 
77 /**
78  * \brief End-to-end test of SDL_xyzClipboardText functions
79  * \sa
80  * http://wiki.libsdl.org/SDL_HasClipboardText
81  * http://wiki.libsdl.org/SDL_GetClipboardText
82  * http://wiki.libsdl.org/SDL_SetClipboardText
83  */
84 int
clipboard_testClipboardTextFunctions(void * arg)85 clipboard_testClipboardTextFunctions(void *arg)
86 {
87     char *textRef = SDLTest_RandomAsciiString();
88     char *text = SDL_strdup(textRef);
89     SDL_bool boolResult;
90     int intResult;
91     char *charResult;
92 
93     /* Clear clipboard text state */
94     boolResult = SDL_HasClipboardText();
95     SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded");
96     if (boolResult == SDL_TRUE) {
97         intResult = SDL_SetClipboardText((const char *)NULL);
98         SDLTest_AssertPass("Call to SDL_SetClipboardText(NULL) succeeded");
99         SDLTest_AssertCheck(
100             intResult == 0,
101             "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i",
102             intResult);
103         charResult = SDL_GetClipboardText();
104         SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded");
105         SDL_free(charResult);
106         boolResult = SDL_HasClipboardText();
107         SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded");
108         SDLTest_AssertCheck(
109             boolResult == SDL_FALSE,
110             "Verify SDL_HasClipboardText returned SDL_FALSE, got %s",
111             (boolResult) ? "SDL_TRUE" : "SDL_FALSE");
112     }
113 
114     /* Empty clipboard  */
115     charResult = SDL_GetClipboardText();
116     SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded");
117     SDLTest_AssertCheck(
118         charResult != NULL,
119         "Verify SDL_GetClipboardText did not return NULL");
120     SDLTest_AssertCheck(
121         charResult[0] == '\0',
122         "Verify SDL_GetClipboardText returned string with length 0, got length %i",
123         (int) SDL_strlen(charResult));
124     intResult = SDL_SetClipboardText((const char *)text);
125     SDLTest_AssertPass("Call to SDL_SetClipboardText succeeded");
126     SDLTest_AssertCheck(
127         intResult == 0,
128         "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i",
129         intResult);
130     SDLTest_AssertCheck(
131         SDL_strcmp(textRef, text) == 0,
132         "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'",
133         textRef, text);
134     boolResult = SDL_HasClipboardText();
135     SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded");
136     SDLTest_AssertCheck(
137         boolResult == SDL_TRUE,
138         "Verify SDL_HasClipboardText returned SDL_TRUE, got %s",
139         (boolResult) ? "SDL_TRUE" : "SDL_FALSE");
140     SDL_free(charResult);
141     charResult = SDL_GetClipboardText();
142     SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded");
143     SDLTest_AssertCheck(
144         SDL_strcmp(textRef, charResult) == 0,
145         "Verify SDL_GetClipboardText returned correct string, expected '%s', got '%s'",
146         textRef, charResult);
147 
148     /* Cleanup */
149     SDL_free(textRef);
150     SDL_free(text);
151     SDL_free(charResult);
152 
153    return TEST_COMPLETED;
154 }
155 
156 
157 /* ================= Test References ================== */
158 
159 /* Clipboard test cases */
160 static const SDLTest_TestCaseReference clipboardTest1 =
161         { (SDLTest_TestCaseFp)clipboard_testHasClipboardText, "clipboard_testHasClipboardText", "Check call to SDL_HasClipboardText", TEST_ENABLED };
162 
163 static const SDLTest_TestCaseReference clipboardTest2 =
164         { (SDLTest_TestCaseFp)clipboard_testGetClipboardText, "clipboard_testGetClipboardText", "Check call to SDL_GetClipboardText", TEST_ENABLED };
165 
166 static const SDLTest_TestCaseReference clipboardTest3 =
167         { (SDLTest_TestCaseFp)clipboard_testSetClipboardText, "clipboard_testSetClipboardText", "Check call to SDL_SetClipboardText", TEST_ENABLED };
168 
169 static const SDLTest_TestCaseReference clipboardTest4 =
170         { (SDLTest_TestCaseFp)clipboard_testClipboardTextFunctions, "clipboard_testClipboardTextFunctions", "End-to-end test of SDL_xyzClipboardText functions", TEST_ENABLED };
171 
172 /* Sequence of Clipboard test cases */
173 static const SDLTest_TestCaseReference *clipboardTests[] =  {
174     &clipboardTest1, &clipboardTest2, &clipboardTest3, &clipboardTest4, NULL
175 };
176 
177 /* Clipboard test suite (global) */
178 SDLTest_TestSuiteReference clipboardTestSuite = {
179     "Clipboard",
180     NULL,
181     clipboardTests,
182     NULL
183 };
184