@@ -415,7 +415,6 @@ describe("Path", function()
415415 end )
416416 end )
417417
418- -- TODO: tests new behavior, allows rename to self
419418 describe (" rename" , function ()
420419 local env = new_env ()
421420 after_each (env .cleanup )
@@ -497,7 +496,7 @@ describe("Path", function()
497496 -- BUG: introduced in f71ee45 (#90)
498497 it (" should consider bad symlink as existing, and throw" , function ()
499498 local before , after , non_existing = env .new_path { touch = true }, env .new_path (), env .new_path ()
500- vim .loop .fs_symlink (non_existing .filename , after .filename )
499+ assert ( vim .loop .fs_symlink (non_existing .filename , after .filename ) )
501500 assert .is .True (not not vim .loop .fs_lstat (after .filename ))
502501 assert .errors (function ()
503502 before :rename { new_name = after }
@@ -511,9 +510,38 @@ describe("Path", function()
511510 assert .is .False (before :exists ())
512511 assert .is .True (after :exists ())
513512 assert .is .True (Path .is_path (new ))
513+ assert .is .True (new :exists ())
514514 assert .are .equal (before .filename , before_filename )
515- assert .are .Not .equal (new , after )
516- assert .are .Not .equal (new , before )
515+ assert .are .equal (after .filename , new .filename )
516+ end )
517+
518+ it (" should allow changing only case of filename, regardless of fs case-sensitivity" , function ()
519+ local before = env .new_path { filename = " .__some_file" }
520+ assert .is .False (before :exists ())
521+ before :touch ()
522+ local before_filename_realpath = assert (vim .loop .fs_realpath (before .filename ))
523+ local after = env .new_path { filename = before .filename :upper () }
524+ assert .does .Not .error (function ()
525+ before :rename { new_name = after }
526+ end )
527+ assert .are .equal (
528+ before_filename_realpath :sub (1 , # before_filename_realpath - # before .filename ) .. after .filename ,
529+ assert (vim .loop .fs_realpath (after .filename ))
530+ )
531+ end )
532+
533+ it (" rename to hardlink of the same file should be a successful no-op" , function ()
534+ local before , after = env .new_path { touch = true }, env .new_path {}
535+ assert (vim .loop .fs_link (before .filename , after .filename ))
536+ assert .is .True (after :exists ())
537+ local new
538+ assert .does .Not .error (function ()
539+ new = before :rename { new_name = after }
540+ end )
541+ assert .is .True (before :exists ())
542+ assert .is .True (after :exists ())
543+ assert .is .True (Path .is_path (new ))
544+ assert .are .equal (new .filename , after .filename )
517545 end )
518546 end )
519547
0 commit comments