From 43ee1f87ea3d29486132d3a788d86d971a9b2e3e Mon Sep 17 00:00:00 2001 From: Alexey Gladkov Date: Thu, 18 Apr 2013 22:59:55 +0400 Subject: [PATCH] Add lk_get_charset function Signed-off-by: Alexey Gladkov --- src/libkeymap/keymap/charset.h | 1 + src/libkeymap/ksyms.c | 9 ++++ tests/Makefile.am | 4 +- tests/charset-keymap0.map | 4 ++ tests/libkeymap-charset.c | 104 +++++++++++++++++++++++++++++++++++++++++ 5 files changed, 121 insertions(+), 1 deletion(-) create mode 100644 tests/charset-keymap0.map create mode 100644 tests/libkeymap-charset.c diff --git a/src/libkeymap/keymap/charset.h b/src/libkeymap/keymap/charset.h index 0dc69af..5c83988 100644 --- a/src/libkeymap/keymap/charset.h +++ b/src/libkeymap/keymap/charset.h @@ -4,6 +4,7 @@ #include void lk_list_charsets(FILE *f); +const char *lk_get_charset(struct keymap *kmap); int lk_set_charset(struct keymap *kmap, const char *name); #endif /* LK_CHARSET_H */ diff --git a/src/libkeymap/ksyms.c b/src/libkeymap/ksyms.c index 778ef5c..66ad0c2 100644 --- a/src/libkeymap/ksyms.c +++ b/src/libkeymap/ksyms.c @@ -116,6 +116,15 @@ lk_list_charsets(FILE *f) { fprintf(f, "\n"); } +const char * +lk_get_charset(struct keymap *kmap) +{ + if (!kmap || !kmap->charset || kmap->charset >= charsets_size) + return NULL; + + return charsets[kmap->charset].charset; +} + int lk_set_charset(struct keymap *kmap, const char *charset) { unsigned int i; diff --git a/tests/Makefile.am b/tests/Makefile.am index d4eee42..b2ec1a9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -7,7 +7,8 @@ LDADD = $(top_builddir)/src/libkeymap/libkeymap.la $(CHECK_LIBS) noinst_PROGRAMS = libkeymap-dumpkeys -check_PROGRAMS = libkeymap-init libkeymap-kmap libkeymap-keys libkeymap-parse +check_PROGRAMS = libkeymap-init libkeymap-kmap libkeymap-keys libkeymap-parse \ + libkeymap-charset TESTS = $(check_PROGRAMS) \ dumpkeys-fulltable @@ -15,5 +16,6 @@ libkeymap_init_SOURCES = libkeymap-init.c libkeymap_kmap_SOURCES = libkeymap-kmap.c libkeymap_keys_SOURCES = libkeymap-keys.c libkeymap_parse_SOURCES = libkeymap-parse.c +libkeymap_charset_SOURCES = libkeymap-charset.c libkeymap_dumpkeys_SOURCES = libkeymap-dumpkeys.c diff --git a/tests/charset-keymap0.map b/tests/charset-keymap0.map new file mode 100644 index 0000000..e3ddc4f --- /dev/null +++ b/tests/charset-keymap0.map @@ -0,0 +1,4 @@ +charset "koi8-r" +charset "iso-8859-1" +charset "iso-8859-2" + diff --git a/tests/libkeymap-charset.c b/tests/libkeymap-charset.c new file mode 100644 index 0000000..9af4f7b --- /dev/null +++ b/tests/libkeymap-charset.c @@ -0,0 +1,104 @@ +#include +#include +#include +#include + + +START_TEST(test0) +{ + char *s; + lkfile_t f; + struct keymap kmap; + lk_init(&kmap); + kmap.log_fn = NULL; + + f.pipe = 0; + strcpy(f.pathname, "charset-keymap0.map"); + f.fd = fopen("./charset-keymap0.map", "r"); + + fail_if(lk_parse_keymap(&kmap, &f) != 0, "Unable to parse keymap"); + + s = lk_get_charset(&kmap); + + fail_if(strcmp(s, "iso-8859-2"), "Unable to parse charset"); + + lk_free(&kmap); +} +END_TEST + +START_TEST(test1) +{ + char *s; + lkfile_t f; + struct keymap kmap; + lk_init(&kmap); + kmap.log_fn = NULL; + + f.pipe = 0; + strcpy(f.pathname, "null"); + f.fd = fopen("/dev/null", "r"); + + fail_if(lk_parse_keymap(&kmap, &f) != 0, "Unable to parse keymap"); + + s = lk_get_charset(&kmap); + + fail_if(s != NULL, "Wrong charset"); + + lk_free(&kmap); +} +END_TEST + +START_TEST(test2) +{ + char *s; + lkfile_t f; + struct keymap kmap; + lk_init(&kmap); + kmap.log_fn = NULL; + + f.pipe = 0; + strcpy(f.pathname, "null"); + f.fd = fopen("/dev/null", "r"); + + fail_if(lk_parse_keymap(&kmap, &f) != 0, "Unable to parse keymap"); + + fail_if(lk_get_charset(NULL), "Wrong charset index"); + + kmap.charset = -1; + fail_if(lk_get_charset(&kmap), "Wrong charset index"); + + kmap.charset = 255; + fail_if(lk_get_charset(&kmap), "Wrong charset index"); + + lk_free(&kmap); +} +END_TEST + +static Suite * +libkeymap_suite(void) +{ + Suite *s = suite_create("libkeymap"); + TCase *tc_core = tcase_create(NULL); + + tcase_add_test(tc_core, test0); + tcase_add_test(tc_core, test1); + tcase_add_test(tc_core, test2); + + suite_add_tcase(s, tc_core); + return s; +} + +int main(void) +{ + int number_failed; + + Suite *s = libkeymap_suite(); + SRunner *sr = srunner_create (s); + + srunner_run_all(sr, CK_NORMAL); + + number_failed = srunner_ntests_failed(sr); + srunner_free (sr); + + return (number_failed == 0) ? EXIT_SUCCESS : EXIT_FAILURE; +} -- 2.7.4