1" Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c) 2" Also test "g~ap". 3 4if !has("multi_byte") 5 finish 6endif 7 8function! Ch(a, op, b, expected) 9 call assert_equal(eval(printf('"%s" %s "%s"', a:a, a:op, a:b)), a:expected, 10 \ printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected)) 11endfunction 12 13function! Chk(a, b, result) 14 if a:result == 0 15 call Ch(a:a, '==?', a:b, 1) 16 call Ch(a:a, '!=?', a:b, 0) 17 call Ch(a:a, '<=?', a:b, 1) 18 call Ch(a:a, '>=?', a:b, 1) 19 call Ch(a:a, '<?', a:b, 0) 20 call Ch(a:a, '>?', a:b, 0) 21 elseif a:result > 0 22 call Ch(a:a, '==?', a:b, 0) 23 call Ch(a:a, '!=?', a:b, 1) 24 call Ch(a:a, '<=?', a:b, 0) 25 call Ch(a:a, '>=?', a:b, 1) 26 call Ch(a:a, '<?', a:b, 0) 27 call Ch(a:a, '>?', a:b, 1) 28 else 29 call Ch(a:a, '==?', a:b, 0) 30 call Ch(a:a, '!=?', a:b, 1) 31 call Ch(a:a, '<=?', a:b, 1) 32 call Ch(a:a, '>=?', a:b, 0) 33 call Ch(a:a, '<?', a:b, 1) 34 call Ch(a:a, '>?', a:b, 0) 35 endif 36endfunction 37 38function! Check(a, b, result) 39 call Chk(a:a, a:b, a:result) 40 call Chk(a:b, a:a, -a:result) 41endfunction 42 43function! LT(a, b) 44 call Check(a:a, a:b, -1) 45endfunction 46 47function! GT(a, b) 48 call Check(a:a, a:b, 1) 49endfunction 50 51function! EQ(a, b) 52 call Check(a:a, a:b, 0) 53endfunction 54 55function Test_comparisons() 56 call EQ('', '') 57 call LT('', 'a') 58 call EQ('abc', 'abc') 59 call EQ('Abc', 'abC') 60 call LT('ab', 'abc') 61 call LT('AB', 'abc') 62 call LT('ab', 'aBc') 63 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') 64 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') 65 call EQ('\xe2\x84\xaa', 'k') 66 call LT('\xe2\x84\xaa', 'kkkkkk') 67 call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk') 68 call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa') 69 call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6') 70 call EQ('Abc\x80', 'AbC\x80') 71 call LT('Abc\x80', 'AbC\x81') 72 call LT('Abc', 'AbC\x80') 73 call LT('abc\x80DEF', 'abc\x80def') " case folding stops at the first bad character 74 call LT('\xc3XYZ', '\xc3xyz') 75 call EQ('\xef\xbc\xba', '\xef\xbd\x9a') " FF3A (upper), FF5A (lower) 76 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 77 call LT('\xc3', '\xc3\x83') 78 call EQ('\xc3\xa3xYz', '\xc3\x83XyZ') 79 for n in range(0x60, 0xFF) 80 call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) 81 endfor 82 for n in range(0x80, 0xBF) 83 call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) 84 endfor 85 for n in range(0xC0, 0xFF) 86 call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) 87 endfor 88endfunction 89 90" test that g~ap changes one paragraph only. 91function Test_gap() 92 new 93 call feedkeys("iabcd\n\ndefggg0g~ap", "tx") 94 call assert_equal(["ABCD", "", "defg"], getline(1,3)) 95endfunction 96