Add lk_get_charset function
authorAlexey Gladkov <gladkov.alexey@gmail.com>
Thu, 18 Apr 2013 18:59:55 +0000 (22:59 +0400)
committerAlexey Gladkov <gladkov.alexey@gmail.com>
Thu, 18 Apr 2013 18:59:55 +0000 (22:59 +0400)
Signed-off-by: Alexey Gladkov <gladkov.alexey@gmail.com>
src/libkeymap/keymap/charset.h
src/libkeymap/ksyms.c
tests/Makefile.am
tests/charset-keymap0.map [new file with mode: 0644]
tests/libkeymap-charset.c [new file with mode: 0644]

index 0dc69af..5c83988 100644 (file)
@@ -4,6 +4,7 @@
 #include <keymap/data.h>
 
 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 */
index 778ef5c..66ad0c2 100644 (file)
@@ -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;
index d4eee42..b2ec1a9 100644 (file)
@@ -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 (file)
index 0000000..e3ddc4f
--- /dev/null
@@ -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 (file)
index 0000000..9af4f7b
--- /dev/null
@@ -0,0 +1,104 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <check.h>
+#include <keymap.h>
+
+
+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;
+}