@@ -415,7 +415,6 @@ describe("Path", function()
415
415
end )
416
416
end )
417
417
418
- -- TODO: tests new behavior, allows rename to self
419
418
describe (" rename" , function ()
420
419
local env = new_env ()
421
420
after_each (env .cleanup )
@@ -497,7 +496,7 @@ describe("Path", function()
497
496
-- BUG: introduced in f71ee45 (#90)
498
497
it (" should consider bad symlink as existing, and throw" , function ()
499
498
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 ) )
501
500
assert .is .True (not not vim .loop .fs_lstat (after .filename ))
502
501
assert .errors (function ()
503
502
before :rename { new_name = after }
@@ -511,9 +510,38 @@ describe("Path", function()
511
510
assert .is .False (before :exists ())
512
511
assert .is .True (after :exists ())
513
512
assert .is .True (Path .is_path (new ))
513
+ assert .is .True (new :exists ())
514
514
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 )
517
545
end )
518
546
end )
519
547
0 commit comments