/*
-Copyright 2009 Dan Nicholson
+ * 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 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 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.
+ *
+ * Except as contained in this notice, the names of the authors or their
+ * institutions shall not be used in advertising or otherwise to promote the
+ * sale, use or other dealings in this Software without prior written
+ * authorization from the authors.
+ */
-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 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 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.
-
-Except as contained in this notice, the names of the authors or their
-institutions shall not be used in advertising or otherwise to promote the
-sale, use or other dealings in this Software without prior written
-authorization from the authors.
-*/
-
-#include <sys/types.h>
-#include <sys/stat.h>
#include <assert.h>
-#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
-#include <errno.h>
-#include <fcntl.h>
-#include "xkbcommon/xkbcommon.h"
-#include "utils.h"
+#include <limits.h>
-static char buffer[8192];
+#include "xkbcommon/xkbcommon.h"
+#include "test.h"
-int main(int argc, char *argv[])
+static int
+test_file(struct xkb_context *ctx, const char *path_rel)
{
- struct xkb_context *context;
- struct xkb_keymap *xkb;
- char *path;
- int fd;
- int i, len, from_string = 0;
-
- /* Require xkb file */
- if (argc < 2) {
- fprintf(stderr, "Not enough arguments\n");
- fprintf(stderr, "Usage: %s [-s] XKBFILE\n",
- argv[0]);
- exit(1);
- }
-
- i = 1;
- if (strcmp(argv[1], "-s") == 0) {
- from_string = 2;
- i++;
- }
+ struct xkb_keymap *keymap = test_compile_file(ctx, path_rel);
- path = argv[i];
+ if (!keymap)
+ return 0;
- fd = open(path, O_RDONLY);
- if (fd < 0) {
- fprintf(stderr, "Failed to open file \"%s\": %s\n", path,
- strerror(errno));
- exit(1);
- }
+ xkb_map_unref(keymap);
+ return 1;
+}
- context = xkb_context_new();
- assert(context);
+int
+main(void)
+{
+ struct xkb_context *ctx = test_get_context();
- if (from_string) {
- len = read(fd, buffer, sizeof(buffer));
- buffer[len] = '\0';
- xkb = xkb_map_new_from_string(context, buffer,
- XKB_KEYMAP_FORMAT_TEXT_V1);
- } else {
- xkb = xkb_map_new_from_fd(context, fd,
- XKB_KEYMAP_FORMAT_TEXT_V1);
- }
- close(fd);
+ assert(test_file(ctx, "keymaps/basic.xkb"));
+ /* XXX check we actually get qwertz here ... */
+ assert(test_file(ctx, "keymaps/default.xkb"));
+ assert(test_file(ctx, "keymaps/comprehensive-plus-geom.xkb"));
- if (!xkb) {
- fprintf(stderr, "Failed to compile keymap\n");
- xkb_context_unref(context);
- exit(1);
- }
+ assert(!test_file(ctx, "keymaps/divide-by-zero.xkb"));
+ assert(!test_file(ctx, "bad.xkb"));
- xkb_map_unref(xkb);
- xkb_context_unref(context);
+ xkb_context_unref(ctx);
return 0;
}