Skip to content

Commit 1f134d8

Browse files
committed
test(path): add tests for Path:rename()
1 parent fded248 commit 1f134d8

File tree

1 file changed

+60
-2
lines changed

1 file changed

+60
-2
lines changed

tests/plenary/path_spec.lua

Lines changed: 60 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
local Path = require "plenary.path"
22
local path = Path.path
33

4+
-- NOTE: breaking this could break tests
45
local function new_env()
56
local env, trash = {}, {}
67

@@ -414,16 +415,22 @@ describe("Path", function()
414415
end)
415416
end)
416417

417-
-- TODO: tests for bugs, and new behavior, allows rename to self
418+
-- TODO: tests new behavior, allows rename to self
418419
describe("rename", function()
419420
local env = new_env()
420421
after_each(env.cleanup)
421422

422423
it("can rename a file", function()
423424
local before, after = env.new_path { touch = true }, env.new_path()
425+
-- Can pass another Path object
424426
before:rename { new_name = after }
425427
assert.is.False(before:exists())
426428
assert.is.True(after:exists())
429+
before, after = env.new_path { touch = true }, env.new_path()
430+
-- Also works with string
431+
before:rename { new_name = after.filename }
432+
assert.is.False(before:exists())
433+
assert.is.True(after:exists())
427434
end)
428435

429436
it("should throw on invalid args", function()
@@ -440,12 +447,19 @@ describe("Path", function()
440447
assert.is.True(before:exists())
441448
end)
442449

450+
it("should throw if old name doesn't exist", function()
451+
local before, after = env.new_path { touch = false }, env.new_path { touch = false }
452+
assert.errors(function()
453+
before:rename { new_name = after }
454+
end)
455+
end)
456+
443457
it("can move to parent dir", function()
444458
local before, after = env.new_path { filename = "random_file" }, env.new_path { filename = "../random_file" }
445459
assert.is.False(before:exists())
460+
assert.is.False(after:exists())
446461
before:touch()
447462
assert.is.True(before:exists())
448-
assert.is.False(after:exists())
449463
before:rename { new_name = after }
450464
assert.is.False(before:exists())
451465
assert.is.True(after:exists())
@@ -457,6 +471,50 @@ describe("Path", function()
457471
before:rename { new_name = after }
458472
end)
459473
end)
474+
475+
it("shouldn't throw on rename to same filename", function()
476+
local before = env.new_path { touch = true }
477+
assert.does.Not.error(function()
478+
before:rename { new_name = before }
479+
end)
480+
end)
481+
482+
-- BUG: introduced in f71ee45 (#90)
483+
it("should handle . or .. or ./ or ../ prefix", function()
484+
for _, pre in ipairs { ".", "..", "./", "../" } do
485+
local before, after =
486+
env.new_path { filename = "random_file" }, env.new_path { filename = pre .. "random_file2" }
487+
assert.is.False(before:exists())
488+
assert.is.False(after:exists())
489+
before:touch()
490+
assert.is.True(before:exists())
491+
before:rename { new_name = after }
492+
assert.is.False(before:exists())
493+
assert.is.True(after:exists())
494+
end
495+
end)
496+
497+
-- BUG: introduced in f71ee45 (#90)
498+
it("should consider bad symlink as existing, and throw", function()
499+
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)
501+
assert.is.True(not not vim.loop.fs_lstat(after.filename))
502+
assert.errors(function()
503+
before:rename { new_name = after }
504+
end)
505+
end)
506+
507+
it("should return result as new Path instance with the new filename", function()
508+
local before, after = env.new_path { touch = true }, env.new_path()
509+
local before_filename = before.filename
510+
local new = before:rename { new_name = after }
511+
assert.is.False(before:exists())
512+
assert.is.True(after:exists())
513+
assert.is.True(Path.is_path(new))
514+
assert.are.equal(before.filename, before_filename)
515+
assert.are.Not.equal(new, after)
516+
assert.are.Not.equal(new, before)
517+
end)
460518
end)
461519

462520
describe("copy", function()

0 commit comments

Comments
 (0)