@@ -160,6 +160,100 @@ func TestWriteFile(t *testing.T) {
160160 })
161161}
162162
163+ func TestJoinDir (t * testing.T ) {
164+ tests := []struct {
165+ name string
166+ dir string
167+ filename string
168+ want string
169+ wantErr bool
170+ }{
171+ {
172+ name : "regular join" ,
173+ dir : "/home/user" ,
174+ filename : "docs/report.txt" ,
175+ want : "/home/user/docs/report.txt" ,
176+ wantErr : false ,
177+ },
178+ {
179+ name : "join with dot" ,
180+ dir : "/home/user" ,
181+ filename : "." ,
182+ want : "" ,
183+ wantErr : true ,
184+ },
185+ {
186+ name : "join with absolute path" ,
187+ dir : "/home/user" ,
188+ filename : "/etc/passwd" ,
189+ want : "" ,
190+ wantErr : true ,
191+ },
192+ {
193+ name : "join with parent directory" ,
194+ dir : "/home/user" ,
195+ filename : "../user2/docs/report.txt" ,
196+ want : "" ,
197+ wantErr : true ,
198+ },
199+ {
200+ name : "empty directory" ,
201+ dir : "" ,
202+ filename : "report.txt" ,
203+ want : "" ,
204+ wantErr : true ,
205+ },
206+ {
207+ name : "empty filename" ,
208+ dir : "/home/user" ,
209+ filename : "" ,
210+ want : "" ,
211+ wantErr : true ,
212+ },
213+ {
214+ name : "directory with trailing slash" ,
215+ dir : "/home/user/" ,
216+ filename : "docs/report.txt" ,
217+ want : "/home/user/docs/report.txt" ,
218+ wantErr : false ,
219+ },
220+ {
221+ name : "filename with leading slash" ,
222+ dir : "/home/user" ,
223+ filename : "/docs/report.txt" ,
224+ want : "" ,
225+ wantErr : true ,
226+ },
227+ {
228+ name : "root directory" ,
229+ dir : "/" ,
230+ filename : "report.txt" ,
231+ want : "/report.txt" ,
232+ wantErr : false ,
233+ },
234+ {
235+ name : "dot dot slash filename" ,
236+ dir : "/home/user" ,
237+ filename : ".." ,
238+ want : "" ,
239+ wantErr : true ,
240+ },
241+ }
242+
243+ for _ , tt := range tests {
244+ t .Run (tt .name , func (t * testing.T ) {
245+ got , err := JoinDir (tt .dir , tt .filename )
246+ if (err != nil ) != tt .wantErr {
247+ t .Errorf ("JoinDir() error = %v, wantErr %v" , err , tt .wantErr )
248+ return
249+ }
250+ if got != tt .want {
251+ t .Errorf ("JoinDir() = %v, want %v" , got , tt .want )
252+ }
253+ })
254+ }
255+ }
256+
163257func TestMkdirTemp (t * testing.T ) {
164258 t .Run ("default permissions" , func (t * testing.T ) {
165259 const perm = 0755
0 commit comments