Replacement for this patch: adds tests for deleting buffers with active iterator

# HG changeset patch
# User ZyX <[email protected]>
# Date 1367169637 -14400
# Branch python-extended-2
# Node ID 0dca91db547a8b20984492d342b51f08146bd503
# Parent  e29132a9a246e303b8ce749564f7328bc2329ac0
Add tests for vim.bufferslist object

diff -r e29132a9a246 -r 0dca91db547a src/testdir/test86.in
--- a/src/testdir/test86.in     Sun Apr 28 19:42:28 2013 +0400
+++ b/src/testdir/test86.in     Sun Apr 28 21:20:37 2013 +0400
@@ -460,6 +460,9 @@
 :   call RecVars(oname)
 :endfor
 :only
+:for buf in g:bufs[1:]
+:   execute 'bwipeout!' buf
+:endfor
 :"
 :" Test buffer object
 :vnew
@@ -502,6 +505,62 @@
         # Should not happen in any case
         cb.append('No exception for ' + expr)
 EOF
+:"
+:" Test vim.buffers object
+:set hidden
+:edit a
+:buffer #
+:edit b
+:buffer #
+:edit c
+:buffer #
+py << EOF
+# Check GCing iterator that was not fully exhausted
+i = iter(vim.buffers)
+cb.append('i:' + str(next(i)))
+# and also check creating more then one iterator at a time
+i2 = iter(vim.buffers)
+cb.append('i2:' + str(next(i2)))
+cb.append('i:' + str(next(i)))
+# The following should trigger GC and not cause any problems
+del i
+del i2
+i3 = iter(vim.buffers)
+cb.append('i3:' + str(next(i3)))
+del i3
+
+prevnum = 0
+for b in vim.buffers:
+    # Check buffer order
+    if prevnum >= b.number:
+        cb.append('!!! Buffer numbers not in strictly ascending order')
+    # Check indexing: vim.buffers[number].number == number
+    cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + 
repr(b))
+    prevnum = b.number
+
+cb.append(str(len(vim.buffers)))
+
+bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+
+# Test wiping out buffer with existing iterator
+i4 = iter(vim.buffers)
+cb.append('i4:' + str(next(i4)))
+vim.command('bwipeout! ' + str(bnums.pop(0)))
+try:
+    next(i4)
+except vim.error:
+    pass
+else:
+    cb.append('!!!! No vim.error')
+i4 = iter(vim.buffers)
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+cb.append('i4:' + str(next(i4)))
+try:
+    next(i4)
+except StopIteration:
+    cb.append('StopIteration')
+EOF
 :endfun
 :"
 :call Test()
diff -r e29132a9a246 -r 0dca91db547a src/testdir/test86.ok
--- a/src/testdir/test86.ok     Sun Apr 28 19:42:28 2013 +0400
+++ b/src/testdir/test86.ok     Sun Apr 28 21:20:37 2013 +0400
@@ -316,3 +316,15 @@
 Second line
 Third line
 foo
+i:<buffer test86.in>
+i2:<buffer test86.in>
+i:<buffer a>
+i3:<buffer test86.in>
+1:<buffer test86.in>=<buffer test86.in>
+6:<buffer a>=<buffer a>
+7:<buffer b>=<buffer b>
+8:<buffer c>=<buffer c>
+4
+i4:<buffer test86.in>
+i4:<buffer test86.in>
+StopIteration
diff -r e29132a9a246 -r 0dca91db547a src/testdir/test87.in
--- a/src/testdir/test87.in     Sun Apr 28 19:42:28 2013 +0400
+++ b/src/testdir/test87.in     Sun Apr 28 21:20:37 2013 +0400
@@ -446,6 +446,9 @@
 :   call RecVars(oname)
 :endfor
 :only
+:for buf in g:bufs[1:]
+:   execute 'bwipeout!' buf
+:endfor
 :"
 :" Test buffer object
 :vnew
@@ -488,6 +491,62 @@
         # Should not happen in any case
         cb.append('No exception for ' + expr)
 EOF
+:"
+:" Test vim.buffers object
+:set hidden
+:edit a
+:buffer #
+:edit b
+:buffer #
+:edit c
+:buffer #
+py3 << EOF
+# Check GCing iterator that was not fully exhausted
+i = iter(vim.buffers)
+cb.append('i:' + str(next(i)))
+# and also check creating more then one iterator at a time
+i2 = iter(vim.buffers)
+cb.append('i2:' + str(next(i2)))
+cb.append('i:' + str(next(i)))
+# The following should trigger GC and not cause any problems
+del i
+del i2
+i3 = iter(vim.buffers)
+cb.append('i3:' + str(next(i3)))
+del i3
+
+prevnum = 0
+for b in vim.buffers:
+    # Check buffer order
+    if prevnum >= b.number:
+        cb.append('!!! Buffer numbers not in strictly ascending order')
+    # Check indexing: vim.buffers[number].number == number
+    cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + 
repr(b))
+    prevnum = b.number
+
+cb.append(str(len(vim.buffers)))
+
+bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+
+# Test wiping out buffer with existing iterator
+i4 = iter(vim.buffers)
+cb.append('i4:' + str(next(i4)))
+vim.command('bwipeout! ' + str(bnums.pop(0)))
+try:
+    next(i4)
+except vim.error:
+    pass
+else:
+    cb.append('!!!! No vim.error')
+i4 = iter(vim.buffers)
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+vim.command('bwipeout! ' + str(bnums.pop(-1)))
+cb.append('i4:' + str(next(i4)))
+try:
+    next(i4)
+except StopIteration:
+    cb.append('StopIteration')
+EOF
 :endfun
 :"
 :call Test()
@@ -496,6 +555,7 @@
 :call garbagecollect(1)
 :"
 :/^start:/,$wq! test.out
+:call getchar()
 ENDTEST
 
 start:
diff -r e29132a9a246 -r 0dca91db547a src/testdir/test87.ok
--- a/src/testdir/test87.ok     Sun Apr 28 19:42:28 2013 +0400
+++ b/src/testdir/test87.ok     Sun Apr 28 21:20:37 2013 +0400
@@ -305,3 +305,15 @@
 Second line
 Third line
 foo
+i:<buffer test87.in>
+i2:<buffer test87.in>
+i:<buffer a>
+i3:<buffer test87.in>
+1:<buffer test87.in>=<buffer test87.in>
+6:<buffer a>=<buffer a>
+7:<buffer b>=<buffer b>
+8:<buffer c>=<buffer c>
+4
+i4:<buffer test87.in>
+i4:<buffer test87.in>
+StopIteration

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.


diff -cr vim.e29132a9a246/src/testdir/test86.in vim.0dca91db547a/src/testdir/test86.in
*** vim.e29132a9a246/src/testdir/test86.in	2013-04-28 21:22:07.637577962 +0400
--- vim.0dca91db547a/src/testdir/test86.in	2013-04-28 21:22:07.640577932 +0400
***************
*** 460,465 ****
--- 460,468 ----
  :   call RecVars(oname)
  :endfor
  :only
+ :for buf in g:bufs[1:]
+ :   execute 'bwipeout!' buf
+ :endfor
  :"
  :" Test buffer object
  :vnew
***************
*** 502,507 ****
--- 505,566 ----
          # Should not happen in any case
          cb.append('No exception for ' + expr)
  EOF
+ :"
+ :" Test vim.buffers object
+ :set hidden
+ :edit a
+ :buffer #
+ :edit b
+ :buffer #
+ :edit c
+ :buffer #
+ py << EOF
+ # Check GCing iterator that was not fully exhausted
+ i = iter(vim.buffers)
+ cb.append('i:' + str(next(i)))
+ # and also check creating more then one iterator at a time
+ i2 = iter(vim.buffers)
+ cb.append('i2:' + str(next(i2)))
+ cb.append('i:' + str(next(i)))
+ # The following should trigger GC and not cause any problems
+ del i
+ del i2
+ i3 = iter(vim.buffers)
+ cb.append('i3:' + str(next(i3)))
+ del i3
+ 
+ prevnum = 0
+ for b in vim.buffers:
+     # Check buffer order
+     if prevnum >= b.number:
+         cb.append('!!! Buffer numbers not in strictly ascending order')
+     # Check indexing: vim.buffers[number].number == number
+     cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
+     prevnum = b.number
+ 
+ cb.append(str(len(vim.buffers)))
+ 
+ bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+ 
+ # Test wiping out buffer with existing iterator
+ i4 = iter(vim.buffers)
+ cb.append('i4:' + str(next(i4)))
+ vim.command('bwipeout! ' + str(bnums.pop(0)))
+ try:
+     next(i4)
+ except vim.error:
+     pass
+ else:
+     cb.append('!!!! No vim.error')
+ i4 = iter(vim.buffers)
+ vim.command('bwipeout! ' + str(bnums.pop(-1)))
+ vim.command('bwipeout! ' + str(bnums.pop(-1)))
+ cb.append('i4:' + str(next(i4)))
+ try:
+     next(i4)
+ except StopIteration:
+     cb.append('StopIteration')
+ EOF
  :endfun
  :"
  :call Test()
diff -cr vim.e29132a9a246/src/testdir/test86.ok vim.0dca91db547a/src/testdir/test86.ok
*** vim.e29132a9a246/src/testdir/test86.ok	2013-04-28 21:22:07.636577972 +0400
--- vim.0dca91db547a/src/testdir/test86.ok	2013-04-28 21:22:07.639577942 +0400
***************
*** 316,318 ****
--- 316,330 ----
  Second line
  Third line
  foo
+ i:<buffer test86.in>
+ i2:<buffer test86.in>
+ i:<buffer a>
+ i3:<buffer test86.in>
+ 1:<buffer test86.in>=<buffer test86.in>
+ 6:<buffer a>=<buffer a>
+ 7:<buffer b>=<buffer b>
+ 8:<buffer c>=<buffer c>
+ 4
+ i4:<buffer test86.in>
+ i4:<buffer test86.in>
+ StopIteration
diff -cr vim.e29132a9a246/src/testdir/test87.in vim.0dca91db547a/src/testdir/test87.in
*** vim.e29132a9a246/src/testdir/test87.in	2013-04-28 21:22:07.636577972 +0400
--- vim.0dca91db547a/src/testdir/test87.in	2013-04-28 21:22:07.640577932 +0400
***************
*** 446,451 ****
--- 446,454 ----
  :   call RecVars(oname)
  :endfor
  :only
+ :for buf in g:bufs[1:]
+ :   execute 'bwipeout!' buf
+ :endfor
  :"
  :" Test buffer object
  :vnew
***************
*** 488,493 ****
--- 491,552 ----
          # Should not happen in any case
          cb.append('No exception for ' + expr)
  EOF
+ :"
+ :" Test vim.buffers object
+ :set hidden
+ :edit a
+ :buffer #
+ :edit b
+ :buffer #
+ :edit c
+ :buffer #
+ py3 << EOF
+ # Check GCing iterator that was not fully exhausted
+ i = iter(vim.buffers)
+ cb.append('i:' + str(next(i)))
+ # and also check creating more then one iterator at a time
+ i2 = iter(vim.buffers)
+ cb.append('i2:' + str(next(i2)))
+ cb.append('i:' + str(next(i)))
+ # The following should trigger GC and not cause any problems
+ del i
+ del i2
+ i3 = iter(vim.buffers)
+ cb.append('i3:' + str(next(i3)))
+ del i3
+ 
+ prevnum = 0
+ for b in vim.buffers:
+     # Check buffer order
+     if prevnum >= b.number:
+         cb.append('!!! Buffer numbers not in strictly ascending order')
+     # Check indexing: vim.buffers[number].number == number
+     cb.append(str(b.number) + ':' + repr(vim.buffers[b.number]) + '=' + repr(b))
+     prevnum = b.number
+ 
+ cb.append(str(len(vim.buffers)))
+ 
+ bnums = list(map(lambda b: b.number, vim.buffers))[1:]
+ 
+ # Test wiping out buffer with existing iterator
+ i4 = iter(vim.buffers)
+ cb.append('i4:' + str(next(i4)))
+ vim.command('bwipeout! ' + str(bnums.pop(0)))
+ try:
+     next(i4)
+ except vim.error:
+     pass
+ else:
+     cb.append('!!!! No vim.error')
+ i4 = iter(vim.buffers)
+ vim.command('bwipeout! ' + str(bnums.pop(-1)))
+ vim.command('bwipeout! ' + str(bnums.pop(-1)))
+ cb.append('i4:' + str(next(i4)))
+ try:
+     next(i4)
+ except StopIteration:
+     cb.append('StopIteration')
+ EOF
  :endfun
  :"
  :call Test()
***************
*** 496,501 ****
--- 555,561 ----
  :call garbagecollect(1)
  :"
  :/^start:/,$wq! test.out
+ :call getchar()
  ENDTEST
  
  start:
diff -cr vim.e29132a9a246/src/testdir/test87.ok vim.0dca91db547a/src/testdir/test87.ok
*** vim.e29132a9a246/src/testdir/test87.ok	2013-04-28 21:22:07.636577972 +0400
--- vim.0dca91db547a/src/testdir/test87.ok	2013-04-28 21:22:07.640577932 +0400
***************
*** 305,307 ****
--- 305,319 ----
  Second line
  Third line
  foo
+ i:<buffer test87.in>
+ i2:<buffer test87.in>
+ i:<buffer a>
+ i3:<buffer test87.in>
+ 1:<buffer test87.in>=<buffer test87.in>
+ 6:<buffer a>=<buffer a>
+ 7:<buffer b>=<buffer b>
+ 8:<buffer c>=<buffer c>
+ 4
+ i4:<buffer test87.in>
+ i4:<buffer test87.in>
+ StopIteration

Raspunde prin e-mail lui