128b23822SBram Moolenaar" Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
228b23822SBram Moolenaar" Also test "g~ap".
328b23822SBram Moolenaar
41e115360SBram Moolenaarfunc Ch(a, op, b, expected)
528b23822SBram Moolenaar  call assert_equal(eval(printf('"%s" %s "%s"', a:a, a:op, a:b)), a:expected,
628b23822SBram Moolenaar        \ printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
71e115360SBram Moolenaarendfunc
828b23822SBram Moolenaar
91e115360SBram Moolenaarfunc Chk(a, b, result)
1028b23822SBram Moolenaar  if a:result == 0
1128b23822SBram Moolenaar    call Ch(a:a, '==?', a:b, 1)
1228b23822SBram Moolenaar    call Ch(a:a, '!=?', a:b, 0)
1328b23822SBram Moolenaar    call Ch(a:a, '<=?', a:b, 1)
1428b23822SBram Moolenaar    call Ch(a:a, '>=?', a:b, 1)
1528b23822SBram Moolenaar    call Ch(a:a, '<?', a:b, 0)
1628b23822SBram Moolenaar    call Ch(a:a, '>?', a:b, 0)
1728b23822SBram Moolenaar  elseif a:result > 0
1828b23822SBram Moolenaar    call Ch(a:a, '==?', a:b, 0)
1928b23822SBram Moolenaar    call Ch(a:a, '!=?', a:b, 1)
2028b23822SBram Moolenaar    call Ch(a:a, '<=?', a:b, 0)
2128b23822SBram Moolenaar    call Ch(a:a, '>=?', a:b, 1)
2228b23822SBram Moolenaar    call Ch(a:a, '<?', a:b, 0)
2328b23822SBram Moolenaar    call Ch(a:a, '>?', a:b, 1)
2428b23822SBram Moolenaar  else
2528b23822SBram Moolenaar    call Ch(a:a, '==?', a:b, 0)
2628b23822SBram Moolenaar    call Ch(a:a, '!=?', a:b, 1)
2728b23822SBram Moolenaar    call Ch(a:a, '<=?', a:b, 1)
2828b23822SBram Moolenaar    call Ch(a:a, '>=?', a:b, 0)
2928b23822SBram Moolenaar    call Ch(a:a, '<?', a:b, 1)
3028b23822SBram Moolenaar    call Ch(a:a, '>?', a:b, 0)
3128b23822SBram Moolenaar  endif
321e115360SBram Moolenaarendfunc
3328b23822SBram Moolenaar
341e115360SBram Moolenaarfunc Check(a, b, result)
3528b23822SBram Moolenaar  call Chk(a:a, a:b, a:result)
3628b23822SBram Moolenaar  call Chk(a:b, a:a, -a:result)
371e115360SBram Moolenaarendfunc
3828b23822SBram Moolenaar
391e115360SBram Moolenaarfunc LT(a, b)
4028b23822SBram Moolenaar  call Check(a:a, a:b, -1)
411e115360SBram Moolenaarendfunc
4228b23822SBram Moolenaar
431e115360SBram Moolenaarfunc GT(a, b)
4428b23822SBram Moolenaar  call Check(a:a, a:b, 1)
451e115360SBram Moolenaarendfunc
4628b23822SBram Moolenaar
471e115360SBram Moolenaarfunc EQ(a, b)
4828b23822SBram Moolenaar  call Check(a:a, a:b, 0)
491e115360SBram Moolenaarendfunc
5028b23822SBram Moolenaar
511e115360SBram Moolenaarfunc Test_comparisons()
5228b23822SBram Moolenaar  call EQ('', '')
5328b23822SBram Moolenaar  call LT('', 'a')
5428b23822SBram Moolenaar  call EQ('abc', 'abc')
5528b23822SBram Moolenaar  call EQ('Abc', 'abC')
5628b23822SBram Moolenaar  call LT('ab', 'abc')
5728b23822SBram Moolenaar  call LT('AB', 'abc')
5828b23822SBram Moolenaar  call LT('ab', 'aBc')
5928b23822SBram Moolenaar  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')
6028b23822SBram Moolenaar  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')
6128b23822SBram Moolenaar  call EQ('\xe2\x84\xaa', 'k')
6228b23822SBram Moolenaar  call LT('\xe2\x84\xaa', 'kkkkkk')
6328b23822SBram Moolenaar  call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
6428b23822SBram Moolenaar  call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
6528b23822SBram Moolenaar  call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
6628b23822SBram Moolenaar  call EQ('Abc\x80', 'AbC\x80')
6728b23822SBram Moolenaar  call LT('Abc\x80', 'AbC\x81')
6828b23822SBram Moolenaar  call LT('Abc', 'AbC\x80')
6928b23822SBram Moolenaar  call LT('abc\x80DEF', 'abc\x80def')  " case folding stops at the first bad character
7028b23822SBram Moolenaar  call LT('\xc3XYZ', '\xc3xyz')
7128b23822SBram Moolenaar  call EQ('\xef\xbc\xba', '\xef\xbd\x9a')  " FF3A (upper), FF5A (lower)
7228b23822SBram Moolenaar  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
7328b23822SBram Moolenaar  call LT('\xc3', '\xc3\x83')
7428b23822SBram Moolenaar  call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
7528b23822SBram Moolenaar  for n in range(0x60, 0xFF)
7628b23822SBram Moolenaar    call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n))
7728b23822SBram Moolenaar  endfor
7828b23822SBram Moolenaar  for n in range(0x80, 0xBF)
7928b23822SBram Moolenaar    call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n))
8028b23822SBram Moolenaar  endfor
8128b23822SBram Moolenaar  for n in range(0xC0, 0xFF)
8228b23822SBram Moolenaar    call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n))
8328b23822SBram Moolenaar  endfor
841e115360SBram Moolenaarendfunc
8528b23822SBram Moolenaar
8628b23822SBram Moolenaar" test that g~ap changes one paragraph only.
871e115360SBram Moolenaarfunc Test_gap()
8828b23822SBram Moolenaar  new
899134f1ecSBram Moolenaar  " setup text
909134f1ecSBram Moolenaar  call feedkeys("iabcd\<cr>\<cr>defg", "tx")
919134f1ecSBram Moolenaar  " modify only first line
929134f1ecSBram Moolenaar  call feedkeys("gg0g~ap", "tx")
9328b23822SBram Moolenaar  call assert_equal(["ABCD", "", "defg"], getline(1,3))
941e115360SBram Moolenaarendfunc
95*6d91bcb4SBram Moolenaar
96*6d91bcb4SBram Moolenaar" vim: shiftwidth=2 sts=2 expandtab
97