summaryrefslogtreecommitdiff
path: root/src/testdir
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-07-19 19:55:58 +0200
committerBram Moolenaar <Bram@vim.org>2017-07-19 19:55:58 +0200
commitcdb7e1b7f9e18a7b165ff09103a9994f84966123 (patch)
tree7c4cda3abde0d0b1b3d821c7fb825c99512c0dc7 /src/testdir
parent04f62f881c5743d2fdaf7324f6a715381f0d5fcf (diff)
downloadvim-git-cdb7e1b7f9e18a7b165ff09103a9994f84966123.tar.gz
patch 8.0.0737: crash when X11 selection is very bigv8.0.0737
Problem: Crash when X11 selection is very big. Solution: Use static items instead of allocating them. Add callbacks. (Ozaki Kiichi)
Diffstat (limited to 'src/testdir')
-rw-r--r--src/testdir/shared.vim7
-rw-r--r--src/testdir/test_quotestar.vim12
2 files changed, 16 insertions, 3 deletions
diff --git a/src/testdir/shared.vim b/src/testdir/shared.vim
index e28d162b8..790b07b56 100644
--- a/src/testdir/shared.vim
+++ b/src/testdir/shared.vim
@@ -111,14 +111,15 @@ endfunc
" Wait for up to a second for "expr" to become true.
" Return time slept in milliseconds. With the +reltime feature this can be
" more than the actual waiting time. Without +reltime it can also be less.
-func WaitFor(expr)
+func WaitFor(expr, ...)
+ let timeout = get(a:000, 0, 1000)
" using reltime() is more accurate, but not always available
if has('reltime')
let start = reltime()
else
let slept = 0
endif
- for i in range(100)
+ for i in range(timeout / 10)
try
if eval(a:expr)
if has('reltime')
@@ -133,7 +134,7 @@ func WaitFor(expr)
endif
sleep 10m
endfor
- return 1000
+ return timeout
endfunc
" Wait for up to a given milliseconds.
diff --git a/src/testdir/test_quotestar.vim b/src/testdir/test_quotestar.vim
index b053260be..b7d31583d 100644
--- a/src/testdir/test_quotestar.vim
+++ b/src/testdir/test_quotestar.vim
@@ -88,6 +88,18 @@ func Do_test_quotestar_for_x11()
call WaitFor('@* == "yes"')
call assert_equal('yes', @*)
+ " Handle the large selection over 262040 byte.
+ let length = 262044
+ let sample = 'a' . repeat('b', length - 2) . 'c'
+ let @* = sample
+ call WaitFor('remote_expr("' . name . '", "len(@*) >= ' . length . '", "", 1)', 3000)
+ let res = remote_expr(name, "@*", "", 2)
+ call assert_equal(length, len(res))
+ " Check length to prevent a large amount of output at assertion failure.
+ if length == len(res)
+ call assert_equal(sample, res)
+ endif
+
if has('unix') && has('gui') && !has('gui_running')
let @* = ''