diff options
Diffstat (limited to 'tests/cocoa/test_keyboard.m')
| -rw-r--r-- | tests/cocoa/test_keyboard.m | 76 |
1 files changed, 47 insertions, 29 deletions
diff --git a/tests/cocoa/test_keyboard.m b/tests/cocoa/test_keyboard.m index f93a745..a41011c 100644 --- a/tests/cocoa/test_keyboard.m +++ b/tests/cocoa/test_keyboard.m @@ -1,5 +1,6 @@ #import <AppKit/AppKit.h> -#include <yasl/native.h> +#include <common/private_native.h> +#include <common/backend.h> #include <assert.h> #include <math.h> #include <string.h> @@ -31,32 +32,40 @@ } @end -static struct yasl_event next(struct yasl_surface *surface, enum yasl_event_type type) +static struct yasl_private_event next(struct yasl_surface *surface, enum yasl_private_event_type type) { - struct yasl_event event; - assert(yasl_surface_poll_event(surface, &event)); + struct yasl_private_event event; + assert(yasl_private_surface_poll_event(surface, &event)); assert(event.type == type && event.surface == surface); return event; } static void empty(struct yasl_surface *surface) { - struct yasl_event event; - assert(!yasl_surface_poll_event(surface, &event)); + struct yasl_private_event event; + assert(!yasl_private_surface_poll_event(surface, &event)); } int main(void) { @autoreleasepool { - struct yasl_display *display = yasl_display_open(NULL, NULL); + struct yasl_private_display *display = yasl_private_display_open(NULL, NULL); assert(display); - struct yasl_window_spec spec = {.title = "Keyboard test", .size = {320, 240}}; - struct yasl_surface *surface = yasl_surface_create_toplevel(display, &spec); + struct yasl_private_window_spec spec = {.title = "Keyboard test", .size = {320, 240}}; + struct yasl_surface *surface = yasl_private_surface_create_toplevel(display, &spec); assert(surface); - NSWindow *window = (NSWindow *)yasl_surface_get_native_handle(surface); + surface->text_input_active = true; + surface->text_surrounding = strdup("A😀B"); + surface->text_length = strlen(surface->text_surrounding); + surface->text_begin = 1; + surface->text_end = 5; + surface->text_revision = 7; + surface->text_generation = 3; + assert(display->ops->surface_update_text_input(surface)); + NSWindow *window = (NSWindow *)yasl_private_surface_get_native_handle(surface); NSView<NSTextInputClient> *view = (id)window.contentView; - struct yasl_event event; - while (yasl_surface_poll_event(surface, &event)) {} + struct yasl_private_event event; + while (yasl_private_surface_poll_event(surface, &event)) {} InputSample *sample = [InputSample new]; NSEvent *native = (NSEvent *)sample; @@ -65,7 +74,7 @@ int main(void) sample.label = @"q"; sample.shiftedLabel = @"Q"; [view keyUp:native]; - event = next(surface, YASL_EVENT_KEY); + event = next(surface, YASL_PRIVATE_EVENT_KEY); assert(event.key.key == YASL_KEY_A && event.key.native_code == 0); assert(event.key.action == YASL_KEY_RELEASE); assert(event.key.codepoint == 'q' && event.key.shifted == 'Q'); @@ -73,29 +82,31 @@ int main(void) sample.label = @"😀"; /* One scalar, two UTF-16 units. */ sample.shiftedLabel = @"ab"; [view keyUp:native]; - event = next(surface, YASL_EVENT_KEY); + event = next(surface, YASL_PRIVATE_EVENT_KEY); assert(event.key.codepoint == 0x1f600 && event.key.shifted == 0); sample.type = NSEventTypeFlagsChanged; sample.keyCode = 56; /* Left Shift. */ sample.modifierFlags = NSEventModifierFlagShift | 0x0002; [view flagsChanged:native]; - event = next(surface, YASL_EVENT_KEY); + event = next(surface, YASL_PRIVATE_EVENT_KEY); assert(event.key.key == YASL_KEY_LEFT_SHIFT && event.key.action == YASL_KEY_PRESS); - assert(event.key.mods == YASL_MOD_SHIFT && !event.key.codepoint && !event.key.shifted); + assert(event.key.mods == YASL_PRIVATE_MOD_SHIFT && !event.key.codepoint && !event.key.shifted); sample.modifierFlags = 0; [view flagsChanged:native]; - assert(next(surface, YASL_EVENT_KEY).key.action == YASL_KEY_RELEASE); + assert(next(surface, YASL_PRIVATE_EVENT_KEY).key.action == YASL_KEY_RELEASE); /* Native text services own preedit and commits. Marked text is not an * insertion, and commits retain all UTF-8 bytes, including non-BMP. */ [view setMarkedText:@"é" selectedRange:NSMakeRange(1, 0) - replacementRange:NSMakeRange(NSNotFound, 0)]; - assert(strcmp(yasl_surface_ime_preedit(surface), "é") == 0); + replacementRange:NSMakeRange(1, 2)]; + assert(strcmp(yasl_private_surface_ime_preedit(surface), "é") == 0); empty(surface); [view insertText:@"😀é" replacementRange:NSMakeRange(NSNotFound, 0)]; - event = next(surface, YASL_EVENT_TEXT); - assert(event.text.len == strlen("😀é") && strcmp(event.text.data, "😀é") == 0); - assert(!yasl_surface_ime_preedit(surface)); + event = next(surface, YASL_PRIVATE_EVENT_TEXT_EDIT); + assert(event.text_edit.len == strlen("😀é") && strcmp(event.text_edit.data, "😀é") == 0); + assert(event.text_edit.begin == 1 && event.text_edit.end == 5); + assert(event.text_edit.revision == 7 && event.text_edit.generation == 3); + assert(!yasl_private_surface_ime_preedit(surface)); empty(surface); /* Exercise the keyDown -> interpretKeyEvents -> insertText route with @@ -104,9 +115,16 @@ int main(void) modifierFlags:0 timestamp:0 windowNumber:window.windowNumber context:nil characters:@"a" charactersIgnoringModifiers:@"a" isARepeat:NO keyCode:0]; [view keyDown:press]; - assert(next(surface, YASL_EVENT_KEY).key.key == YASL_KEY_A); - event = next(surface, YASL_EVENT_TEXT); - assert(event.text.len == 1 && event.text.data[0] == 'a'); + assert(next(surface, YASL_PRIVATE_EVENT_KEY).key.key == YASL_KEY_A); + event = next(surface, YASL_PRIVATE_EVENT_TEXT_EDIT); + assert(event.text_edit.len == 1 && event.text_edit.data[0] == 'a'); + assert(event.text_edit.begin == 1 && event.text_edit.end == 5); + empty(surface); + + surface->text_end = 1; + [view doCommandBySelector:@selector(deleteBackward)]; + event = next(surface, YASL_PRIVATE_EVENT_TEXT_EDIT); + assert(event.text_edit.len == 0 && event.text_edit.begin == 0 && event.text_edit.end == 1); empty(surface); sample.type = NSEventTypeScrollWheel; @@ -114,20 +132,20 @@ int main(void) sample.scrollingDeltaX = -2.5; sample.scrollingDeltaY = 1.25; [view scrollWheel:native]; - event = next(surface, YASL_EVENT_POINTER_SCROLL); + event = next(surface, YASL_PRIVATE_EVENT_POINTER_SCROLL); assert(event.pointer.scroll.x == 0.25 && event.pointer.scroll.y == -0.125); sample.hasPreciseScrollingDeltas = NO; sample.scrollingDeltaX = 1; sample.scrollingDeltaY = -1; [view scrollWheel:native]; - event = next(surface, YASL_EVENT_POINTER_SCROLL); + event = next(surface, YASL_PRIVATE_EVENT_POINTER_SCROLL); assert(event.pointer.scroll.x == -1 && event.pointer.scroll.y == 1); sample.scrollingDeltaX = NAN; [view scrollWheel:native]; empty(surface); [sample release]; - yasl_surface_destroy(surface); - yasl_display_close(display); + yasl_private_surface_destroy(surface); + yasl_private_display_close(display); } return 0; } |
