* Ran Benita <ran234@gmail.com>
*/
+#include "config.h"
+
#include <limits.h>
#include <fcntl.h>
-#include <unistd.h>
+#include <stdio.h>
#include <sys/types.h>
#include <sys/stat.h>
+#ifdef _WIN32
+#include <io.h>
+#include <windows.h>
+#else
+#include <unistd.h>
+#include <termios.h>
+#endif
#include "test.h"
+#include "utils.h"
/*
* Test a sequence of keysyms, resulting from a sequence of key presses,
xkb_keysym_t keysym;
const xkb_keysym_t *syms;
+ xkb_keysym_t sym;
unsigned int nsyms, i;
char ksbuf[64];
op = va_arg(ap, int);
nsyms = xkb_state_key_get_syms(state, kc, &syms);
- fprintf(stderr, "got %d syms for key 0x%x: [", nsyms, kc);
+ if (nsyms == 1) {
+ sym = xkb_state_key_get_one_sym(state, kc);
+ syms = &sym;
+ }
+
+ fprintf(stderr, "got %u syms for keycode %u: [", nsyms, kc);
if (op == DOWN || op == BOTH)
xkb_state_update_key(state, kc, XKB_KEY_DOWN);
}
char *
+test_makedir(const char *parent, const char *path)
+{
+ char *dirname;
+ int err;
+
+ dirname = asprintf_safe("%s/%s", parent, path);
+ assert(dirname);
+#ifdef _WIN32
+ err = _mkdir(dirname);
+#else
+ err = mkdir(dirname, 0777);
+#endif
+ assert(err == 0);
+
+ return dirname;
+}
+
+char *
+test_maketempdir(const char *template)
+{
+#ifdef _WIN32
+ const char *basetmp = getenv("TMP");
+ if (basetmp == NULL) {
+ basetmp = getenv("TEMP");
+ }
+ if (basetmp == NULL) {
+ basetmp = getenv("top_builddir");
+ }
+ assert(basetmp != NULL);
+ char *tmpdir = asprintf_safe("%s/%s", basetmp, template);
+ assert(tmpdir != NULL);
+ char *tmp = _mktemp(tmpdir);
+ assert(tmp == tmpdir);
+ int ret = _mkdir(tmp);
+ assert(ret == 0);
+ return tmpdir;
+#else
+ char *tmpdir = asprintf_safe("/tmp/%s", template);
+ assert(tmpdir != NULL);
+ char *tmp = mkdtemp(tmpdir);
+ assert(tmp == tmpdir);
+ return tmpdir;
+#endif
+}
+
+char *
test_get_path(const char *path_rel)
{
char *path;
- size_t path_len;
- const char *srcdir = getenv("srcdir");
+ const char *srcdir;
+
+ srcdir = getenv("top_srcdir");
+ if (!srcdir)
+ srcdir = ".";
- path_len = strlen(srcdir ? srcdir : ".") +
- strlen(path_rel ? path_rel : "") + 12;
- path = malloc(path_len);
+ if (path_rel[0] == '/')
+ return strdup(path_rel);
+
+ path = asprintf_safe("%s/test/data%s%s", srcdir,
+ path_rel[0] ? "/" : "", path_rel);
if (!path) {
- fprintf(stderr, "Failed to allocate path (%d chars) for %s\n",
- (int) path_len, path);
+ fprintf(stderr, "Failed to allocate path for %s\n", path_rel);
return NULL;
}
- snprintf(path, path_len,
- "%s/test/data/%s", srcdir ? srcdir : ".",
- path_rel ? path_rel : "");
-
return path;
}
return NULL;
path = test_get_path("");
- if (!path)
+ if (!path) {
+ xkb_context_unref(ctx);
return NULL;
+ }
xkb_context_include_path_append(ctx, path);
free(path);
if (!path)
return NULL;
- file = fopen(path, "r");
+ file = fopen(path, "rb");
if (!file) {
fprintf(stderr, "Failed to open path: %s\n", path);
free(path);