diff options
| author | Josh Rahm <joshuarahm@gmail.com> | 2023-11-29 21:52:58 +0000 |
|---|---|---|
| committer | Josh Rahm <joshuarahm@gmail.com> | 2023-11-29 21:52:58 +0000 |
| commit | 931bffbda3668ddc609fc1da8f9eb576b170aa52 (patch) | |
| tree | d8c1843a95da5ea0bb4acc09f7e37843d9995c86 /src/nvim/testdir/test_functions.vim | |
| parent | 142d9041391780ac15b89886a54015fdc5c73995 (diff) | |
| parent | 4a8bf24ac690004aedf5540fa440e788459e5e34 (diff) | |
| download | rneovim-userreg.tar.gz rneovim-userreg.tar.bz2 rneovim-userreg.zip | |
Merge remote-tracking branch 'upstream/master' into userreguserreg
Diffstat (limited to 'src/nvim/testdir/test_functions.vim')
| -rw-r--r-- | src/nvim/testdir/test_functions.vim | 2559 |
1 files changed, 0 insertions, 2559 deletions
diff --git a/src/nvim/testdir/test_functions.vim b/src/nvim/testdir/test_functions.vim deleted file mode 100644 index 500c30c76b..0000000000 --- a/src/nvim/testdir/test_functions.vim +++ /dev/null @@ -1,2559 +0,0 @@ -" Tests for various functions. - -source shared.vim -source check.vim -source term_util.vim -source screendump.vim -source vim9.vim - -" Must be done first, since the alternate buffer must be unset. -func Test_00_bufexists() - call assert_equal(0, bufexists('does_not_exist')) - call assert_equal(1, bufexists(bufnr('%'))) - call assert_equal(0, bufexists(0)) - new Xfoo - let bn = bufnr('%') - call assert_equal(1, bufexists(bn)) - call assert_equal(1, bufexists('Xfoo')) - call assert_equal(1, bufexists(getcwd() . '/Xfoo')) - call assert_equal(1, bufexists(0)) - bw - call assert_equal(0, bufexists(bn)) - call assert_equal(0, bufexists('Xfoo')) -endfunc - -func Test_has() - throw 'Skipped: Nvim has removed some features' - call assert_equal(1, has('eval')) - call assert_equal(1, has('eval', 1)) - - if has('unix') - call assert_equal(1, or(has('ttyin'), 1)) - call assert_equal(0, and(has('ttyout'), 0)) - call assert_equal(1, has('multi_byte_encoding')) - endif - call assert_equal(1, has('vcon', 1)) - call assert_equal(1, has('mouse_gpm_enabled', 1)) - - call assert_equal(0, has('nonexistent')) - call assert_equal(0, has('nonexistent', 1)) - - " Will we ever have patch 9999? - let ver = 'patch-' .. v:version / 100 .. '.' .. v:version % 100 .. '.9999' - call assert_equal(0, has(ver)) -endfunc - -func Test_empty() - call assert_equal(1, empty('')) - call assert_equal(0, empty('a')) - - call assert_equal(1, empty(0)) - call assert_equal(1, empty(-0)) - call assert_equal(0, empty(1)) - call assert_equal(0, empty(-1)) - - if has('float') - call assert_equal(1, empty(0.0)) - call assert_equal(1, empty(-0.0)) - call assert_equal(0, empty(1.0)) - call assert_equal(0, empty(-1.0)) - call assert_equal(0, empty(1.0/0.0)) - call assert_equal(0, empty(0.0/0.0)) - endif - - call assert_equal(1, empty([])) - call assert_equal(0, empty(['a'])) - - call assert_equal(1, empty({})) - call assert_equal(0, empty({'a':1})) - - call assert_equal(1, empty(v:null)) - " call assert_equal(1, empty(v:none)) - call assert_equal(1, empty(v:false)) - call assert_equal(0, empty(v:true)) - - if has('channel') - call assert_equal(1, empty(test_null_channel())) - endif - if has('job') - call assert_equal(1, empty(test_null_job())) - endif - - call assert_equal(0, empty(function('Test_empty'))) - call assert_equal(0, empty(function('Test_empty', [0]))) -endfunc - -func Test_len() - call assert_equal(1, len(0)) - call assert_equal(2, len(12)) - - call assert_equal(0, len('')) - call assert_equal(2, len('ab')) - - call assert_equal(0, len([])) - call assert_equal(0, len(v:_null_list)) - call assert_equal(2, len([2, 1])) - - call assert_equal(0, len({})) - call assert_equal(0, len(v:_null_dict)) - call assert_equal(2, len({'a': 1, 'b': 2})) - - " call assert_fails('call len(v:none)', 'E701:') - call assert_fails('call len({-> 0})', 'E701:') -endfunc - -func Test_max() - call assert_equal(0, max([])) - call assert_equal(2, max([2])) - call assert_equal(2, max([1, 2])) - call assert_equal(2, max([1, 2, v:null])) - - call assert_equal(0, max({})) - call assert_equal(2, max({'a':1, 'b':2})) - - call assert_fails('call max(1)', 'E712:') - " call assert_fails('call max(v:none)', 'E712:') - - " check we only get one error - call assert_fails('call max([#{}, [1]])', ['E728:', 'E728:']) - call assert_fails('call max(#{a: {}, b: [1]})', ['E728:', 'E728:']) -endfunc - -func Test_min() - call assert_equal(0, min([])) - call assert_equal(2, min([2])) - call assert_equal(1, min([1, 2])) - call assert_equal(0, min([1, 2, v:null])) - - call assert_equal(0, min({})) - call assert_equal(1, min({'a':1, 'b':2})) - - call assert_fails('call min(1)', 'E712:') - " call assert_fails('call min(v:none)', 'E712:') - call assert_fails('call min([1, {}])', 'E728:') - - " check we only get one error - call assert_fails('call min([[1], #{}])', ['E745:', 'E745:']) - call assert_fails('call min(#{a: [1], b: #{}})', ['E745:', 'E745:']) -endfunc - -func Test_strwidth() - for aw in ['single', 'double'] - exe 'set ambiwidth=' . aw - call assert_equal(0, strwidth('')) - call assert_equal(1, strwidth("\t")) - call assert_equal(3, strwidth('Vim')) - call assert_equal(4, strwidth(1234)) - call assert_equal(5, strwidth(-1234)) - - call assert_equal(2, strwidth('😉')) - call assert_equal(17, strwidth('Eĥoŝanĝo ĉiuĵaŭde')) - call assert_equal((aw == 'single') ? 6 : 7, strwidth('Straße')) - - call assert_fails('call strwidth({->0})', 'E729:') - call assert_fails('call strwidth([])', 'E730:') - call assert_fails('call strwidth({})', 'E731:') - if has('float') - call assert_fails('call strwidth(1.2)', 'E806:') - endif - endfor - - set ambiwidth& -endfunc - -func Test_str2nr() - call assert_equal(0, str2nr('')) - call assert_equal(1, str2nr('1')) - call assert_equal(1, str2nr(' 1 ')) - - call assert_equal(1, str2nr('+1')) - call assert_equal(1, str2nr('+ 1')) - call assert_equal(1, str2nr(' + 1 ')) - - call assert_equal(-1, str2nr('-1')) - call assert_equal(-1, str2nr('- 1')) - call assert_equal(-1, str2nr(' - 1 ')) - - call assert_equal(123456789, str2nr('123456789')) - call assert_equal(-123456789, str2nr('-123456789')) - - call assert_equal(5, str2nr('101', 2)) - call assert_equal(5, '0b101'->str2nr(2)) - call assert_equal(5, str2nr('0B101', 2)) - call assert_equal(-5, str2nr('-101', 2)) - call assert_equal(-5, str2nr('-0b101', 2)) - call assert_equal(-5, str2nr('-0B101', 2)) - - call assert_equal(65, str2nr('101', 8)) - call assert_equal(65, str2nr('0101', 8)) - call assert_equal(-65, str2nr('-101', 8)) - call assert_equal(-65, str2nr('-0101', 8)) - call assert_equal(65, str2nr('0o101', 8)) - call assert_equal(65, str2nr('0O0101', 8)) - call assert_equal(-65, str2nr('-0O101', 8)) - call assert_equal(-65, str2nr('-0o0101', 8)) - - call assert_equal(11259375, str2nr('abcdef', 16)) - call assert_equal(11259375, str2nr('ABCDEF', 16)) - call assert_equal(-11259375, str2nr('-ABCDEF', 16)) - call assert_equal(11259375, str2nr('0xabcdef', 16)) - call assert_equal(11259375, str2nr('0Xabcdef', 16)) - call assert_equal(11259375, str2nr('0XABCDEF', 16)) - call assert_equal(-11259375, str2nr('-0xABCDEF', 16)) - - call assert_equal(1, str2nr("1'000'000", 10, 0)) - call assert_equal(256, str2nr("1'0000'0000", 2, 1)) - call assert_equal(262144, str2nr("1'000'000", 8, 1)) - call assert_equal(1000000, str2nr("1'000'000", 10, 1)) - call assert_equal(1000, str2nr("1'000''000", 10, 1)) - call assert_equal(65536, str2nr("1'00'00", 16, 1)) - - call assert_equal(0, str2nr('0x10')) - call assert_equal(0, str2nr('0b10')) - call assert_equal(0, str2nr('0o10')) - call assert_equal(1, str2nr('12', 2)) - call assert_equal(1, str2nr('18', 8)) - call assert_equal(1, str2nr('1g', 16)) - - call assert_equal(0, str2nr(v:null)) - " call assert_equal(0, str2nr(v:none)) - - call assert_fails('call str2nr([])', 'E730:') - call assert_fails('call str2nr({->2})', 'E729:') - if has('float') - call assert_fails('call str2nr(1.2)', 'E806:') - endif - call assert_fails('call str2nr(10, [])', 'E745:') -endfunc - -func Test_strftime() - CheckFunction strftime - - " Format of strftime() depends on system. We assume - " that basic formats tested here are available and - " identical on all systems which support strftime(). - " - " The 2nd parameter of strftime() is a local time, so the output day - " of strftime() can be 17 or 18, depending on timezone. - call assert_match('^2017-01-1[78]$', strftime('%Y-%m-%d', 1484695512)) - " - call assert_match('^\d\d\d\d-\(0\d\|1[012]\)-\([012]\d\|3[01]\) \([01]\d\|2[0-3]\):[0-5]\d:\([0-5]\d\|60\)$', '%Y-%m-%d %H:%M:%S'->strftime()) - - call assert_fails('call strftime([])', 'E730:') - call assert_fails('call strftime("%Y", [])', 'E745:') - - " Check that the time changes after we change the timezone - " Save previous timezone value, if any - if exists('$TZ') - let tz = $TZ - endif - - " Force EST and then UTC, save the current hour (24-hour clock) for each - let $TZ = 'EST' | let est = strftime('%H') - let $TZ = 'UTC' | let utc = strftime('%H') - - " Those hours should be two bytes long, and should not be the same; if they - " are, a tzset(3) call may have failed somewhere - call assert_equal(strlen(est), 2) - call assert_equal(strlen(utc), 2) - " TODO: this fails on MS-Windows - if has('unix') - call assert_notequal(est, utc) - endif - - " If we cached a timezone value, put it back, otherwise clear it - if exists('tz') - let $TZ = tz - else - unlet $TZ - endif -endfunc - -func Test_strptime() - CheckFunction strptime - CheckNotMSWindows - - if exists('$TZ') - let tz = $TZ - endif - let $TZ = 'UTC' - - call assert_equal(1484653763, strptime('%Y-%m-%d %T', '2017-01-17 11:49:23')) - - " Force DST and check that it's considered - let $TZ = 'WINTER0SUMMER,J1,J365' - call assert_equal(1484653763 - 3600, strptime('%Y-%m-%d %T', '2017-01-17 11:49:23')) - - call assert_fails('call strptime()', 'E119:') - call assert_fails('call strptime("xxx")', 'E119:') - call assert_equal(0, strptime("%Y", '')) - call assert_equal(0, strptime("%Y", "xxx")) - - if exists('tz') - let $TZ = tz - else - unlet $TZ - endif -endfunc - -func Test_resolve_unix() - if !has('unix') - return - endif - - " Xlink1 -> Xlink2 - " Xlink2 -> Xlink3 - silent !ln -s -f Xlink2 Xlink1 - silent !ln -s -f Xlink3 Xlink2 - call assert_equal('Xlink3', resolve('Xlink1')) - call assert_equal('./Xlink3', resolve('./Xlink1')) - call assert_equal('Xlink3/', resolve('Xlink2/')) - " FIXME: these tests result in things like "Xlink2/" instead of "Xlink3/"?! - "call assert_equal('Xlink3/', resolve('Xlink1/')) - "call assert_equal('./Xlink3/', resolve('./Xlink1/')) - "call assert_equal(getcwd() . '/Xlink3/', resolve(getcwd() . '/Xlink1/')) - call assert_equal(getcwd() . '/Xlink3', resolve(getcwd() . '/Xlink1')) - - " Test resolve() with a symlink cycle. - " Xlink1 -> Xlink2 - " Xlink2 -> Xlink3 - " Xlink3 -> Xlink1 - silent !ln -s -f Xlink1 Xlink3 - call assert_fails('call resolve("Xlink1")', 'E655:') - call assert_fails('call resolve("./Xlink1")', 'E655:') - call assert_fails('call resolve("Xlink2")', 'E655:') - call assert_fails('call resolve("Xlink3")', 'E655:') - call delete('Xlink1') - call delete('Xlink2') - call delete('Xlink3') - - silent !ln -s -f Xdir//Xfile Xlink - call assert_equal('Xdir/Xfile', resolve('Xlink')) - call delete('Xlink') - - silent !ln -s -f Xlink2/ Xlink1 - call assert_equal('Xlink2', 'Xlink1'->resolve()) - call assert_equal('Xlink2/', resolve('Xlink1/')) - call delete('Xlink1') - - silent !ln -s -f ./Xlink2 Xlink1 - call assert_equal('Xlink2', resolve('Xlink1')) - call assert_equal('./Xlink2', resolve('./Xlink1')) - call delete('Xlink1') - - call assert_equal('/', resolve('/')) -endfunc - -func s:normalize_fname(fname) - let ret = substitute(a:fname, '\', '/', 'g') - let ret = substitute(ret, '//', '/', 'g') - return ret->tolower() -endfunc - -func Test_simplify() - call assert_equal('', simplify('')) - call assert_equal('/', simplify('/')) - call assert_equal('/', simplify('/.')) - call assert_equal('/', simplify('/..')) - call assert_equal('/...', simplify('/...')) - call assert_equal('./dir/file', './dir/file'->simplify()) - call assert_equal('./dir/file', simplify('.///dir//file')) - call assert_equal('./dir/file', simplify('./dir/./file')) - call assert_equal('./file', simplify('./dir/../file')) - call assert_equal('../dir/file', simplify('dir/../../dir/file')) - call assert_equal('./file', simplify('dir/.././file')) - call assert_equal('../dir', simplify('./../dir')) - call assert_equal('..', simplify('../testdir/..')) - call mkdir('Xdir') - call assert_equal('.', simplify('Xdir/../.')) - call delete('Xdir', 'd') - - call assert_fails('call simplify({->0})', 'E729:') - call assert_fails('call simplify([])', 'E730:') - call assert_fails('call simplify({})', 'E731:') - if has('float') - call assert_fails('call simplify(1.2)', 'E806:') - endif -endfunc - -func Test_pathshorten() - call assert_equal('', pathshorten('')) - call assert_equal('foo', pathshorten('foo')) - call assert_equal('/foo', '/foo'->pathshorten()) - call assert_equal('f/', pathshorten('foo/')) - call assert_equal('f/bar', pathshorten('foo/bar')) - call assert_equal('f/b/foobar', 'foo/bar/foobar'->pathshorten()) - call assert_equal('/f/b/foobar', pathshorten('/foo/bar/foobar')) - call assert_equal('.f/bar', pathshorten('.foo/bar')) - call assert_equal('~f/bar', pathshorten('~foo/bar')) - call assert_equal('~.f/bar', pathshorten('~.foo/bar')) - call assert_equal('.~f/bar', pathshorten('.~foo/bar')) - call assert_equal('~/f/bar', pathshorten('~/foo/bar')) - call assert_fails('call pathshorten([])', 'E730:') - - " test pathshorten with optional variable to set preferred size of shortening - call assert_equal('', pathshorten('', 2)) - call assert_equal('foo', pathshorten('foo', 2)) - call assert_equal('/foo', pathshorten('/foo', 2)) - call assert_equal('fo/', pathshorten('foo/', 2)) - call assert_equal('fo/bar', pathshorten('foo/bar', 2)) - call assert_equal('fo/ba/foobar', pathshorten('foo/bar/foobar', 2)) - call assert_equal('/fo/ba/foobar', pathshorten('/foo/bar/foobar', 2)) - call assert_equal('.fo/bar', pathshorten('.foo/bar', 2)) - call assert_equal('~fo/bar', pathshorten('~foo/bar', 2)) - call assert_equal('~.fo/bar', pathshorten('~.foo/bar', 2)) - call assert_equal('.~fo/bar', pathshorten('.~foo/bar', 2)) - call assert_equal('~/fo/bar', pathshorten('~/foo/bar', 2)) - call assert_fails('call pathshorten([],2)', 'E730:') - call assert_notequal('~/fo/bar', pathshorten('~/foo/bar', 3)) - call assert_equal('~/foo/bar', pathshorten('~/foo/bar', 3)) - call assert_equal('~/f/bar', pathshorten('~/foo/bar', 0)) -endfunc - -func Test_strpart() - call assert_equal('de', strpart('abcdefg', 3, 2)) - call assert_equal('ab', strpart('abcdefg', -2, 4)) - call assert_equal('abcdefg', 'abcdefg'->strpart(-2)) - call assert_equal('fg', strpart('abcdefg', 5, 4)) - call assert_equal('defg', strpart('abcdefg', 3)) - call assert_equal('', strpart('abcdefg', 10)) - call assert_fails("let s=strpart('abcdef', [])", 'E745:') - - call assert_equal('lép', strpart('éléphant', 2, 4)) - call assert_equal('léphant', strpart('éléphant', 2)) - - call assert_equal('é', strpart('éléphant', 0, 1, 1)) - call assert_equal('ép', strpart('éléphant', 3, 2, v:true)) - call assert_equal('ó', strpart('cómposed', 1, 1, 1)) -endfunc - -func Test_tolower() - call assert_equal("", tolower("")) - - " Test with all printable ASCII characters. - call assert_equal(' !"#$%&''()*+,-./0123456789:;<=>?@abcdefghijklmnopqrstuvwxyz[\]^_`abcdefghijklmnopqrstuvwxyz{|}~', - \ tolower(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~')) - - " Test with a few uppercase diacritics. - call assert_equal("aàáâãäåāăąǎǟǡả", tolower("AÀÁÂÃÄÅĀĂĄǍǞǠẢ")) - call assert_equal("bḃḇ", tolower("BḂḆ")) - call assert_equal("cçćĉċč", tolower("CÇĆĈĊČ")) - call assert_equal("dďđḋḏḑ", tolower("DĎĐḊḎḐ")) - call assert_equal("eèéêëēĕėęěẻẽ", tolower("EÈÉÊËĒĔĖĘĚẺẼ")) - call assert_equal("fḟ ", tolower("FḞ ")) - call assert_equal("gĝğġģǥǧǵḡ", tolower("GĜĞĠĢǤǦǴḠ")) - call assert_equal("hĥħḣḧḩ", tolower("HĤĦḢḦḨ")) - call assert_equal("iìíîïĩīĭįiǐỉ", tolower("IÌÍÎÏĨĪĬĮİǏỈ")) - call assert_equal("jĵ", tolower("JĴ")) - call assert_equal("kķǩḱḵ", tolower("KĶǨḰḴ")) - call assert_equal("lĺļľŀłḻ", tolower("LĹĻĽĿŁḺ")) - call assert_equal("mḿṁ", tolower("MḾṀ")) - call assert_equal("nñńņňṅṉ", tolower("NÑŃŅŇṄṈ")) - call assert_equal("oòóôõöøōŏőơǒǫǭỏ", tolower("OÒÓÔÕÖØŌŎŐƠǑǪǬỎ")) - call assert_equal("pṕṗ", tolower("PṔṖ")) - call assert_equal("q", tolower("Q")) - call assert_equal("rŕŗřṙṟ", tolower("RŔŖŘṘṞ")) - call assert_equal("sśŝşšṡ", tolower("SŚŜŞŠṠ")) - call assert_equal("tţťŧṫṯ", tolower("TŢŤŦṪṮ")) - call assert_equal("uùúûüũūŭůűųưǔủ", tolower("UÙÚÛÜŨŪŬŮŰŲƯǓỦ")) - call assert_equal("vṽ", tolower("VṼ")) - call assert_equal("wŵẁẃẅẇ", tolower("WŴẀẂẄẆ")) - call assert_equal("xẋẍ", tolower("XẊẌ")) - call assert_equal("yýŷÿẏỳỷỹ", tolower("YÝŶŸẎỲỶỸ")) - call assert_equal("zźżžƶẑẕ", tolower("ZŹŻŽƵẐẔ")) - - " Test with a few lowercase diacritics, which should remain unchanged. - call assert_equal("aàáâãäåāăąǎǟǡả", tolower("aàáâãäåāăąǎǟǡả")) - call assert_equal("bḃḇ", tolower("bḃḇ")) - call assert_equal("cçćĉċč", tolower("cçćĉċč")) - call assert_equal("dďđḋḏḑ", tolower("dďđḋḏḑ")) - call assert_equal("eèéêëēĕėęěẻẽ", tolower("eèéêëēĕėęěẻẽ")) - call assert_equal("fḟ", tolower("fḟ")) - call assert_equal("gĝğġģǥǧǵḡ", tolower("gĝğġģǥǧǵḡ")) - call assert_equal("hĥħḣḧḩẖ", tolower("hĥħḣḧḩẖ")) - call assert_equal("iìíîïĩīĭįǐỉ", tolower("iìíîïĩīĭįǐỉ")) - call assert_equal("jĵǰ", tolower("jĵǰ")) - call assert_equal("kķǩḱḵ", tolower("kķǩḱḵ")) - call assert_equal("lĺļľŀłḻ", tolower("lĺļľŀłḻ")) - call assert_equal("mḿṁ ", tolower("mḿṁ ")) - call assert_equal("nñńņňʼnṅṉ", tolower("nñńņňʼnṅṉ")) - call assert_equal("oòóôõöøōŏőơǒǫǭỏ", tolower("oòóôõöøōŏőơǒǫǭỏ")) - call assert_equal("pṕṗ", tolower("pṕṗ")) - call assert_equal("q", tolower("q")) - call assert_equal("rŕŗřṙṟ", tolower("rŕŗřṙṟ")) - call assert_equal("sśŝşšṡ", tolower("sśŝşšṡ")) - call assert_equal("tţťŧṫṯẗ", tolower("tţťŧṫṯẗ")) - call assert_equal("uùúûüũūŭůűųưǔủ", tolower("uùúûüũūŭůűųưǔủ")) - call assert_equal("vṽ", tolower("vṽ")) - call assert_equal("wŵẁẃẅẇẘ", tolower("wŵẁẃẅẇẘ")) - call assert_equal("ẋẍ", tolower("ẋẍ")) - call assert_equal("yýÿŷẏẙỳỷỹ", tolower("yýÿŷẏẙỳỷỹ")) - call assert_equal("zźżžƶẑẕ", tolower("zźżžƶẑẕ")) - - " According to https://twitter.com/jifa/status/625776454479970304 - " Ⱥ (U+023A) and Ⱦ (U+023E) are the *only* code points to increase - " in length (2 to 3 bytes) when lowercased. So let's test them. - call assert_equal("ⱥ ⱦ", tolower("Ⱥ Ⱦ")) - - " This call to tolower with invalid utf8 sequence used to cause access to - " invalid memory. - call tolower("\xC0\x80\xC0") - call tolower("123\xC0\x80\xC0") - - " Test in latin1 encoding - let save_enc = &encoding - " set encoding=latin1 - call assert_equal("abc", tolower("ABC")) - let &encoding = save_enc -endfunc - -func Test_toupper() - call assert_equal("", toupper("")) - - " Test with all printable ASCII characters. - call assert_equal(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ABCDEFGHIJKLMNOPQRSTUVWXYZ{|}~', - \ toupper(' !"#$%&''()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~')) - - " Test with a few lowercase diacritics. - call assert_equal("AÀÁÂÃÄÅĀĂĄǍǞǠẢ", "aàáâãäåāăąǎǟǡả"->toupper()) - call assert_equal("BḂḆ", toupper("bḃḇ")) - call assert_equal("CÇĆĈĊČ", toupper("cçćĉċč")) - call assert_equal("DĎĐḊḎḐ", toupper("dďđḋḏḑ")) - call assert_equal("EÈÉÊËĒĔĖĘĚẺẼ", toupper("eèéêëēĕėęěẻẽ")) - call assert_equal("FḞ", toupper("fḟ")) - call assert_equal("GĜĞĠĢǤǦǴḠ", toupper("gĝğġģǥǧǵḡ")) - call assert_equal("HĤĦḢḦḨẖ", toupper("hĥħḣḧḩẖ")) - call assert_equal("IÌÍÎÏĨĪĬĮǏỈ", toupper("iìíîïĩīĭįǐỉ")) - call assert_equal("JĴǰ", toupper("jĵǰ")) - call assert_equal("KĶǨḰḴ", toupper("kķǩḱḵ")) - call assert_equal("LĹĻĽĿŁḺ", toupper("lĺļľŀłḻ")) - call assert_equal("MḾṀ ", toupper("mḿṁ ")) - call assert_equal("NÑŃŅŇʼnṄṈ", toupper("nñńņňʼnṅṉ")) - call assert_equal("OÒÓÔÕÖØŌŎŐƠǑǪǬỎ", toupper("oòóôõöøōŏőơǒǫǭỏ")) - call assert_equal("PṔṖ", toupper("pṕṗ")) - call assert_equal("Q", toupper("q")) - call assert_equal("RŔŖŘṘṞ", toupper("rŕŗřṙṟ")) - call assert_equal("SŚŜŞŠṠ", toupper("sśŝşšṡ")) - call assert_equal("TŢŤŦṪṮẗ", toupper("tţťŧṫṯẗ")) - call assert_equal("UÙÚÛÜŨŪŬŮŰŲƯǓỦ", toupper("uùúûüũūŭůűųưǔủ")) - call assert_equal("VṼ", toupper("vṽ")) - call assert_equal("WŴẀẂẄẆẘ", toupper("wŵẁẃẅẇẘ")) - call assert_equal("ẊẌ", toupper("ẋẍ")) - call assert_equal("YÝŸŶẎẙỲỶỸ", toupper("yýÿŷẏẙỳỷỹ")) - call assert_equal("ZŹŻŽƵẐẔ", toupper("zźżžƶẑẕ")) - - " Test that uppercase diacritics, which should remain unchanged. - call assert_equal("AÀÁÂÃÄÅĀĂĄǍǞǠẢ", toupper("AÀÁÂÃÄÅĀĂĄǍǞǠẢ")) - call assert_equal("BḂḆ", toupper("BḂḆ")) - call assert_equal("CÇĆĈĊČ", toupper("CÇĆĈĊČ")) - call assert_equal("DĎĐḊḎḐ", toupper("DĎĐḊḎḐ")) - call assert_equal("EÈÉÊËĒĔĖĘĚẺẼ", toupper("EÈÉÊËĒĔĖĘĚẺẼ")) - call assert_equal("FḞ ", toupper("FḞ ")) - call assert_equal("GĜĞĠĢǤǦǴḠ", toupper("GĜĞĠĢǤǦǴḠ")) - call assert_equal("HĤĦḢḦḨ", toupper("HĤĦḢḦḨ")) - call assert_equal("IÌÍÎÏĨĪĬĮİǏỈ", toupper("IÌÍÎÏĨĪĬĮİǏỈ")) - call assert_equal("JĴ", toupper("JĴ")) - call assert_equal("KĶǨḰḴ", toupper("KĶǨḰḴ")) - call assert_equal("LĹĻĽĿŁḺ", toupper("LĹĻĽĿŁḺ")) - call assert_equal("MḾṀ", toupper("MḾṀ")) - call assert_equal("NÑŃŅŇṄṈ", toupper("NÑŃŅŇṄṈ")) - call assert_equal("OÒÓÔÕÖØŌŎŐƠǑǪǬỎ", toupper("OÒÓÔÕÖØŌŎŐƠǑǪǬỎ")) - call assert_equal("PṔṖ", toupper("PṔṖ")) - call assert_equal("Q", toupper("Q")) - call assert_equal("RŔŖŘṘṞ", toupper("RŔŖŘṘṞ")) - call assert_equal("SŚŜŞŠṠ", toupper("SŚŜŞŠṠ")) - call assert_equal("TŢŤŦṪṮ", toupper("TŢŤŦṪṮ")) - call assert_equal("UÙÚÛÜŨŪŬŮŰŲƯǓỦ", toupper("UÙÚÛÜŨŪŬŮŰŲƯǓỦ")) - call assert_equal("VṼ", toupper("VṼ")) - call assert_equal("WŴẀẂẄẆ", toupper("WŴẀẂẄẆ")) - call assert_equal("XẊẌ", toupper("XẊẌ")) - call assert_equal("YÝŶŸẎỲỶỸ", toupper("YÝŶŸẎỲỶỸ")) - call assert_equal("ZŹŻŽƵẐẔ", toupper("ZŹŻŽƵẐẔ")) - - call assert_equal("Ⱥ Ⱦ", toupper("ⱥ ⱦ")) - - " This call to toupper with invalid utf8 sequence used to cause access to - " invalid memory. - call toupper("\xC0\x80\xC0") - call toupper("123\xC0\x80\xC0") - - " Test in latin1 encoding - let save_enc = &encoding - " set encoding=latin1 - call assert_equal("ABC", toupper("abc")) - let &encoding = save_enc -endfunc - -func Test_tr() - call assert_equal('foo', tr('bar', 'bar', 'foo')) - call assert_equal('zxy', 'cab'->tr('abc', 'xyz')) - call assert_fails("let s=tr([], 'abc', 'def')", 'E730:') - call assert_fails("let s=tr('abc', [], 'def')", 'E730:') - call assert_fails("let s=tr('abc', 'abc', [])", 'E730:') - call assert_fails("let s=tr('abcd', 'abcd', 'def')", 'E475:') - " set encoding=latin1 - call assert_fails("let s=tr('abcd', 'abcd', 'def')", 'E475:') - call assert_equal('hEllO', tr('hello', 'eo', 'EO')) - call assert_equal('hello', tr('hello', 'xy', 'ab')) - call assert_fails('call tr("abc", "123", "₁₂")', 'E475:') - set encoding=utf8 -endfunc - -" Tests for the mode() function -let current_modes = '' -func Save_mode() - let g:current_modes = mode(0) . '-' . mode(1) - return '' -endfunc - -" Test for the mode() function -func Test_mode() - new - call append(0, ["Blue Ball Black", "Brown Band Bowl", ""]) - - " Only complete from the current buffer. - set complete=. - - inoremap <F2> <C-R>=Save_mode()<CR> - xnoremap <F2> <Cmd>call Save_mode()<CR> - - normal! 3G - exe "normal i\<F2>\<Esc>" - call assert_equal('i-i', g:current_modes) - " i_CTRL-P: Multiple matches - exe "normal i\<C-G>uBa\<C-P>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-P: Single match - exe "normal iBro\<C-P>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-X - exe "normal iBa\<C-X>\<F2>\<Esc>u" - call assert_equal('i-ix', g:current_modes) - " i_CTRL-X CTRL-P: Multiple matches - exe "normal iBa\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-X CTRL-P: Single match - exe "normal iBro\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-X CTRL-P + CTRL-P: Single match - exe "normal iBro\<C-X>\<C-P>\<C-P>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-X CTRL-L: Multiple matches - exe "normal i\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-X CTRL-L: Single match - exe "normal iBlu\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-P: No match - exe "normal iCom\<C-P>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-X CTRL-P: No match - exe "normal iCom\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - " i_CTRL-X CTRL-L: No match - exe "normal iabc\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('i-ic', g:current_modes) - - exe "normal R\<F2>\<Esc>" - call assert_equal('R-R', g:current_modes) - " R_CTRL-P: Multiple matches - exe "normal RBa\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-P: Single match - exe "normal RBro\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-X - exe "normal RBa\<C-X>\<F2>\<Esc>u" - call assert_equal('R-Rx', g:current_modes) - " R_CTRL-X CTRL-P: Multiple matches - exe "normal RBa\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-X CTRL-P: Single match - exe "normal RBro\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-X CTRL-P + CTRL-P: Single match - exe "normal RBro\<C-X>\<C-P>\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-X CTRL-L: Multiple matches - exe "normal R\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-X CTRL-L: Single match - exe "normal RBlu\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-P: No match - exe "normal RCom\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-X CTRL-P: No match - exe "normal RCom\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - " R_CTRL-X CTRL-L: No match - exe "normal Rabc\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('R-Rc', g:current_modes) - - exe "normal gR\<F2>\<Esc>" - call assert_equal('R-Rv', g:current_modes) - " gR_CTRL-P: Multiple matches - exe "normal gRBa\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-P: Single match - exe "normal gRBro\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-X - exe "normal gRBa\<C-X>\<F2>\<Esc>u" - call assert_equal('R-Rvx', g:current_modes) - " gR_CTRL-X CTRL-P: Multiple matches - exe "normal gRBa\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-X CTRL-P: Single match - exe "normal gRBro\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-X CTRL-P + CTRL-P: Single match - exe "normal gRBro\<C-X>\<C-P>\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-X CTRL-L: Multiple matches - exe "normal gR\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-X CTRL-L: Single match - exe "normal gRBlu\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-P: No match - exe "normal gRCom\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-X CTRL-P: No match - exe "normal gRCom\<C-X>\<C-P>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - " gR_CTRL-X CTRL-L: No match - exe "normal gRabc\<C-X>\<C-L>\<F2>\<Esc>u" - call assert_equal('R-Rvc', g:current_modes) - - call assert_equal('n', 0->mode()) - call assert_equal('n', 1->mode()) - - " i_CTRL-O - exe "normal i\<C-O>:call Save_mode()\<Cr>\<Esc>" - call assert_equal("n-niI", g:current_modes) - - " R_CTRL-O - exe "normal R\<C-O>:call Save_mode()\<Cr>\<Esc>" - call assert_equal("n-niR", g:current_modes) - - " gR_CTRL-O - exe "normal gR\<C-O>:call Save_mode()\<Cr>\<Esc>" - call assert_equal("n-niV", g:current_modes) - - " How to test operator-pending mode? - - call feedkeys("v", 'xt') - call assert_equal('v', mode()) - call assert_equal('v', mode(1)) - call feedkeys("\<Esc>V", 'xt') - call assert_equal('V', mode()) - call assert_equal('V', mode(1)) - call feedkeys("\<Esc>\<C-V>", 'xt') - call assert_equal("\<C-V>", mode()) - call assert_equal("\<C-V>", mode(1)) - call feedkeys("\<Esc>", 'xt') - - call feedkeys("gh", 'xt') - call assert_equal('s', mode()) - call assert_equal('s', mode(1)) - call feedkeys("\<Esc>gH", 'xt') - call assert_equal('S', mode()) - call assert_equal('S', mode(1)) - call feedkeys("\<Esc>g\<C-H>", 'xt') - call assert_equal("\<C-S>", mode()) - call assert_equal("\<C-S>", mode(1)) - call feedkeys("\<Esc>", 'xt') - - " v_CTRL-O - exe "normal gh\<C-O>\<F2>\<Esc>" - call assert_equal("v-vs", g:current_modes) - exe "normal gH\<C-O>\<F2>\<Esc>" - call assert_equal("V-Vs", g:current_modes) - exe "normal g\<C-H>\<C-O>\<F2>\<Esc>" - call assert_equal("\<C-V>-\<C-V>s", g:current_modes) - - call feedkeys(":echo \<C-R>=Save_mode()\<C-U>\<CR>", 'xt') - call assert_equal('c-c', g:current_modes) - call feedkeys("gQecho \<C-R>=Save_mode()\<CR>\<CR>vi\<CR>", 'xt') - call assert_equal('c-cv', g:current_modes) - " call feedkeys("Qcall Save_mode()\<CR>vi\<CR>", 'xt') - " call assert_equal('c-ce', g:current_modes) - " How to test Ex mode? - - " Test mode in operatorfunc (it used to be Operator-pending). - set operatorfunc=OperatorFunc - function OperatorFunc(_) - call Save_mode() - endfunction - execute "normal! g@l\<Esc>" - call assert_equal('n-n', g:current_modes) - execute "normal! i\<C-o>g@l\<Esc>" - call assert_equal('n-niI', g:current_modes) - execute "normal! R\<C-o>g@l\<Esc>" - call assert_equal('n-niR', g:current_modes) - execute "normal! gR\<C-o>g@l\<Esc>" - call assert_equal('n-niV', g:current_modes) - - if has('terminal') - term - call feedkeys("\<C-W>N", 'xt') - call assert_equal('n', mode()) - call assert_equal('nt', mode(1)) - call feedkeys("aexit\<CR>", 'xt') - endif - - bwipe! - iunmap <F2> - xunmap <F2> - set complete& - set operatorfunc& - delfunction OperatorFunc -endfunc - -" Test for append() -func Test_append() - enew! - split - call append(0, ["foo"]) - call append(1, []) - call append(1, v:_null_list) - call assert_equal(['foo', ''], getline(1, '$')) - split - only - undo - undo - - " Using $ instead of '$' must give an error - call assert_fails("call append($, 'foobar')", 'E116:') - - call assert_fails("call append({}, '')", ['E728:', 'E728:']) -endfunc - -" Test for setline() -func Test_setline() - new - call setline(0, ["foo"]) - call setline(0, []) - call setline(0, v:_null_list) - call setline(1, ["bar"]) - call setline(1, []) - call setline(1, v:_null_list) - call setline(2, []) - call setline(2, v:_null_list) - call setline(3, []) - call setline(3, v:_null_list) - call setline(2, ["baz"]) - call assert_equal(['bar', 'baz'], getline(1, '$')) - close! -endfunc - -func Test_getbufvar() - let bnr = bufnr('%') - let b:var_num = '1234' - let def_num = '5678' - call assert_equal('1234', getbufvar(bnr, 'var_num')) - call assert_equal('1234', getbufvar(bnr, 'var_num', def_num)) - - let bd = getbufvar(bnr, '') - call assert_equal('1234', bd['var_num']) - call assert_true(exists("bd['changedtick']")) - call assert_equal(2, len(bd)) - - let bd2 = getbufvar(bnr, '', def_num) - call assert_equal(bd, bd2) - - unlet b:var_num - call assert_equal(def_num, getbufvar(bnr, 'var_num', def_num)) - call assert_equal('', getbufvar(bnr, 'var_num')) - - let bd = getbufvar(bnr, '') - call assert_equal(1, len(bd)) - let bd = getbufvar(bnr, '',def_num) - call assert_equal(1, len(bd)) - - call assert_equal('', getbufvar(9999, '')) - call assert_equal(def_num, getbufvar(9999, '', def_num)) - unlet def_num - - call assert_equal(0, getbufvar(bnr, '&autoindent')) - call assert_equal(0, getbufvar(bnr, '&autoindent', 1)) - - " Set and get a buffer-local variable - call setbufvar(bnr, 'bufvar_test', ['one', 'two']) - call assert_equal(['one', 'two'], getbufvar(bnr, 'bufvar_test')) - - " Open new window with forced option values - set fileformats=unix,dos - new ++ff=dos ++bin ++enc=iso-8859-2 - call assert_equal('dos', getbufvar(bufnr('%'), '&fileformat')) - call assert_equal(1, getbufvar(bufnr('%'), '&bin')) - call assert_equal('iso-8859-2', getbufvar(bufnr('%'), '&fenc')) - close - - " Get the b: dict. - let b:testvar = 'one' - new - let b:testvar = 'two' - let thebuf = bufnr() - wincmd w - call assert_equal('two', getbufvar(thebuf, 'testvar')) - call assert_equal('two', getbufvar(thebuf, '').testvar) - bwipe! - - set fileformats& -endfunc - -func Test_last_buffer_nr() - call assert_equal(bufnr('$'), last_buffer_nr()) -endfunc - -func Test_stridx() - call assert_equal(-1, stridx('', 'l')) - call assert_equal(0, stridx('', '')) - call assert_equal(0, 'hello'->stridx('')) - call assert_equal(-1, stridx('hello', 'L')) - call assert_equal(2, stridx('hello', 'l', -1)) - call assert_equal(2, stridx('hello', 'l', 0)) - call assert_equal(2, 'hello'->stridx('l', 1)) - call assert_equal(3, stridx('hello', 'l', 3)) - call assert_equal(-1, stridx('hello', 'l', 4)) - call assert_equal(-1, stridx('hello', 'l', 10)) - call assert_equal(2, stridx('hello', 'll')) - call assert_equal(-1, stridx('hello', 'hello world')) - call assert_fails("let n=stridx('hello', [])", 'E730:') - call assert_fails("let n=stridx([], 'l')", 'E730:') -endfunc - -func Test_strridx() - call assert_equal(-1, strridx('', 'l')) - call assert_equal(0, strridx('', '')) - call assert_equal(5, strridx('hello', '')) - call assert_equal(-1, strridx('hello', 'L')) - call assert_equal(3, 'hello'->strridx('l')) - call assert_equal(3, strridx('hello', 'l', 10)) - call assert_equal(3, |