From b2737e9bfb6ac542a34885012958ae2de23a3417 Mon Sep 17 00:00:00 2001 From: Dan Nicholson Date: Tue, 20 Jan 2009 18:57:22 -0800 Subject: [PATCH] Testing harness for keysym functions A test program and script have been added for checking the XkbCommon keysym functions. This has already highlighted an error in handling of keysyms from XF86keysym.h. --- Makefile.am | 2 +- configure.ac | 1 + test/.gitignore | 1 + test/Makefile.am | 9 +++++++++ test/xkey.c | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ test/xkey.sh | 30 ++++++++++++++++++++++++++++++ 6 files changed, 90 insertions(+), 1 deletion(-) create mode 100644 test/.gitignore create mode 100644 test/Makefile.am create mode 100644 test/xkey.c create mode 100755 test/xkey.sh diff --git a/Makefile.am b/Makefile.am index e418f40..5460eea 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1,4 +1,4 @@ -SUBDIRS = include src +SUBDIRS = include src test EXTRA_DIST = ChangeLog diff --git a/configure.ac b/configure.ac index fed23c9..093038f 100644 --- a/configure.ac +++ b/configure.ac @@ -77,4 +77,5 @@ AC_OUTPUT([ Makefile include/Makefile src/Makefile +test/Makefile ]) diff --git a/test/.gitignore b/test/.gitignore new file mode 100644 index 0000000..ddf7b39 --- /dev/null +++ b/test/.gitignore @@ -0,0 +1 @@ +xkey diff --git a/test/Makefile.am b/test/Makefile.am new file mode 100644 index 0000000..49362d1 --- /dev/null +++ b/test/Makefile.am @@ -0,0 +1,9 @@ +INCLUDES = -I$(top_srcdir)/include +AM_CFLAGS = $(X11_CFLAGS) + +check_PROGRAMS = xkey +xkey_SOURCES = xkey.c +xkey_LDADD = $(top_builddir)/src/libxkbcommon.la + +TESTS = xkey.sh +TESTS_ENVIRONMENT = $(SHELL) diff --git a/test/xkey.c b/test/xkey.c new file mode 100644 index 0000000..4f775f2 --- /dev/null +++ b/test/xkey.c @@ -0,0 +1,48 @@ +#include +#include +#include +#include + +static void print_keysym(const char *s) +{ + KeySym ks = XkbcStringToKeysym(s); + if (ks == NoSymbol) + printf("NoSymbol\n"); + else + printf("0x%lx\n", ks); +} + +static void print_string(KeySym ks) +{ + char *s = XkbcKeysymToString(ks); + printf("%s\n", s ? s : "NULL"); +} + +int main(int argc, char *argv[]) +{ + int mode; + KeySym sym; + + if (argc < 3) { + fprintf(stderr, "error: not enough arguments\n"); + exit(EXIT_FAILURE); + } + + if (strcmp(argv[1], "-k") == 0) { + mode = 0; + sym = strtoul(argv[2], NULL, 16); + } + else if (strcmp(argv[1], "-s") == 0) + mode = 1; + else { + fprintf(stderr, "error: unrecognized argument \"%s\"\n", argv[1]); + exit(EXIT_FAILURE); + } + + if (mode == 0) + print_string(sym); + else + print_keysym(argv[2]); + + return 0; +} diff --git a/test/xkey.sh b/test/xkey.sh new file mode 100755 index 0000000..b201822 --- /dev/null +++ b/test/xkey.sh @@ -0,0 +1,30 @@ +#!/bin/sh + +srcdir=${srcdir-.} +builddir=${builddir-.} + +check_error() +{ + if [ "$2" != "$3" ]; then + echo "error checking $1" >&2 + echo " expected: $2" >&2 + echo " received: $3" >&2 + return 1 + fi +} + +val=`${builddir}/xkey -s Undo` && \ + check_error Undo 0xff65 $val || \ + exit $? + +val=`${builddir}/xkey -k 0x1008ff56` && \ + check_error 0x1008FF56 XF86Close $val || \ + exit $? + +val=`${builddir}/xkey -s ThisKeyShouldNotExist` && \ + check_error ThisKeyShouldNotExist NoSymbol $val || \ + exit $? + +val=`${builddir}/xkey -k 0x0` && \ + check_error 0x0 NULL $val || \ + exit $?