1" Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c) 2" Also test "g~ap". 3 4func Ch(a, op, b, expected) 5 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)) 7endfunc 8 9func Chk(a, b, result) 10 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 32endfunc 33 34func Check(a, b, result) 35 call Chk(a:a, a:b, a:result) 36 call Chk(a:b, a:a, -a:result) 37endfunc 38 39func LT(a, b) 40 call Check(a:a, a:b, -1) 41endfunc 42 43func GT(a, b) 44 call Check(a:a, a:b, 1) 45endfunc 46 47func EQ(a, b) 48 call Check(a:a, a:b, 0) 49endfunc 50 51func Test_comparisons() 52 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 84endfunc 85 86" test that g~ap changes one paragraph only. 87func Test_gap() 88 new 89 " setup text 90 call feedkeys("iabcd\<cr>\<cr>defg", "tx") 91 " modify only first line 92 call feedkeys("gg0g~ap", "tx") 93 call assert_equal(["ABCD", "", "defg"], getline(1,3)) 94endfunc 95 96" vim: shiftwidth=2 sts=2 expandtab 97