view src/testdir/test_rename.vim @ 33525:09dac7f0916b v9.0.2011

patch 9.0.2011: INI files not detected Commit: https://github.com/vim/vim/commit/4a82bdfaa8022402b1ca0f0000c94c47a13f1014 Author: Martin Tournoij <martin@arp242.net> Date: Wed Oct 11 21:20:06 2023 +0200 patch 9.0.2011: INI files not detected Problem: INI files not detected Solution: detect uppercase .INI as dosini files It previo~1 only worked for lower-case .ini files, but upperc~1 .INI is also somewhat common on account of DOS' old 8.3 upperc~2 only filena~1. closes: #13316 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: Martin Tournoij <martin@arp242.net>
author Christian Brabandt <cb@256bit.org>
date Wed, 11 Oct 2023 21:30:07 +0200
parents de319bf98a39
children
line wrap: on
line source

" Test rename()

source shared.vim

func Test_rename_file_to_file()
  call writefile(['foo'], 'Xrename1')

  call assert_equal(0, rename('Xrename1', 'Xrename2'))

  call assert_equal('', glob('Xrename1'))
  call assert_equal(['foo'], readfile('Xrename2'))

  " When the destination file already exists, it should be overwritten.
  call writefile(['foo'], 'Xrename1')
  call writefile(['bar'], 'Xrename2', 'D')

  call assert_equal(0, rename('Xrename1', 'Xrename2'))
  call assert_equal('', glob('Xrename1'))
  call assert_equal(['foo'], readfile('Xrename2'))

  call delete('Xrename2')
endfunc

func Test_rename_file_ignore_case()
  " With 'fileignorecase', renaming file will go through a temp file
  " when the source and destination file only differ by case.
  set fileignorecase
  call writefile(['foo'], 'Xrename')

  call assert_equal(0, 'Xrename'->rename('XRENAME'))

  call assert_equal(['foo'], readfile('XRENAME'))

  set fileignorecase&
  call delete('XRENAME')
endfunc

func Test_rename_same_file()
  call writefile(['foo'], 'Xrename', 'D')

  " When the source and destination are the same file, nothing
  " should be done. The source file should not be deleted.
  call assert_equal(0, rename('Xrename', 'Xrename'))
  call assert_equal(['foo'], readfile('Xrename'))

  call assert_equal(0, rename('./Xrename', 'Xrename'))
  call assert_equal(['foo'], readfile('Xrename'))
endfunc

func Test_rename_dir_to_dir()
  call mkdir('Xrenamedir1')
  call writefile(['foo'], 'Xrenamedir1/Xrenamefile')

  call assert_equal(0, rename('Xrenamedir1', 'Xrenamedir2'))

  call assert_equal('', glob('Xrenamedir1'))
  call assert_equal(['foo'], readfile('Xrenamedir2/Xrenamefile'))

  call delete('Xrenamedir2/Xrenamefile')
  call delete('Xrenamedir2', 'd')
endfunc

func Test_rename_same_dir()
  call mkdir('Xrenamedir', 'R')
  call writefile(['foo'], 'Xrenamedir/Xrenamefile')

  call assert_equal(0, rename('Xrenamedir', 'Xrenamedir'))

  call assert_equal(['foo'], readfile('Xrenamedir/Xrenamefile'))
endfunc

func Test_rename_copy()
  " Check that when original file can't be deleted, rename()
  " still succeeds but copies the file.
  call mkdir('Xrenamedir', 'R')
  call writefile(['foo'], 'Xrenamedir/Xrenamefile')
  call setfperm('Xrenamedir', 'r-xr-xr-x')

  call assert_equal(0, rename('Xrenamedir/Xrenamefile', 'Xrenamefile'))

  if !has('win32') && !IsRoot()
    " On Windows, the source file is removed despite
    " its directory being made not writable.
    call assert_equal(['foo'], readfile('Xrenamedir/Xrenamefile'))
  endif
  call assert_equal(['foo'], readfile('Xrenamefile'))

  call setfperm('Xrenamedir', 'rwxrwxrwx')
  call delete('Xrenamefile')
endfunc

func Test_rename_fails()
  call writefile(['foo'], 'Xrenamefile', 'D')

  " Can't rename into a non-existing directory.
  call assert_notequal(0, rename('Xrenamefile', 'Xdoesnotexist/Xrenamefile'))

  " Can't rename a non-existing file.
  call assert_notequal(0, rename('Xdoesnotexist', 'Xrenamefile2'))
  call assert_equal('', glob('Xrenamefile2'))

  " When rename() fails, the destination file should not be deleted.
  call assert_notequal(0, rename('Xdoesnotexist', 'Xrenamefile'))
  call assert_equal(['foo'], readfile('Xrenamefile'))

  " Can't rename to en empty file name.
  call assert_notequal(0, rename('Xrenamefile', ''))

  call assert_fails('call rename("Xrenamefile", [])', 'E730:')
  call assert_fails('call rename(0z, "Xrenamefile")', 'E976:')
endfunc

" vim: shiftwidth=2 sts=2 expandtab