@@ -115,41 +115,59 @@ Describe "Join-Path cmdlet tests" -Tags "CI" {
115115 Extension = " tar.gz"
116116 ExpectedChildPath = " file.tar.gz"
117117 }
118+ @ {
119+ TestName = " remove extension with empty string"
120+ ChildPath = " file.txt"
121+ Extension = " "
122+ ExpectedChildPath = " file"
123+ }
124+ @ {
125+ TestName = " preserve dots in base name when removing extension with empty string"
126+ ChildPath = " file...txt"
127+ Extension = " "
128+ ExpectedChildPath = " file.."
129+ }
130+ @ {
131+ TestName = " replace only the last extension for files with multiple dots"
132+ ChildPath = " file.backup.txt"
133+ Extension = " .log"
134+ ExpectedChildPath = " file.backup.log"
135+ }
136+ @ {
137+ TestName = " preserve dots in base name when changing extension"
138+ ChildPath = " file...txt"
139+ Extension = " .md"
140+ ExpectedChildPath = " file...md"
141+ }
142+ @ {
143+ TestName = " add extension to directory-like path"
144+ ChildPath = " subfolder"
145+ Extension = " .log"
146+ ExpectedChildPath = " subfolder.log"
147+ }
118148 ) {
119149 param ($TestName , $ChildPath , $Extension , $ExpectedChildPath )
120150 $result = Join-Path - Path " folder" - ChildPath $ChildPath - Extension $Extension
121151 $result | Should - BeExactly " folder${SepChar}${ExpectedChildPath} "
122152 }
123- It " should remove extension when empty string is specified" {
124- $result = Join-Path - Path " folder" - ChildPath " file.txt" - Extension " "
125- $result | Should - BeExactly " folder${SepChar} file"
126- }
127- It " should preserve dots in base name when removing extension with empty string" {
128- $result = Join-Path - Path " folder" - ChildPath " file...txt" - Extension " "
129- $result | Should - BeExactly " folder${SepChar} file.."
153+ It " should handle extension parameter with multiple child path segments: <TestName>" - TestCases @ (
154+ @ {
155+ TestName = " change extension when joining multiple child path segments"
156+ ChildPaths = @ (" subfolder" , " file.txt" )
157+ Extension = " .log"
158+ ExpectedPath = " folder${SepChar} subfolder${SepChar} file.log"
159+ }
160+ ) {
161+ param ($TestName , $ChildPaths , $Extension , $ExpectedPath )
162+ $result = Join-Path - Path " folder" - ChildPath $ChildPaths - Extension $Extension
163+ $result | Should - BeExactly $ExpectedPath
130164 }
131165 It " should change extension for multiple paths" {
132166 $result = Join-Path - Path " folder1" , " folder2" - ChildPath " file.txt" - Extension " .log"
133167 $result.Count | Should - Be 2
134168 $result [0 ] | Should - BeExactly " folder1${SepChar} file.log"
135169 $result [1 ] | Should - BeExactly " folder2${SepChar} file.log"
136170 }
137- It " should replace only the last extension for files with multiple dots" {
138- $result = Join-Path - Path " folder" - ChildPath " file.backup.txt" - Extension " .log"
139- $result | Should - BeExactly " folder${SepChar} file.backup.log"
140- }
141- It " should preserve dots in base name when changing extension" {
142- $result = Join-Path - Path " folder" - ChildPath " file...txt" - Extension " .md"
143- $result | Should - BeExactly " folder${SepChar} file...md"
144- }
145- It " should add extension to directory-like path" {
146- $result = Join-Path - Path " folder" - ChildPath " subfolder" - Extension " .log"
147- $result | Should - BeExactly " folder${SepChar} subfolder.log"
148- }
149- It " should change extension when joining multiple child path segments" {
150- $result = Join-Path - Path " folder" - ChildPath " subfolder" " file.txt" - Extension " .log"
151- $result | Should - BeExactly " folder${SepChar} subfolder${SepChar} file.log"
152- }
153171 It " should resolve path when -Extension changes to existing file" {
154172 New-Item - Path TestDrive:\testfile.log - ItemType File - Force | Out-Null
155173 $result = Join-Path - Path TestDrive: - ChildPath " testfile.txt" - Extension " .log" - Resolve
0 commit comments