diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/.gitignore | 1 | ||||
-rw-r--r-- | test/buffercomp.c | 90 | ||||
-rw-r--r-- | test/common.c | 15 | ||||
-rw-r--r-- | test/test.h | 3 |
4 files changed, 109 insertions, 0 deletions
diff --git a/test/.gitignore b/test/.gitignore index 5a0b89f..d4bb051 100644 --- a/test/.gitignore +++ b/test/.gitignore @@ -7,6 +7,7 @@ state context rules-file stringcomp +buffercomp keyseq log interactive diff --git a/test/buffercomp.c b/test/buffercomp.c new file mode 100644 index 0000000..5cc1dbc --- /dev/null +++ b/test/buffercomp.c @@ -0,0 +1,90 @@ +/* + * Copyright © 2009 Dan Nicholson + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + */ + +#include <assert.h> +#include <stdio.h> +#include <stdlib.h> + +#include "test.h" + +#define DATA_PATH "keymaps/stringcomp.data" + +int +main(int argc, char *argv[]) +{ + struct xkb_context *ctx = test_get_context(0); + struct xkb_keymap *keymap; + char *original, *dump; + + assert(ctx); + + /* Load in a prebuilt keymap, make sure we can compile it from memory, + * then compare it to make sure we get the same result when dumping it + * to a string. */ + original = test_read_file(DATA_PATH); + assert(original); + + keymap = test_compile_buffer(ctx, original, strlen(original)); + assert(keymap); + + dump = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_USE_ORIGINAL_FORMAT); + assert(dump); + + if (!streq(original, dump)) { + fprintf(stderr, + "round-trip test failed: dumped map differs from original\n"); + fprintf(stderr, "path to original file: %s\n", + test_get_path(DATA_PATH)); + fprintf(stderr, "length: dumped %lu, original %lu\n", + (unsigned long) strlen(dump), + (unsigned long) strlen(original)); + fprintf(stderr, "dumped map:\n"); + fprintf(stderr, "%s\n", dump); + fflush(stderr); + assert(0); + } + + free(original); + free(dump); + xkb_keymap_unref(keymap); + + /* Make sure we can't (falsely claim to) compile an empty string. */ + keymap = test_compile_buffer(ctx, "", 0); + assert(!keymap); + + /* Make sure we can recompile our output for a normal keymap from rules. */ + keymap = test_compile_rules(ctx, NULL, NULL, + "ru,ca,de,us", ",multix,neo,intl", NULL); + assert(keymap); + dump = xkb_keymap_get_as_string(keymap, XKB_KEYMAP_USE_ORIGINAL_FORMAT); + assert(dump); + xkb_keymap_unref(keymap); + keymap = test_compile_buffer(ctx, dump, strlen(dump)); + assert(keymap); + xkb_keymap_unref(keymap); + free(dump); + + xkb_context_unref(ctx); + + return 0; +} diff --git a/test/common.c b/test/common.c index 6d6f25e..7b4ee00 100644 --- a/test/common.c +++ b/test/common.c @@ -261,6 +261,21 @@ test_compile_string(struct xkb_context *context, const char *string) } struct xkb_keymap * +test_compile_buffer(struct xkb_context *context, const char *buf, size_t len) +{ + struct xkb_keymap *keymap; + + keymap = xkb_keymap_new_from_buffer(context, buf, len, + XKB_KEYMAP_FORMAT_TEXT_V1, 0); + if (!keymap) { + fprintf(stderr, "Failed to compile keymap from memory buffer\n"); + return NULL; + } + + return keymap; +} + +struct xkb_keymap * test_compile_rules(struct xkb_context *context, const char *rules, const char *model, const char *layout, const char *variant, const char *options) diff --git a/test/test.h b/test/test.h index c39ef8d..804606e 100644 --- a/test/test.h +++ b/test/test.h @@ -70,6 +70,9 @@ struct xkb_keymap * test_compile_string(struct xkb_context *context, const char *string); struct xkb_keymap * +test_compile_buffer(struct xkb_context *context, const char *buf, size_t len); + +struct xkb_keymap * test_compile_rules(struct xkb_context *context, const char *rules, const char *model, const char *layout, const char *variant, const char *options); |