123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589 |
- /**
- * New/updated tests: aschiffler at ferzkopp dot net
- */
- #include <SDL3/SDL.h>
- #include <SDL3/SDL_test.h>
- #include "testautomation_suites.h"
- /* ================= Test Case Implementation ================== */
- static int clipboard_update_count;
- static bool SDLCALL ClipboardEventWatch(void *userdata, SDL_Event *event)
- {
- if (event->type == SDL_EVENT_CLIPBOARD_UPDATE) {
- ++clipboard_update_count;
- }
- return true;
- }
- enum
- {
- TEST_MIME_TYPE_TEXT,
- TEST_MIME_TYPE_CUSTOM_TEXT,
- TEST_MIME_TYPE_DATA,
- NUM_TEST_MIME_TYPES
- };
- static const char *test_mime_types[] = {
- "text/plain;charset=utf-8",
- "test/text",
- "test/data"
- };
- SDL_COMPILE_TIME_ASSERT(test_mime_types, SDL_arraysize(test_mime_types) == NUM_TEST_MIME_TYPES);
- typedef struct
- {
- const void *data;
- size_t data_size;
- } TestClipboardData;
- static int clipboard_callback_count;
- static const void * SDLCALL ClipboardDataCallback(void *userdata, const char *mime_type, size_t *length)
- {
- TestClipboardData *test_data = (TestClipboardData *)userdata;
- ++clipboard_callback_count;
- if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_TEXT]) == 0) {
- /* We're returning the string "TEST", with no termination */
- static const char *test_text = "XXX TEST XXX";
- *length = 4;
- return test_text + 4;
- }
- if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]) == 0) {
- /* We're returning the string "CUSTOM", with no termination */
- static const char *custom_text = "XXX CUSTOM XXX";
- *length = 6;
- return custom_text + 4;
- }
- if (SDL_strcmp(mime_type, test_mime_types[TEST_MIME_TYPE_DATA]) == 0) {
- *length = test_data->data_size;
- return test_data->data;
- }
- return NULL;
- }
- static int clipboard_cleanup_count;
- static void SDLCALL ClipboardCleanupCallback(void *userdata)
- {
- ++clipboard_cleanup_count;
- }
- /* Test case functions */
- /**
- * End-to-end test of SDL_xyzClipboardData functions
- * \sa SDL_HasClipboardData
- * \sa SDL_GetClipboardData
- * \sa SDL_SetClipboardData
- */
- static int SDLCALL clipboard_testClipboardDataFunctions(void *arg)
- {
- int result = -1;
- bool boolResult;
- int last_clipboard_update_count;
- int last_clipboard_callback_count;
- int last_clipboard_cleanup_count;
- void *data;
- size_t size;
- char *text;
- const char *expected_text;
- TestClipboardData test_data1 = {
- &test_data1,
- sizeof(test_data1)
- };
- TestClipboardData test_data2 = {
- &last_clipboard_callback_count,
- sizeof(last_clipboard_callback_count)
- };
- SDL_AddEventWatch(ClipboardEventWatch, NULL);
- /* Test clearing clipboard data */
- result = SDL_ClearClipboardData();
- SDLTest_AssertCheck(
- result == true,
- "Validate SDL_ClearClipboardData result, expected true, got %i",
- result);
- /* Test clearing clipboard data when it's already clear */
- last_clipboard_update_count = clipboard_update_count;
- result = SDL_ClearClipboardData();
- SDLTest_AssertCheck(
- result == true,
- "Validate SDL_ClearClipboardData result, expected true, got %i",
- result);
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count,
- "Verify clipboard update unchanged, got %d",
- clipboard_update_count - last_clipboard_update_count);
- /* Validate error handling */
- last_clipboard_update_count = clipboard_update_count;
- result = SDL_SetClipboardData(NULL, NULL, NULL, test_mime_types, SDL_arraysize(test_mime_types));
- SDLTest_AssertCheck(
- result == false,
- "Validate SDL_SetClipboardData(invalid) result, expected false, got %i",
- result);
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count,
- "Verify clipboard update count unchanged, got %d",
- clipboard_update_count - last_clipboard_update_count);
- last_clipboard_update_count = clipboard_update_count;
- result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, NULL, NULL, 0);
- SDLTest_AssertCheck(
- result == false,
- "Validate SDL_SetClipboardData(invalid) result, expected false, got %i",
- result);
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count,
- "Verify clipboard update count unchanged, got %d",
- clipboard_update_count - last_clipboard_update_count);
- /* Test setting and getting clipboard data */
- last_clipboard_update_count = clipboard_update_count;
- last_clipboard_callback_count = clipboard_callback_count;
- last_clipboard_cleanup_count = clipboard_cleanup_count;
- result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, &test_data1, test_mime_types, SDL_arraysize(test_mime_types));
- SDLTest_AssertCheck(
- result == true,
- "Validate SDL_SetClipboardData(test_data1) result, expected true, got %i",
- result);
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count + 1,
- "Verify clipboard update count incremented by 1, got %d",
- clipboard_update_count - last_clipboard_update_count);
- SDLTest_AssertCheck(
- clipboard_cleanup_count == last_clipboard_cleanup_count,
- "Verify clipboard cleanup count unchanged, got %d",
- clipboard_cleanup_count - last_clipboard_cleanup_count);
- expected_text = "TEST";
- text = SDL_GetClipboardText();
- SDLTest_AssertCheck(
- text && SDL_strcmp(text, expected_text) == 0,
- "Verify clipboard text, expected \"%s\", got \"%s\"",
- expected_text, text);
- SDL_free(text);
- boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]);
- SDLTest_AssertCheck(
- boolResult,
- "Verify has test text data, expected true, got false");
- text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT], &size);
- SDLTest_AssertCheck(
- text != NULL,
- "Verify has test text data, expected valid result, got NULL");
- if (text) {
- SDLTest_AssertCheck(
- text[size] == '\0',
- "Verify test text data, expected null termination, got %c",
- text[size]);
- SDLTest_AssertCheck(
- SDL_strcmp(text, expected_text) == 0,
- "Verify test text data, expected \"%s\", got \"%s\"",
- expected_text, text);
- }
- SDLTest_AssertCheck(
- size == SDL_strlen(expected_text),
- "Verify test text size, expected %d, got %d",
- (int)SDL_strlen(expected_text), (int)size);
- SDL_free(text);
- expected_text = "CUSTOM";
- boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]);
- SDLTest_AssertCheck(
- boolResult,
- "Verify has test text data, expected true, got false");
- text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT], &size);
- SDLTest_AssertCheck(
- text != NULL,
- "Verify has test text data, expected valid result, got NULL");
- if (text) {
- SDLTest_AssertCheck(
- text[size] == '\0',
- "Verify test text data, expected null termination, got %c",
- text[size]);
- SDLTest_AssertCheck(
- SDL_strcmp(text, expected_text) == 0,
- "Verify test text data, expected \"%s\", got \"%s\"",
- expected_text, text);
- }
- SDLTest_AssertCheck(
- size == SDL_strlen(expected_text),
- "Verify test text size, expected %d, got %d",
- (int)SDL_strlen(expected_text), (int)size);
- SDL_free(text);
- boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_DATA]);
- SDLTest_AssertCheck(
- boolResult,
- "Verify has test text data, expected true, got false");
- data = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_DATA], &size);
- SDLTest_AssertCheck(
- data && SDL_memcmp(data, test_data1.data, test_data1.data_size) == 0,
- "Verify test data");
- SDLTest_AssertCheck(
- size == test_data1.data_size,
- "Verify test data size, expected %d, got %d",
- (int)test_data1.data_size, (int)size);
- SDL_free(data);
- boolResult = SDL_HasClipboardData("test/invalid");
- SDLTest_AssertCheck(
- !boolResult,
- "Verify has test text data, expected false, got true");
- data = SDL_GetClipboardData("test/invalid", &size);
- SDLTest_AssertCheck(
- data == NULL,
- "Verify invalid data, expected NULL, got %p",
- data);
- SDLTest_AssertCheck(
- size == 0,
- "Verify invalid data size, expected 0, got %d",
- (int)size);
- SDL_free(data);
- #if 0 /* There's no guarantee how or when the callback is called */
- SDLTest_AssertCheck(
- (clipboard_callback_count == last_clipboard_callback_count + 3) ||
- (clipboard_callback_count == last_clipboard_callback_count + 4),
- "Verify clipboard callback count incremented by 3 or 4, got %d",
- clipboard_callback_count - last_clipboard_callback_count);
- #endif
- /* Test setting and getting clipboard data again */
- last_clipboard_update_count = clipboard_update_count;
- last_clipboard_callback_count = clipboard_callback_count;
- last_clipboard_cleanup_count = clipboard_cleanup_count;
- result = SDL_SetClipboardData(ClipboardDataCallback, ClipboardCleanupCallback, &test_data2, test_mime_types, SDL_arraysize(test_mime_types));
- SDLTest_AssertCheck(
- result == true,
- "Validate SDL_SetClipboardData(test_data2) result, expected true, got %i",
- result);
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count + 1,
- "Verify clipboard update count incremented by 1, got %d",
- clipboard_update_count - last_clipboard_update_count);
- SDLTest_AssertCheck(
- clipboard_cleanup_count == last_clipboard_cleanup_count + 1,
- "Verify clipboard cleanup count incremented by 1, got %d",
- clipboard_cleanup_count - last_clipboard_cleanup_count);
- expected_text = "TEST";
- text = SDL_GetClipboardText();
- SDLTest_AssertCheck(
- text && SDL_strcmp(text, expected_text) == 0,
- "Verify clipboard text, expected \"%s\", got \"%s\"",
- expected_text, text);
- SDL_free(text);
- boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]);
- SDLTest_AssertCheck(
- boolResult,
- "Verify has test text data, expected true, got false");
- text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT], &size);
- SDLTest_AssertCheck(
- text != NULL,
- "Verify has test text data, expected valid result, got NULL");
- if (text) {
- SDLTest_AssertCheck(
- text[size] == '\0',
- "Verify test text data, expected null termination, got %c",
- text[size]);
- SDLTest_AssertCheck(
- SDL_strcmp(text, expected_text) == 0,
- "Verify test text data, expected \"%s\", got \"%s\"",
- expected_text, text);
- }
- SDLTest_AssertCheck(
- size == SDL_strlen(expected_text),
- "Verify test text size, expected %d, got %d",
- (int)SDL_strlen(expected_text), (int)size);
- SDL_free(text);
- expected_text = "CUSTOM";
- boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT]);
- SDLTest_AssertCheck(
- boolResult,
- "Verify has test text data, expected true, got false");
- text = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_CUSTOM_TEXT], &size);
- SDLTest_AssertCheck(
- text != NULL,
- "Verify has test text data, expected valid result, got NULL");
- if (text) {
- SDLTest_AssertCheck(
- text[size] == '\0',
- "Verify test text data, expected null termination, got %c",
- text[size]);
- SDLTest_AssertCheck(
- SDL_strcmp(text, expected_text) == 0,
- "Verify test text data, expected \"%s\", got \"%s\"",
- expected_text, text);
- }
- SDLTest_AssertCheck(
- size == SDL_strlen(expected_text),
- "Verify test text size, expected %d, got %d",
- (int)SDL_strlen(expected_text), (int)size);
- SDL_free(text);
- data = SDL_GetClipboardData(test_mime_types[TEST_MIME_TYPE_DATA], &size);
- SDLTest_AssertCheck(
- data && SDL_memcmp(data, test_data2.data, test_data2.data_size) == 0,
- "Verify test data");
- SDLTest_AssertCheck(
- size == test_data2.data_size,
- "Verify test data size, expected %d, got %d",
- (int)test_data2.data_size, (int)size);
- SDL_free(data);
- data = SDL_GetClipboardData("test/invalid", &size);
- SDLTest_AssertCheck(
- data == NULL,
- "Verify invalid data, expected NULL, got %p",
- data);
- SDLTest_AssertCheck(
- size == 0,
- "Verify invalid data size, expected 0, got %d",
- (int)size);
- SDL_free(data);
- #if 0 /* There's no guarantee how or when the callback is called */
- SDLTest_AssertCheck(
- (clipboard_callback_count == last_clipboard_callback_count + 3) ||
- (clipboard_callback_count == last_clipboard_callback_count + 4),
- "Verify clipboard callback count incremented by 3 or 4, got %d",
- clipboard_callback_count - last_clipboard_callback_count);
- #endif
- /* Test clearing clipboard data when has data */
- last_clipboard_update_count = clipboard_update_count;
- last_clipboard_cleanup_count = clipboard_cleanup_count;
- result = SDL_ClearClipboardData();
- SDLTest_AssertCheck(
- result == true,
- "Validate SDL_ClearClipboardData result, expected true, got %i",
- result);
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count + 1,
- "Verify clipboard update count incremented by 1, got %d",
- clipboard_update_count - last_clipboard_update_count);
- SDLTest_AssertCheck(
- clipboard_cleanup_count == last_clipboard_cleanup_count + 1,
- "Verify clipboard cleanup count incremented by 1, got %d",
- clipboard_cleanup_count - last_clipboard_cleanup_count);
- boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_TEXT]);
- SDLTest_AssertCheck(
- !boolResult,
- "Verify has test text data, expected false, got true");
- boolResult = SDL_HasClipboardData(test_mime_types[TEST_MIME_TYPE_DATA]);
- SDLTest_AssertCheck(
- !boolResult,
- "Verify has test text data, expected false, got true");
- boolResult = SDL_HasClipboardData("test/invalid");
- SDLTest_AssertCheck(
- !boolResult,
- "Verify has test text data, expected false, got true");
- SDL_RemoveEventWatch(ClipboardEventWatch, NULL);
- return TEST_COMPLETED;
- }
- /**
- * End-to-end test of SDL_xyzClipboardText functions
- * \sa SDL_HasClipboardText
- * \sa SDL_GetClipboardText
- * \sa SDL_SetClipboardText
- */
- static int SDLCALL clipboard_testClipboardTextFunctions(void *arg)
- {
- char *textRef = SDLTest_RandomAsciiString();
- char *text = SDL_strdup(textRef);
- bool boolResult;
- int intResult;
- char *charResult;
- int last_clipboard_update_count;
- SDL_AddEventWatch(ClipboardEventWatch, NULL);
- /* Empty clipboard text */
- last_clipboard_update_count = clipboard_update_count;
- intResult = SDL_SetClipboardText(NULL);
- SDLTest_AssertCheck(
- intResult == true,
- "Verify result from SDL_SetClipboardText(NULL), expected true, got %i",
- intResult);
- charResult = SDL_GetClipboardText();
- SDLTest_AssertCheck(
- charResult && SDL_strcmp(charResult, "") == 0,
- "Verify SDL_GetClipboardText returned \"\", got %s",
- charResult);
- SDL_free(charResult);
- boolResult = SDL_HasClipboardText();
- SDLTest_AssertCheck(
- boolResult == false,
- "Verify SDL_HasClipboardText returned false, got %s",
- (boolResult) ? "true" : "false");
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count,
- "Verify clipboard update unchanged, got %d",
- clipboard_update_count - last_clipboard_update_count);
- /* Set clipboard text */
- last_clipboard_update_count = clipboard_update_count;
- intResult = SDL_SetClipboardText(text);
- SDLTest_AssertCheck(
- intResult == true,
- "Verify result from SDL_SetClipboardText(%s), expected true, got %i", text,
- intResult);
- SDLTest_AssertCheck(
- SDL_strcmp(textRef, text) == 0,
- "Verify SDL_SetClipboardText did not modify input string, expected '%s', got '%s'",
- textRef, text);
- boolResult = SDL_HasClipboardText();
- SDLTest_AssertCheck(
- boolResult == true,
- "Verify SDL_HasClipboardText returned true, got %s",
- (boolResult) ? "true" : "false");
- charResult = SDL_GetClipboardText();
- SDLTest_AssertCheck(
- charResult && SDL_strcmp(textRef, charResult) == 0,
- "Verify SDL_GetClipboardText returned correct string, expected '%s', got '%s'",
- textRef, charResult);
- SDL_free(charResult);
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count + 1,
- "Verify clipboard update count incremented by 1, got %d",
- clipboard_update_count - last_clipboard_update_count);
- /* Reset clipboard text */
- intResult = SDL_SetClipboardText(NULL);
- SDLTest_AssertCheck(
- intResult == true,
- "Verify result from SDL_SetClipboardText(NULL), expected true, got %i",
- intResult);
- /* Cleanup */
- SDL_free(textRef);
- SDL_free(text);
- SDL_RemoveEventWatch(ClipboardEventWatch, NULL);
- return TEST_COMPLETED;
- }
- /**
- * End-to-end test of SDL_xyzPrimarySelectionText functions
- * \sa SDL_HasPrimarySelectionText
- * \sa SDL_GetPrimarySelectionText
- * \sa SDL_SetPrimarySelectionText
- */
- static int SDLCALL clipboard_testPrimarySelectionTextFunctions(void *arg)
- {
- char *textRef = SDLTest_RandomAsciiString();
- char *text = SDL_strdup(textRef);
- bool boolResult;
- int intResult;
- char *charResult;
- int last_clipboard_update_count;
- SDL_AddEventWatch(ClipboardEventWatch, NULL);
- /* Empty primary selection */
- last_clipboard_update_count = clipboard_update_count;
- intResult = SDL_SetPrimarySelectionText(NULL);
- SDLTest_AssertCheck(
- intResult == true,
- "Verify result from SDL_SetPrimarySelectionText(NULL), expected true, got %i",
- intResult);
- charResult = SDL_GetPrimarySelectionText();
- SDLTest_AssertCheck(
- charResult && SDL_strcmp(charResult, "") == 0,
- "Verify SDL_GetPrimarySelectionText returned \"\", got %s",
- charResult);
- SDL_free(charResult);
- boolResult = SDL_HasPrimarySelectionText();
- SDLTest_AssertCheck(
- boolResult == false,
- "Verify SDL_HasPrimarySelectionText returned false, got %s",
- (boolResult) ? "true" : "false");
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count + 1,
- "Verify clipboard update count incremented by 1, got %d",
- clipboard_update_count - last_clipboard_update_count);
- /* Set primary selection */
- last_clipboard_update_count = clipboard_update_count;
- intResult = SDL_SetPrimarySelectionText(text);
- SDLTest_AssertCheck(
- intResult == true,
- "Verify result from SDL_SetPrimarySelectionText(%s), expected true, got %i", text,
- intResult);
- SDLTest_AssertCheck(
- SDL_strcmp(textRef, text) == 0,
- "Verify SDL_SetPrimarySelectionText did not modify input string, expected '%s', got '%s'",
- textRef, text);
- boolResult = SDL_HasPrimarySelectionText();
- SDLTest_AssertCheck(
- boolResult == true,
- "Verify SDL_HasPrimarySelectionText returned true, got %s",
- (boolResult) ? "true" : "false");
- charResult = SDL_GetPrimarySelectionText();
- SDLTest_AssertCheck(
- charResult && SDL_strcmp(textRef, charResult) == 0,
- "Verify SDL_GetPrimarySelectionText returned correct string, expected '%s', got '%s'",
- textRef, charResult);
- SDL_free(charResult);
- SDLTest_AssertCheck(
- clipboard_update_count == last_clipboard_update_count + 1,
- "Verify clipboard update count incremented by 1, got %d",
- clipboard_update_count - last_clipboard_update_count);
- /* Reset primary selection */
- intResult = SDL_SetPrimarySelectionText(NULL);
- SDLTest_AssertCheck(
- intResult == true,
- "Verify result from SDL_SetPrimarySelectionText(NULL), expected true, got %i",
- intResult);
- /* Cleanup */
- SDL_free(textRef);
- SDL_free(text);
- SDL_RemoveEventWatch(ClipboardEventWatch, NULL);
- return TEST_COMPLETED;
- }
- /* ================= Test References ================== */
- static const SDLTest_TestCaseReference clipboardTest1 = {
- clipboard_testClipboardDataFunctions, "clipboard_testClipboardDataFunctions", "End-to-end test of SDL_xyzClipboardData functions", TEST_ENABLED
- };
- static const SDLTest_TestCaseReference clipboardTest2 = {
- clipboard_testClipboardTextFunctions, "clipboard_testClipboardTextFunctions", "End-to-end test of SDL_xyzClipboardText functions", TEST_ENABLED
- };
- static const SDLTest_TestCaseReference clipboardTest3 = {
- clipboard_testPrimarySelectionTextFunctions, "clipboard_testPrimarySelectionTextFunctions", "End-to-end test of SDL_xyzPrimarySelectionText functions", TEST_ENABLED
- };
- /* Sequence of Clipboard test cases */
- static const SDLTest_TestCaseReference *clipboardTests[] = {
- &clipboardTest1, &clipboardTest2, &clipboardTest3, NULL
- };
- /* Clipboard test suite (global) */
- SDLTest_TestSuiteReference clipboardTestSuite = {
- "Clipboard",
- NULL,
- clipboardTests,
- NULL
- };
|