16f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin/* 26f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * Copyright © 2009 Dan Nicholson 36f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * 46f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * Permission is hereby granted, free of charge, to any person obtaining a 56f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * copy of this software and associated documentation files (the "Software"), 66f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * to deal in the Software without restriction, including without limitation 76f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * the rights to use, copy, modify, merge, publish, distribute, sublicense, 86f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * and/or sell copies of the Software, and to permit persons to whom the 96f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * Software is furnished to do so, subject to the following conditions: 106f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * 116f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * The above copyright notice and this permission notice (including the next 126f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * paragraph) shall be included in all copies or substantial portions of the 136f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * Software. 146f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * 156f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 166f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 176f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 186f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 196f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 206f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 216f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin * DEALINGS IN THE SOFTWARE. 226f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin */ 236f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 246f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin#include "test.h" 256f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 266f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempinstatic int 276f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempintest_file(struct xkb_context *ctx, const char *path_rel) 286f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin{ 296f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin struct xkb_keymap *keymap = test_compile_file(ctx, path_rel); 306f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 316f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin if (!keymap) 326f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin return 0; 336f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 346f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin xkb_keymap_unref(keymap); 356f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin return 1; 366f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin} 376f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 386f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempinint 396f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempinmain(void) 406f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin{ 416f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin struct xkb_context *ctx = test_get_context(0); 426f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 436f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(test_file(ctx, "keymaps/basic.xkb")); 446f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(test_file(ctx, "keymaps/comprehensive-plus-geom.xkb")); 456f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(test_file(ctx, "keymaps/no-types.xkb")); 466f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(test_file(ctx, "keymaps/quartz.xkb")); 476f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(test_file(ctx, "keymaps/no-aliases.xkb")); 486f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 496f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!test_file(ctx, "keymaps/divide-by-zero.xkb")); 506f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!test_file(ctx, "keymaps/bad.xkb")); 516f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!test_file(ctx, "keymaps/syntax-error.xkb")); 526f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!test_file(ctx, "keymaps/syntax-error2.xkb")); 536f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!test_file(ctx, "does not exist")); 546f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 556f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin /* Test response to invalid flags and formats. */ 566f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin fclose(stdin); 576f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!xkb_keymap_new_from_file(ctx, NULL, XKB_KEYMAP_FORMAT_TEXT_V1, 0)); 586f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!xkb_keymap_new_from_file(ctx, stdin, 0, 0)); 596f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!xkb_keymap_new_from_file(ctx, stdin, XKB_KEYMAP_USE_ORIGINAL_FORMAT, 0)); 606f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!xkb_keymap_new_from_file(ctx, stdin, 1234, 0)); 616f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!xkb_keymap_new_from_file(ctx, stdin, XKB_KEYMAP_FORMAT_TEXT_V1, -1)); 626f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin assert(!xkb_keymap_new_from_file(ctx, stdin, XKB_KEYMAP_FORMAT_TEXT_V1, 1234)); 636f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 646f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin xkb_context_unref(ctx); 656f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin 666f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin return 0; 676f36ec3ef7a87f9eaa37fc78868dbac2cb958b0Dennis Kempin} 68