" tLib.vim " @Author: Thomas Link (mailto:micathom AT gmail com?subject=vim-tLib) " @Website: http://www.vim.org/account/profile.php?user_id=4037 " @License: GPL (see http://www.gnu.org/licenses/gpl.txt) " @Created: 2006-12-17. " @Last Change: 2008-11-23. " @Revision: 129 if !exists("loaded_tassert") echoerr 'tAssert (vimscript #1730) is required' endif TAssertBegin! "tlib" " List {{{2 fun! Add(a,b) return a:a + a:b endf TAssert IsEqual(tlib#list#Inject([], 0, function('Add')), 0) TAssert IsEqual(tlib#list#Inject([1,2,3], 0, function('Add')), 6) delfunction Add TAssert IsEqual(tlib#list#Compact([]), []) TAssert IsEqual(tlib#list#Compact([0,1,2,3,[], {}, ""]), [1,2,3]) TAssert IsEqual(tlib#list#Flatten([]), []) TAssert IsEqual(tlib#list#Flatten([1,2,3]), [1,2,3]) TAssert IsEqual(tlib#list#Flatten([1,2, [1,2,3], 3]), [1,2,1,2,3,3]) TAssert IsEqual(tlib#list#Flatten([0,[1,2,[3,""]]]), [0,1,2,3,""]) TAssert IsEqual(tlib#list#FindAll([1,2,3], 'v:val >= 2'), [2,3]) TAssert IsEqual(tlib#list#FindAll([1,2,3], 'v:val >= 2', 'v:val * 10'), [20,30]) TAssert IsEqual(tlib#list#Find([1,2,3], 'v:val >= 2'), 2) TAssert IsEqual(tlib#list#Find([1,2,3], 'v:val >= 2', 0, 'v:val * 10'), 20) TAssert IsEqual(tlib#list#Find([1,2,3], 'v:val >= 5', 10), 10) TAssert IsEqual(tlib#list#Any([1,2,3], 'v:val >= 2'), 1) TAssert IsEqual(tlib#list#Any([1,2,3], 'v:val >= 5'), 0) TAssert IsEqual(tlib#list#All([1,2,3], 'v:val < 5'), 1) TAssert IsEqual(tlib#list#All([1,2,3], 'v:val >= 2'), 0) TAssert IsEqual(tlib#list#Remove([1,2,1,2], 2), [1,1,2]) TAssert IsEqual(tlib#list#RemoveAll([1,2,1,2], 2), [1,1]) TAssert IsEqual(tlib#list#Zip([[1,2,3], [4,5,6]]), [[1,4], [2,5], [3,6]]) TAssert IsEqual(tlib#list#Zip([[1,2,3], [4,5,6,7]]), [[1,4], [2,5], [3,6], ['', 7]]) TAssert IsEqual(tlib#list#Zip([[1,2,3], [4,5,6,7]], -1), [[1,4], [2,5], [3,6], [-1,7]]) TAssert IsEqual(tlib#list#Zip([[1,2,3,7], [4,5,6]], -1), [[1,4], [2,5], [3,6], [7,-1]]) " Vars {{{2 let g:foo = 1 let g:bar = 2 let b:bar = 3 let s:bar = 4 TAssert IsEqual(tlib#var#Get('bar', 'bg'), 3) TAssert IsEqual(tlib#var#Get('bar', 'g'), 2) TAssert IsEqual(tlib#var#Get('foo', 'bg'), 1) TAssert IsEqual(tlib#var#Get('foo', 'g'), 1) TAssert IsEqual(tlib#var#Get('none', 'l'), '') TAssert IsEqual(eval(tlib#var#EGet('bar', 'bg')), 3) TAssert IsEqual(eval(tlib#var#EGet('bar', 'g')), 2) " TAssert IsEqual(eval(tlib#var#EGet('bar', 'sg')), 4) TAssert IsEqual(eval(tlib#var#EGet('foo', 'bg')), 1) TAssert IsEqual(eval(tlib#var#EGet('foo', 'g')), 1) TAssert IsEqual(eval(tlib#var#EGet('none', 'l')), '') unlet g:foo unlet g:bar unlet b:bar " Filenames {{{2 TAssert IsEqual(tlib#file#Split('foo/bar/filename.txt'), ['foo', 'bar', 'filename.txt']) TAssert IsEqual(tlib#file#Split('/foo/bar/filename.txt'), ['', 'foo', 'bar', 'filename.txt']) TAssert IsEqual(tlib#file#Split('ftp://foo/bar/filename.txt'), ['ftp:/', 'foo', 'bar', 'filename.txt']) TAssert IsEqual(tlib#file#Join(['foo', 'bar', 'filename.txt']), 'foo/bar/filename.txt') TAssert IsEqual(tlib#file#Join(['', 'foo', 'bar', 'filename.txt']), '/foo/bar/filename.txt') TAssert IsEqual(tlib#file#Join(['ftp:/', 'foo', 'bar', 'filename.txt']), 'ftp://foo/bar/filename.txt') TAssert IsEqual(tlib#file#Relative('foo/bar/filename.txt', 'foo'), 'bar/filename.txt') TAssert IsEqual(tlib#file#Relative('foo/bar/filename.txt', 'foo/base'), '../bar/filename.txt') TAssert IsEqual(tlib#file#Relative('filename.txt', 'foo/base'), '../../filename.txt') TAssert IsEqual(tlib#file#Relative('/foo/bar/filename.txt', '/boo/base'), '../../foo/bar/filename.txt') TAssert IsEqual(tlib#file#Relative('/bar/filename.txt', '/boo/base'), '../../bar/filename.txt') TAssert IsEqual(tlib#file#Relative('/foo/bar/filename.txt', '/base'), '../foo/bar/filename.txt') TAssert IsEqual(tlib#file#Relative('c:/bar/filename.txt', 'x:/boo/base'), 'c:/bar/filename.txt') " Prototype-based programming {{{2 let test = tlib#Test#New() TAssert test.IsA('Test') TAssert !test.IsA('foo') TAssert test.RespondTo('RespondTo') TAssert !test.RespondTo('RespondToNothing') let test1 = tlib#Test#New() TAssert test.IsRelated(test1) let testworld = tlib#World#New() TAssert !test.IsRelated(testworld) let testc = tlib#TestChild#New() TAssert IsEqual(testc.Dummy(), 'TestChild.vim') TAssert IsEqual(testc.Super('Dummy', []), 'Test.vim') " Optional arguments {{{2 function! TestGetArg(...) "{{{3 exec tlib#arg#Get(1, 'foo', 1) return foo endf function! TestGetArg1(...) "{{{3 exec tlib#arg#Get(1, 'foo', 1, '!= ""') return foo endf TAssert IsEqual(TestGetArg(), 1) TAssert IsEqual(TestGetArg(''), '') TAssert IsEqual(TestGetArg(2), 2) TAssert IsEqual(TestGetArg1(), 1) TAssert IsEqual(TestGetArg1(''), 1) TAssert IsEqual(TestGetArg1(2), 2) function! TestArgs(...) "{{{3 exec tlib#arg#Let([['foo', "o"], ['bar', 2]]) return repeat(foo, bar) endf TAssert IsEqual(TestArgs(), 'oo') TAssert IsEqual(TestArgs('a'), 'aa') TAssert IsEqual(TestArgs('a', 3), 'aaa') function! TestArgs1(...) "{{{3 exec tlib#arg#Let(['foo', ['bar', 2]]) return repeat(foo, bar) endf TAssert IsEqual(TestArgs1(), '') TAssert IsEqual(TestArgs1('a'), 'aa') TAssert IsEqual(TestArgs1('a', 3), 'aaa') function! TestArgs2(...) "{{{3 exec tlib#arg#Let(['foo', 'bar'], 1) return repeat(foo, bar) endf TAssert IsEqual(TestArgs2(), '1') TAssert IsEqual(TestArgs2('a'), 'a') TAssert IsEqual(TestArgs2('a', 3), 'aaa') function! TestArgs3(...) TVarArg ['a', 1], 'b' return a . b endf TAssert IsEqual(TestArgs3(), '1') TAssert IsEqual(TestArgs3('a'), 'a') TAssert IsEqual(TestArgs3('a', 3), 'a3') delfunction TestGetArg delfunction TestGetArg1 delfunction TestArgs delfunction TestArgs1 delfunction TestArgs2 delfunction TestArgs3 " Strings {{{2 TAssert IsString(tlib#string#RemoveBackslashes('foo bar')) TAssert IsEqual(tlib#string#RemoveBackslashes('foo bar'), 'foo bar') TAssert IsEqual(tlib#string#RemoveBackslashes('foo\ bar'), 'foo bar') TAssert IsEqual(tlib#string#RemoveBackslashes('foo\ \\bar'), 'foo \\bar') TAssert IsEqual(tlib#string#RemoveBackslashes('foo\ \\bar', '\ '), 'foo \bar') " Regexp {{{2 for c in split('^$.*+\()|{}[]~', '\zs') let s = printf('%sfoo%sbar%s', c, c, c) TAssert (s =~ '\m^'. tlib#rx#Escape(s, 'm') .'$') TAssert (s =~ '\M^'. tlib#rx#Escape(s, 'M') .'$') TAssert (s =~ '\v^'. tlib#rx#Escape(s, 'v') .'$') TAssert (s =~ '\V\^'. tlib#rx#Escape(s, 'V') .'\$') endfor " Encode, decode TAssert IsEqual(tlib#url#Decode('http://example.com/foo+bar%25bar'), 'http://example.com/foo bar%bar') TAssert IsEqual(tlib#url#Decode('Hello%20World.%20%20Good%2c%20bye.'), 'Hello World. Good, bye.') TAssert IsEqual(tlib#url#Encode('foo bar%bar'), 'foo+bar%%bar') TAssert IsEqual(tlib#url#Encode('Hello World. Good, bye.'), 'Hello+World.+Good%2c+bye.') TAssertEnd test test1 testc testworld TAssert IsEqual(tlib#string#Count("fooo", "o"), 3) TAssert IsEqual(tlib#string#Count("***", "\\*"), 3) TAssert IsEqual(tlib#string#Count("***foo", "\\*"), 3) TAssert IsEqual(tlib#string#Count("foo***", "\\*"), 3) finish "{{{1 " Input {{{2 echo tlib#input#List('s', 'Test', ['barfoobar', 'barFoobar']) echo tlib#input#List('s', 'Test', ['barfoobar', 'bar foo bar', 'barFoobar']) echo tlib#input#List('s', 'Test', ['barfoobar', 'bar1Foo1bar', 'barFoobar']) echo tlib#input#EditList('Test', ['bar1', 'bar2', 'bar3', 'foo1', 'foo2', 'foo3'])