1 /* 2 * Copyright 2013 Ran Benita <ran234 (at) gmail.com> 3 * 4 * Permission is hereby granted, free of charge, to any person obtaining a 5 * copy of this software and associated documentation files (the "Software"), 6 * to deal in the Software without restriction, including without limitation 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense, 8 * and/or sell copies of the Software, and to permit persons to whom the 9 * Software is furnished to do so, subject to the following conditions: 10 * 11 * The above copyright notice and this permission notice (including the next 12 * paragraph) shall be included in all copies or substantial portions of the 13 * Software. 14 * 15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 18 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 20 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 21 * DEALINGS IN THE SOFTWARE. 22 */ 23 24 #include "test.h" 25 #include "xkbcommon/xkbcommon-x11.h" 26 27 int 28 main(void) 29 { 30 struct xkb_context *ctx = test_get_context(0); 31 xcb_connection_t *conn; 32 int ret; 33 int32_t device_id; 34 struct xkb_keymap *keymap; 35 struct xkb_state *state; 36 char *dump; 37 38 /* 39 * The next two steps depend on a running X server with XKB support. 40 * If it fails, it's not necessarily an actual problem with the code. 41 * So we don't want a FAIL here. 42 */ 43 conn = xcb_connect(NULL, NULL); 44 if (!conn || xcb_connection_has_error(conn)) 45 return SKIP_TEST; 46 47 ret = xkb_x11_setup_xkb_extension(conn, 48 XKB_X11_MIN_MAJOR_XKB_VERSION, 49 XKB_X11_MIN_MINOR_XKB_VERSION, 50 XKB_X11_SETUP_XKB_EXTENSION_NO_FLAGS, 51 NULL, NULL, NULL, NULL); 52 if (!ret) 53 return SKIP_TEST; 54 55 device_id = xkb_x11_get_core_keyboard_device_id(conn); 56 assert(device_id != -1); 57 58 keymap = xkb_x11_keymap_new_from_device(ctx, conn, device_id, 59 XKB_KEYMAP_COMPILE_NO_FLAGS); 60 assert(keymap); 61 62 state = xkb_x11_state_new_from_device(keymap, conn, device_id); 63 assert(state); 64 65 dump = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_USE_ORIGINAL_FORMAT); 66 assert(dump); 67 fputs(dump, stdout); 68 69 /* TODO: Write some X11-specific tests. */ 70 71 free(dump); 72 xkb_state_unref(state); 73 xkb_keymap_unref(keymap); 74 xcb_disconnect(conn); 75 xkb_context_unref(ctx); 76 77 return 0; 78 } 79