testautomation_clipboard.c 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. /**
  2. * New/updated tests: aschiffler at ferzkopp dot net
  3. */
  4. #include <SDL3/SDL.h>
  5. #include <SDL3/SDL_test.h>
  6. /* ================= Test Case Implementation ================== */
  7. /* Test case functions */
  8. /**
  9. * \brief Check call to SDL_HasClipboardText
  10. *
  11. * \sa SDL_HasClipboardText
  12. */
  13. int clipboard_testHasClipboardText(void *arg)
  14. {
  15. SDL_HasClipboardText();
  16. SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded");
  17. return TEST_COMPLETED;
  18. }
  19. /**
  20. * \brief Check call to SDL_HasPrimarySelectionText
  21. *
  22. * \sa SDL_HasPrimarySelectionText
  23. */
  24. int clipboard_testHasPrimarySelectionText(void *arg)
  25. {
  26. SDL_HasPrimarySelectionText();
  27. SDLTest_AssertPass("Call to SDL_HasPrimarySelectionText succeeded");
  28. return TEST_COMPLETED;
  29. }
  30. /**
  31. * \brief Check call to SDL_GetClipboardText
  32. *
  33. * \sa SDL_GetClipboardText
  34. */
  35. int clipboard_testGetClipboardText(void *arg)
  36. {
  37. char *charResult;
  38. charResult = SDL_GetClipboardText();
  39. SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded");
  40. SDL_free(charResult);
  41. return TEST_COMPLETED;
  42. }
  43. /**
  44. * \brief Check call to SDL_GetPrimarySelectionText
  45. *
  46. * \sa SDL_GetPrimarySelectionText
  47. */
  48. int clipboard_testGetPrimarySelectionText(void *arg)
  49. {
  50. char *charResult;
  51. charResult = SDL_GetPrimarySelectionText();
  52. SDLTest_AssertPass("Call to SDL_GetPrimarySelectionText succeeded");
  53. SDL_free(charResult);
  54. return TEST_COMPLETED;
  55. }
  56. /**
  57. * \brief Check call to SDL_SetClipboardText
  58. * \sa SDL_SetClipboardText
  59. */
  60. int clipboard_testSetClipboardText(void *arg)
  61. {
  62. char *textRef = SDLTest_RandomAsciiString();
  63. char *text = SDL_strdup(textRef);
  64. int result;
  65. result = SDL_SetClipboardText((const char *)text);
  66. SDLTest_AssertPass("Call to SDL_SetClipboardText succeeded");
  67. SDLTest_AssertCheck(
  68. result == 0,
  69. "Validate SDL_SetClipboardText result, expected 0, got %i",
  70. result);
  71. SDLTest_AssertCheck(
  72. SDL_strcmp(textRef, text) == 0,
  73. "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'",
  74. textRef, text);
  75. /* Cleanup */
  76. SDL_free(textRef);
  77. SDL_free(text);
  78. return TEST_COMPLETED;
  79. }
  80. /**
  81. * \brief Check call to SDL_SetPrimarySelectionText
  82. * \sa SDL_SetPrimarySelectionText
  83. */
  84. int clipboard_testSetPrimarySelectionText(void *arg)
  85. {
  86. char *textRef = SDLTest_RandomAsciiString();
  87. char *text = SDL_strdup(textRef);
  88. int result;
  89. result = SDL_SetPrimarySelectionText((const char *)text);
  90. SDLTest_AssertPass("Call to SDL_SetPrimarySelectionText succeeded");
  91. SDLTest_AssertCheck(
  92. result == 0,
  93. "Validate SDL_SetPrimarySelectionText result, expected 0, got %i",
  94. result);
  95. SDLTest_AssertCheck(
  96. SDL_strcmp(textRef, text) == 0,
  97. "Verify SDL_SetPrimarySelectionText did not modify input string, expected '%s', got '%s'",
  98. textRef, text);
  99. /* Cleanup */
  100. SDL_free(textRef);
  101. SDL_free(text);
  102. return TEST_COMPLETED;
  103. }
  104. /**
  105. * \brief End-to-end test of SDL_xyzClipboardText functions
  106. * \sa SDL_HasClipboardText
  107. * \sa SDL_GetClipboardText
  108. * \sa SDL_SetClipboardText
  109. */
  110. int clipboard_testClipboardTextFunctions(void *arg)
  111. {
  112. char *textRef = SDLTest_RandomAsciiString();
  113. char *text = SDL_strdup(textRef);
  114. SDL_bool boolResult;
  115. int intResult;
  116. char *charResult;
  117. /* Clear clipboard text state */
  118. boolResult = SDL_HasClipboardText();
  119. SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded");
  120. if (boolResult == SDL_TRUE) {
  121. intResult = SDL_SetClipboardText((const char *)NULL);
  122. SDLTest_AssertPass("Call to SDL_SetClipboardText(NULL) succeeded");
  123. SDLTest_AssertCheck(
  124. intResult == 0,
  125. "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i",
  126. intResult);
  127. charResult = SDL_GetClipboardText();
  128. SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded");
  129. SDL_free(charResult);
  130. boolResult = SDL_HasClipboardText();
  131. SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded");
  132. SDLTest_AssertCheck(
  133. boolResult == SDL_FALSE,
  134. "Verify SDL_HasClipboardText returned SDL_FALSE, got %s",
  135. (boolResult) ? "SDL_TRUE" : "SDL_FALSE");
  136. }
  137. /* Empty clipboard */
  138. charResult = SDL_GetClipboardText();
  139. SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded");
  140. SDLTest_Assert(
  141. charResult != NULL,
  142. "Verify SDL_GetClipboardText did not return NULL");
  143. SDLTest_AssertCheck(
  144. charResult[0] == '\0', /* NOLINT(clang-analyzer-core.NullDereference): Checked for NULL above */
  145. "Verify SDL_GetClipboardText returned string with length 0, got length %i",
  146. (int)SDL_strlen(charResult));
  147. intResult = SDL_SetClipboardText((const char *)text);
  148. SDLTest_AssertPass("Call to SDL_SetClipboardText succeeded");
  149. SDLTest_AssertCheck(
  150. intResult == 0,
  151. "Verify result from SDL_SetClipboardText(NULL), expected 0, got %i",
  152. intResult);
  153. SDLTest_AssertCheck(
  154. SDL_strcmp(textRef, text) == 0,
  155. "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'",
  156. textRef, text);
  157. boolResult = SDL_HasClipboardText();
  158. SDLTest_AssertPass("Call to SDL_HasClipboardText succeeded");
  159. SDLTest_AssertCheck(
  160. boolResult == SDL_TRUE,
  161. "Verify SDL_HasClipboardText returned SDL_TRUE, got %s",
  162. (boolResult) ? "SDL_TRUE" : "SDL_FALSE");
  163. SDL_free(charResult);
  164. charResult = SDL_GetClipboardText();
  165. SDLTest_AssertPass("Call to SDL_GetClipboardText succeeded");
  166. SDLTest_AssertCheck(
  167. SDL_strcmp(textRef, charResult) == 0,
  168. "Verify SDL_GetClipboardText returned correct string, expected '%s', got '%s'",
  169. textRef, charResult);
  170. /* Cleanup */
  171. SDL_free(textRef);
  172. SDL_free(text);
  173. SDL_free(charResult);
  174. return TEST_COMPLETED;
  175. }
  176. /**
  177. * \brief End-to-end test of SDL_xyzPrimarySelectionText functions
  178. * \sa SDL_HasPrimarySelectionText
  179. * \sa SDL_GetPrimarySelectionText
  180. * \sa SDL_SetPrimarySelectionText
  181. */
  182. int clipboard_testPrimarySelectionTextFunctions(void *arg)
  183. {
  184. char *textRef = SDLTest_RandomAsciiString();
  185. char *text = SDL_strdup(textRef);
  186. SDL_bool boolResult;
  187. int intResult;
  188. char *charResult;
  189. /* Clear primary selection text state */
  190. boolResult = SDL_HasPrimarySelectionText();
  191. SDLTest_AssertPass("Call to SDL_HasPrimarySelectionText succeeded");
  192. if (boolResult == SDL_TRUE) {
  193. intResult = SDL_SetPrimarySelectionText((const char *)NULL);
  194. SDLTest_AssertPass("Call to SDL_SetPrimarySelectionText(NULL) succeeded");
  195. SDLTest_AssertCheck(
  196. intResult == 0,
  197. "Verify result from SDL_SetPrimarySelectionText(NULL), expected 0, got %i",
  198. intResult);
  199. charResult = SDL_GetPrimarySelectionText();
  200. SDLTest_AssertPass("Call to SDL_GetPrimarySelectionText succeeded");
  201. SDL_free(charResult);
  202. boolResult = SDL_HasPrimarySelectionText();
  203. SDLTest_AssertPass("Call to SDL_HasPrimarySelectionText succeeded");
  204. SDLTest_AssertCheck(
  205. boolResult == SDL_FALSE,
  206. "Verify SDL_HasPrimarySelectionText returned SDL_FALSE, got %s",
  207. (boolResult) ? "SDL_TRUE" : "SDL_FALSE");
  208. }
  209. /* Empty primary selection */
  210. charResult = SDL_GetPrimarySelectionText();
  211. SDLTest_AssertPass("Call to SDL_GetPrimarySelectionText succeeded");
  212. SDLTest_Assert(
  213. charResult != NULL,
  214. "Verify SDL_GetPrimarySelectionText did not return NULL");
  215. SDLTest_AssertCheck(
  216. charResult[0] == '\0', /* NOLINT(clang-analyzer-core.NullDereference): Checked for NULL above */
  217. "Verify SDL_GetPrimarySelectionText returned string with length 0, got length %i",
  218. (int)SDL_strlen(charResult));
  219. intResult = SDL_SetPrimarySelectionText((const char *)text);
  220. SDLTest_AssertPass("Call to SDL_SetPrimarySelectionText succeeded");
  221. SDLTest_AssertCheck(
  222. intResult == 0,
  223. "Verify result from SDL_SetPrimarySelectionText(NULL), expected 0, got %i",
  224. intResult);
  225. SDLTest_AssertCheck(
  226. SDL_strcmp(textRef, text) == 0,
  227. "Verify SDL_SetPrimarySelectionText did not modify input string, expected '%s', got '%s'",
  228. textRef, text);
  229. boolResult = SDL_HasPrimarySelectionText();
  230. SDLTest_AssertPass("Call to SDL_HasPrimarySelectionText succeeded");
  231. SDLTest_AssertCheck(
  232. boolResult == SDL_TRUE,
  233. "Verify SDL_HasPrimarySelectionText returned SDL_TRUE, got %s",
  234. (boolResult) ? "SDL_TRUE" : "SDL_FALSE");
  235. SDL_free(charResult);
  236. charResult = SDL_GetPrimarySelectionText();
  237. SDLTest_AssertPass("Call to SDL_GetPrimarySelectionText succeeded");
  238. SDLTest_AssertCheck(
  239. SDL_strcmp(textRef, charResult) == 0,
  240. "Verify SDL_GetPrimarySelectionText returned correct string, expected '%s', got '%s'",
  241. textRef, charResult);
  242. /* Cleanup */
  243. SDL_free(textRef);
  244. SDL_free(text);
  245. SDL_free(charResult);
  246. return TEST_COMPLETED;
  247. }
  248. /* ================= Test References ================== */
  249. /* Clipboard test cases */
  250. static const SDLTest_TestCaseReference clipboardTest1 = {
  251. (SDLTest_TestCaseFp)clipboard_testHasClipboardText, "clipboard_testHasClipboardText", "Check call to SDL_HasClipboardText", TEST_ENABLED
  252. };
  253. static const SDLTest_TestCaseReference clipboardTest2 = {
  254. (SDLTest_TestCaseFp)clipboard_testHasPrimarySelectionText, "clipboard_testHasPrimarySelectionText", "Check call to SDL_HasPrimarySelectionText", TEST_ENABLED
  255. };
  256. static const SDLTest_TestCaseReference clipboardTest3 = {
  257. (SDLTest_TestCaseFp)clipboard_testGetClipboardText, "clipboard_testGetClipboardText", "Check call to SDL_GetClipboardText", TEST_ENABLED
  258. };
  259. static const SDLTest_TestCaseReference clipboardTest4 = {
  260. (SDLTest_TestCaseFp)clipboard_testGetPrimarySelectionText, "clipboard_testGetPrimarySelectionText", "Check call to SDL_GetPrimarySelectionText", TEST_ENABLED
  261. };
  262. static const SDLTest_TestCaseReference clipboardTest5 = {
  263. (SDLTest_TestCaseFp)clipboard_testSetClipboardText, "clipboard_testSetClipboardText", "Check call to SDL_SetClipboardText", TEST_ENABLED
  264. };
  265. static const SDLTest_TestCaseReference clipboardTest6 = {
  266. (SDLTest_TestCaseFp)clipboard_testSetPrimarySelectionText, "clipboard_testSetPrimarySelectionText", "Check call to SDL_SetPrimarySelectionText", TEST_ENABLED
  267. };
  268. static const SDLTest_TestCaseReference clipboardTest7 = {
  269. (SDLTest_TestCaseFp)clipboard_testClipboardTextFunctions, "clipboard_testClipboardTextFunctions", "End-to-end test of SDL_xyzClipboardText functions", TEST_ENABLED
  270. };
  271. static const SDLTest_TestCaseReference clipboardTest8 = {
  272. (SDLTest_TestCaseFp)clipboard_testPrimarySelectionTextFunctions, "clipboard_testPrimarySelectionTextFunctions", "End-to-end test of SDL_xyzPrimarySelectionText functions", TEST_ENABLED
  273. };
  274. /* Sequence of Clipboard test cases */
  275. static const SDLTest_TestCaseReference *clipboardTests[] = {
  276. &clipboardTest1, &clipboardTest2, &clipboardTest3, &clipboardTest4, &clipboardTest5, &clipboardTest6, &clipboardTest7, &clipboardTest8, NULL
  277. };
  278. /* Clipboard test suite (global) */
  279. SDLTest_TestSuiteReference clipboardTestSuite = {
  280. "Clipboard",
  281. NULL,
  282. clipboardTests,
  283. NULL
  284. };