From d39ff556bb1ecbec1225c7c1cb41bab0707f58d8 Mon Sep 17 00:00:00 2001 From: pysan3 Date: Fri, 29 Mar 2024 07:14:06 +0900 Subject: [PATCH] fix(base): add tests for `self:remove_suffix` --- lua/pathlib/base.lua | 5 +++-- spec/stem_suffix_spec.lua | 28 +++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/lua/pathlib/base.lua b/lua/pathlib/base.lua index 3632ac1..f8a25e3 100644 --- a/lua/pathlib/base.lua +++ b/lua/pathlib/base.lua @@ -356,8 +356,9 @@ end ---@param suffix string # Remove this suffix from path. function Path:remove_suffix(suffix) local basename = self:basename() - if basename:sub(-suffix:len()) == suffix then - basename = basename:sub(1, -suffix:len() - 1) + local suffix_length = suffix:len() + if suffix_length > 0 and basename:sub(-suffix_length) == suffix then + basename = basename:sub(1, -suffix_length - 1) end return self:with_basename(basename) end diff --git a/spec/stem_suffix_spec.lua b/spec/stem_suffix_spec.lua index 1396bb8..0b6a764 100644 --- a/spec/stem_suffix_spec.lua +++ b/spec/stem_suffix_spec.lua @@ -159,10 +159,36 @@ describe("Stem / Suffix Test", function() } for _, test in ipairs(test_table) do local a, suffix, b = unpack(test) - it(string.format("%s - '%s' -> %s", a, suffix, b), function() + it(string.format("add: %s - '%s' -> %s", a, suffix, b), function() assert.are_equal(Posix(b), Posix(a):add_suffix(suffix)) assert.are_equal(Windows(b), Windows(a):add_suffix(suffix)) end) end end) + + describe("add_suffix", function() + local test_table = { -- from, suffix, to + { "folder/foo.txt", ".png", "folder/foo.txt.png" }, + { "folder/foo.txt", ".txt", "folder/foo.txt.txt" }, + { "foo.txt", ".bak", "foo.txt.bak" }, + { "foo.tar", ".zip", "foo.tar.zip" }, + { "foo.tar.gz", ".zip", "foo.tar.gz.zip" }, + { "foo.png", ".tar.gz", "foo.png.tar.gz" }, + { ".bashrc", ".zshrc", ".bashrc.zshrc" }, + { "", ".zshrc", ".zshrc" }, + { "foo", ".zip", "foo.zip" }, + { "foo.txt", "", "foo.txt" }, + { "my.awesome.file.png", "", "my.awesome.file.png" }, + { "my.awesome.file.", "", "my.awesome.file." }, + { "my.awesome.file.png", ".txt", "my.awesome.file.png.txt" }, + { "my.awesome.file..", ".png", "my.awesome.file...png" }, + } + for _, test in ipairs(test_table) do + local a, suffix, b = unpack(test) + it(string.format("remove: %s - '%s' -> %s", b, suffix, a), function() + assert.are_equal(Posix(a), Posix(b):remove_suffix(suffix)) + assert.are_equal(Windows(a), Windows(b):remove_suffix(suffix)) + end) + end + end) end)