summaryrefslogtreecommitdiff
path: root/src/kword_test.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-01-28 16:39:34 +0100
committerBram Moolenaar <Bram@vim.org>2017-01-28 16:39:34 +0100
commit4019cf90b8657d4ab1c39744db63550f44f405a2 (patch)
treedd19804e007e7748d0d2ca5a0e4aaa5dd0a19217 /src/kword_test.c
parentf42dd3c3901ea0ba38e67a616aea9953cae81b8d (diff)
downloadvim-git-4019cf90b8657d4ab1c39744db63550f44f405a2.tar.gz
patch 8.0.0252: not properly recognizing word characters between 128 and 255v8.0.0252
Problem: Characters below 256 that are not one byte are not always recognized as word characters. Solution: Make vim_iswordc() and vim_iswordp() work the same way. Add a test for this. (Ozaki Kiichi)
Diffstat (limited to 'src/kword_test.c')
-rw-r--r--src/kword_test.c85
1 files changed, 85 insertions, 0 deletions
diff --git a/src/kword_test.c b/src/kword_test.c
new file mode 100644
index 000000000..2e6640b8b
--- /dev/null
+++ b/src/kword_test.c
@@ -0,0 +1,85 @@
+/* vi:set ts=8 sts=4 sw=4 noet:
+ *
+ * VIM - Vi IMproved by Bram Moolenaar
+ *
+ * Do ":help uganda" in Vim to read copying and usage conditions.
+ * Do ":help credits" in Vim to see a list of people who contributed.
+ * See README.txt for an overview of the Vim source code.
+ */
+
+/*
+ * kword_test.c: Unittests for vim_iswordc() and vim_iswordp().
+ */
+
+#undef NDEBUG
+#include <assert.h>
+
+/* Must include main.c because it contains much more than just main() */
+#define NO_VIM_MAIN
+#include "main.c"
+
+/* This file has to be included because the tested functions are static */
+#include "charset.c"
+
+#ifdef FEAT_MBYTE
+/*
+ * Test the results of vim_iswordc() and vim_iswordp() are matched.
+ */
+ static void
+test_isword_funcs_utf8(void)
+{
+ buf_T buf;
+ int c;
+
+ vim_memset(&buf, 0, sizeof(buf));
+ p_enc = (char_u *)"utf-8";
+ p_isi = (char_u *)"";
+ p_isp = (char_u *)"";
+ p_isf = (char_u *)"";
+ buf.b_p_isk = (char_u *)"@,48-57,_,128-167,224-235";
+
+ curbuf = &buf;
+ mb_init(); /* calls init_chartab() */
+
+ for (c = 0; c < 0x10000; ++c)
+ {
+ char_u p[4] = {0};
+ int c1;
+ int retc;
+ int retp;
+
+ utf_char2bytes(c, p);
+ c1 = utf_ptr2char(p);
+ if (c != c1)
+ {
+ fprintf(stderr, "Failed: ");
+ fprintf(stderr,
+ "[c = %#04x, p = {%#02x, %#02x, %#02x}] ",
+ c, p[0], p[1], p[2]);
+ fprintf(stderr, "c != utf_ptr2char(p) (=%#04x)\n", c1);
+ abort();
+ }
+ retc = vim_iswordc_buf(c, &buf);
+ retp = vim_iswordp_buf(p, &buf);
+ if (retc != retp)
+ {
+ fprintf(stderr, "Failed: ");
+ fprintf(stderr,
+ "[c = %#04x, p = {%#02x, %#02x, %#02x}] ",
+ c, p[0], p[1], p[2]);
+ fprintf(stderr, "vim_iswordc(c) (=%d) != vim_iswordp(p) (=%d)\n",
+ retc, retp);
+ abort();
+ }
+ }
+}
+#endif
+
+ int
+main(void)
+{
+#ifdef FEAT_MBYTE
+ test_isword_funcs_utf8();
+#endif
+ return 0;
+}