Home | History | Annotate | Download | only in test
      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