diff options
author | Björn Linse <bjorn.linse@gmail.com> | 2014-09-26 16:08:16 +0200 |
---|---|---|
committer | Björn Linse <bjorn.linse@gmail.com> | 2014-12-08 22:05:05 +0100 |
commit | d9639d3a9b512d2ef73018074fcf380d37f722a1 (patch) | |
tree | 6042b60cfff2cfe7974cea950433f76e8760dab2 | |
parent | cccc46acd7aa1a9b89f7252a074705a1f7039c61 (diff) | |
download | rneovim-d9639d3a9b512d2ef73018074fcf380d37f722a1.tar.gz rneovim-d9639d3a9b512d2ef73018074fcf380d37f722a1.tar.bz2 rneovim-d9639d3a9b512d2ef73018074fcf380d37f722a1.zip |
clipboard: add functional test
-rw-r--r-- | test/functional/clipboard/autoload/provider/clipboard.vim | 16 | ||||
-rw-r--r-- | test/functional/clipboard/clipboard_provider_spec.lua | 129 |
2 files changed, 145 insertions, 0 deletions
diff --git a/test/functional/clipboard/autoload/provider/clipboard.vim b/test/functional/clipboard/autoload/provider/clipboard.vim new file mode 100644 index 0000000000..6c05a19fc3 --- /dev/null +++ b/test/functional/clipboard/autoload/provider/clipboard.vim @@ -0,0 +1,16 @@ +let g:test_clip = { '+': [''], '*': [''], } + +let s:methods = {} + +function! s:methods.get(reg) + return g:test_clip[a:reg] +endfunction + +function! s:methods.set(lines, regtype, reg) + let g:test_clip[a:reg] = a:lines +endfunction + + +function! provider#clipboard#Call(method, args) + return call(s:methods[a:method],a:args,s:methods) +endfunction diff --git a/test/functional/clipboard/clipboard_provider_spec.lua b/test/functional/clipboard/clipboard_provider_spec.lua new file mode 100644 index 0000000000..0f11615bdc --- /dev/null +++ b/test/functional/clipboard/clipboard_provider_spec.lua @@ -0,0 +1,129 @@ +-- Test clipboard provider support + +local helpers = require('test.functional.helpers') +local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert +local execute, expect, eq, eval = helpers.execute, helpers.expect, helpers.eq, helpers.eval +local nvim, run, stop, restart = helpers.nvim, helpers.run, helpers.stop, helpers.restart + +local function reset() + clear() + execute('let &rtp = "test/functional/clipboard,".&rtp') +end + +local function basic_register_test() + insert("some words") + + feed('^dwP') + expect('some words') + + feed('veyP') + expect('some words words') + + feed('^dwywe"-p') + expect('wordssome words') + + feed('p') + expect('wordssome words words') + + feed('yyp') + expect([[ + wordssome words words + wordssome words words]]) + feed('d-') + + insert([[ + some text, and some more + random text stuff]]) + feed('ggtav+2ed$p') + expect([[ + some text, stuff and some more + random text]]) + reset() +end + +describe('clipboard usage', function() + setup(reset) + it("works", function() + basic_register_test() + + -- "* and unnamed should function as independent registers + insert("some words") + feed('^"*dwdw"*P') + expect('some ') + eq({'some '}, eval("g:test_clip['*']")) + reset() + + -- "* and "+ should be independent when the provider supports it + insert([[ + text: + first line + secound line + third line]]) + + feed('G"+dd"*dddd"+p"*pp') + expect([[ + text: + third line + secound line + first line]]) + -- linewise selection should be encoded as an extra newline + eq({'third line', ''}, eval("g:test_clip['+']")) + eq({'secound line', ''}, eval("g:test_clip['*']")) + reset() + + -- handle null bytes + insert("some\x16000text\n\x16000very binary\x16000") + feed('"*y-+"*p') + eq({'some\ntext', '\nvery binary\n',''}, eval("g:test_clip['*']")) + expect("some\x00text\n\x00very binary\x00\nsome\x00text\n\x00very binary\x00") + + -- test getreg/getregtype + eq('some\ntext\n\nvery binary\n\n', eval("getreg('*', 1)")) + eq("V", eval("getregtype('*')")) + reset() + + -- blockwise paste + insert([[ + much + text]]) + feed('"*yy') -- force load of provider + execute("let g:test_clip['*'] = [['very','block'],'b']") + feed('gg"*P') + expect([[ + very much + blocktext]]) + eq("\x165", eval("getregtype('*')")) + reset() + + -- test setreg + execute('call setreg("*", "setted\\ntext", "c")') + execute('call setreg("+", "explicitly\\nlines", "l")') + feed('"+P"*p') + expect([[ + esetted + textxplicitly + lines + ]]) + reset() + + -- the basic behavior of unnamed register should be the same + -- even when handled by clipboard provider + execute('set clipboard=unnamed') + basic_register_test() + + -- with cb=unnamed, "* and unnamed will be the same register + execute('set clipboard=unnamed') + insert("some words") + feed('^"*dwdw"*P') + expect('words') + eq({'words'}, eval("g:test_clip['*']")) + + execute("let g:test_clip['*'] = ['linewise stuff','']") + feed('p') + expect([[ + words + linewise stuff]]) + reset() + + end) +end) |