summaryrefslogtreecommitdiff
path: root/tests/cocoa/test_keyboard.m
diff options
context:
space:
mode:
Diffstat (limited to 'tests/cocoa/test_keyboard.m')
-rw-r--r--tests/cocoa/test_keyboard.m76
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;
}