blob: 3431226adae6a9e517feb65c267c9427b2c7f373 [file] [log] [blame]
Bram Moolenaar28b23822017-06-27 18:29:17 +02001" Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
2" Also test "g~ap".
3
Bram Moolenaar1e115362019-01-09 23:01:02 +01004func Ch(a, op, b, expected)
Bram Moolenaar28b23822017-06-27 18:29:17 +02005 call assert_equal(eval(printf('"%s" %s "%s"', a:a, a:op, a:b)), a:expected,
6 \ printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
Bram Moolenaar1e115362019-01-09 23:01:02 +01007endfunc
Bram Moolenaar28b23822017-06-27 18:29:17 +02008
Bram Moolenaar1e115362019-01-09 23:01:02 +01009func Chk(a, b, result)
Bram Moolenaar28b23822017-06-27 18:29:17 +020010 if a:result == 0
11 call Ch(a:a, '==?', a:b, 1)
12 call Ch(a:a, '!=?', a:b, 0)
13 call Ch(a:a, '<=?', a:b, 1)
14 call Ch(a:a, '>=?', a:b, 1)
15 call Ch(a:a, '<?', a:b, 0)
16 call Ch(a:a, '>?', a:b, 0)
17 elseif a:result > 0
18 call Ch(a:a, '==?', a:b, 0)
19 call Ch(a:a, '!=?', a:b, 1)
20 call Ch(a:a, '<=?', a:b, 0)
21 call Ch(a:a, '>=?', a:b, 1)
22 call Ch(a:a, '<?', a:b, 0)
23 call Ch(a:a, '>?', a:b, 1)
24 else
25 call Ch(a:a, '==?', a:b, 0)
26 call Ch(a:a, '!=?', a:b, 1)
27 call Ch(a:a, '<=?', a:b, 1)
28 call Ch(a:a, '>=?', a:b, 0)
29 call Ch(a:a, '<?', a:b, 1)
30 call Ch(a:a, '>?', a:b, 0)
31 endif
Bram Moolenaar1e115362019-01-09 23:01:02 +010032endfunc
Bram Moolenaar28b23822017-06-27 18:29:17 +020033
Bram Moolenaar1e115362019-01-09 23:01:02 +010034func Check(a, b, result)
Bram Moolenaar28b23822017-06-27 18:29:17 +020035 call Chk(a:a, a:b, a:result)
36 call Chk(a:b, a:a, -a:result)
Bram Moolenaar1e115362019-01-09 23:01:02 +010037endfunc
Bram Moolenaar28b23822017-06-27 18:29:17 +020038
Bram Moolenaar1e115362019-01-09 23:01:02 +010039func LT(a, b)
Bram Moolenaar28b23822017-06-27 18:29:17 +020040 call Check(a:a, a:b, -1)
Bram Moolenaar1e115362019-01-09 23:01:02 +010041endfunc
Bram Moolenaar28b23822017-06-27 18:29:17 +020042
Bram Moolenaar1e115362019-01-09 23:01:02 +010043func GT(a, b)
Bram Moolenaar28b23822017-06-27 18:29:17 +020044 call Check(a:a, a:b, 1)
Bram Moolenaar1e115362019-01-09 23:01:02 +010045endfunc
Bram Moolenaar28b23822017-06-27 18:29:17 +020046
Bram Moolenaar1e115362019-01-09 23:01:02 +010047func EQ(a, b)
Bram Moolenaar28b23822017-06-27 18:29:17 +020048 call Check(a:a, a:b, 0)
Bram Moolenaar1e115362019-01-09 23:01:02 +010049endfunc
Bram Moolenaar28b23822017-06-27 18:29:17 +020050
Bram Moolenaar1e115362019-01-09 23:01:02 +010051func Test_comparisons()
Bram Moolenaar28b23822017-06-27 18:29:17 +020052 call EQ('', '')
53 call LT('', 'a')
54 call EQ('abc', 'abc')
55 call EQ('Abc', 'abC')
56 call LT('ab', 'abc')
57 call LT('AB', 'abc')
58 call LT('ab', 'aBc')
59 call EQ('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xb9\xd0\xa6\xd0\xa3\xd0\xba\xd0\x95\xd0\xbd')
60 call LT('\xd0\xb9\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd', '\xd0\xaf\xd1\x86\xd1\x83\xd0\xba\xd0\xb5\xd0\xbd')
61 call EQ('\xe2\x84\xaa', 'k')
62 call LT('\xe2\x84\xaa', 'kkkkkk')
63 call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
64 call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
65 call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
66 call EQ('Abc\x80', 'AbC\x80')
67 call LT('Abc\x80', 'AbC\x81')
68 call LT('Abc', 'AbC\x80')
69 call LT('abc\x80DEF', 'abc\x80def') " case folding stops at the first bad character
70 call LT('\xc3XYZ', '\xc3xyz')
71 call EQ('\xef\xbc\xba', '\xef\xbd\x9a') " FF3A (upper), FF5A (lower)
72 call GT('\xef\xbc\xba', '\xef\xbc\xff') " first string is ok and equals \xef\xbd\x9a after folding, second string is illegal and was left unchanged, then the strings were bytewise compared
73 call LT('\xc3', '\xc3\x83')
74 call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
75 for n in range(0x60, 0xFF)
76 call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n))
77 endfor
78 for n in range(0x80, 0xBF)
79 call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n))
80 endfor
81 for n in range(0xC0, 0xFF)
82 call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n))
83 endfor
Bram Moolenaar1e115362019-01-09 23:01:02 +010084endfunc
Bram Moolenaar28b23822017-06-27 18:29:17 +020085
86" test that g~ap changes one paragraph only.
Bram Moolenaar1e115362019-01-09 23:01:02 +010087func Test_gap()
Bram Moolenaar28b23822017-06-27 18:29:17 +020088 new
Bram Moolenaar9134f1e2019-11-29 20:26:13 +010089 " setup text
90 call feedkeys("iabcd\<cr>\<cr>defg", "tx")
91 " modify only first line
92 call feedkeys("gg0g~ap", "tx")
Bram Moolenaar28b23822017-06-27 18:29:17 +020093 call assert_equal(["ABCD", "", "defg"], getline(1,3))
Bram Moolenaar1e115362019-01-09 23:01:02 +010094endfunc
Bram Moolenaar6d91bcb2020-08-12 18:50:36 +020095
96" vim: shiftwidth=2 sts=2 expandtab