view src/testdir/test82.in @ 5899:60cdaa05a6ad v7.4.292

updated for version 7.4.292 Problem: Searching for "a" does not match accented "a" with new regexp engine, does match with old engine. (David B?rgin) "ca" does not match "ca" with accented "a" with either engine. Solution: Change the old engine, check for following composing character also for single-byte patterns.
author Bram Moolenaar <bram@vim.org>
date Tue, 13 May 2014 18:04:00 +0200
parents 46cf49cc9289
children bc269cf15ccd
line wrap: on
line source

Tests for case-insensitive UTF-8 comparisons (utf_strnicmp() in mbyte.c)
Also test "g~ap".

STARTTEST
:so small.vim
:if !has("multi_byte")
: e! test.ok
: w! test.out
: qa!
:endif
:set enc=utf8
ggdG
:
:function! Ch(a, op, b, expected)
:  if eval(printf('"%s" %s "%s"', a:a, a:op, a:b)) != a:expected
:    call append(line('$'), printf('"%s" %s "%s" should return %d', a:a, a:op, a:b, a:expected))
:  else
:    let b:passed += 1
:  endif
:endfunction
:
:function! Chk(a, b, result)
:  if a:result == 0
:    call Ch(a:a, '==?', a:b, 1)
:    call Ch(a:a, '!=?', a:b, 0)
:    call Ch(a:a, '<=?', a:b, 1)
:    call Ch(a:a, '>=?', a:b, 1)
:    call Ch(a:a, '<?', a:b, 0)
:    call Ch(a:a, '>?', a:b, 0)
:  elseif a:result > 0
:    call Ch(a:a, '==?', a:b, 0)
:    call Ch(a:a, '!=?', a:b, 1)
:    call Ch(a:a, '<=?', a:b, 0)
:    call Ch(a:a, '>=?', a:b, 1)
:    call Ch(a:a, '<?', a:b, 0)
:    call Ch(a:a, '>?', a:b, 1)
:  else
:    call Ch(a:a, '==?', a:b, 0)
:    call Ch(a:a, '!=?', a:b, 1)
:    call Ch(a:a, '<=?', a:b, 1)
:    call Ch(a:a, '>=?', a:b, 0)
:    call Ch(a:a, '<?', a:b, 1)
:    call Ch(a:a, '>?', a:b, 0)
:  endif
:endfunction
:
:function! Check(a, b, result)
:  call Chk(a:a, a:b, a:result)
:  call Chk(a:b, a:a, -a:result)
:endfunction
:
:function! LT(a, b)
:  call Check(a:a, a:b, -1)
:endfunction
:
:function! GT(a, b)
:  call Check(a:a, a:b, 1)
:endfunction
:
:function! EQ(a, b)
:  call Check(a:a, a:b, 0)
:endfunction
:
:let b:passed=0
:call EQ('', '')
:call LT('', 'a')
:call EQ('abc', 'abc')
:call EQ('Abc', 'abC')
:call LT('ab', 'abc')
:call LT('AB', 'abc')
:call LT('ab', 'aBc')
: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')
: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')
:call EQ('\xe2\x84\xaa', 'k')
:call LT('\xe2\x84\xaa', 'kkkkkk')
:call EQ('\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa', 'kkk')
:call LT('kk', '\xe2\x84\xaa\xe2\x84\xaa\xe2\x84\xaa')
:call EQ('\xe2\x84\xaa\xe2\x84\xa6k\xe2\x84\xaak\xcf\x89', 'k\xcf\x89\xe2\x84\xaakk\xe2\x84\xa6')
:call EQ('Abc\x80', 'AbC\x80')
:call LT('Abc\x80', 'AbC\x81')
:call LT('Abc', 'AbC\x80')
:call LT('abc\x80DEF', 'abc\x80def')  " case folding stops at the first bad character
:call LT('\xc3XYZ', '\xc3xyz')
:call EQ('\xef\xbc\xba', '\xef\xbd\x9a')  " FF3A (upper), FF5A (lower)
: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
:call LT('\xc3', '\xc3\x83')
:call EQ('\xc3\xa3xYz', '\xc3\x83XyZ')
:for n in range(0x60, 0xFF) | call LT(printf('xYz\x%.2X', n-1), printf('XyZ\x%.2X', n)) | endfor
:for n in range(0x80, 0xBF) | call EQ(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
:for n in range(0xC0, 0xFF) | call LT(printf('xYz\xc2\x%.2XUvW', n), printf('XyZ\xc2\x%.2XuVw', n)) | endfor
:call append(0, printf('%d checks passed', b:passed))
:"
:" test that g~ap changes one paragraph only.
:new
iabcd

defggg0g~ap:let lns = getline(1,3)
:q!
:call append(line('$'), lns)
:"
:wq! test.out
ENDTEST