@@ -190,6 +190,52 @@ func Test_strftime()
190
190
call assert_fails (' call strftime("%Y", [])' , ' E745:' )
191
191
endfunc
192
192
193
+ func Test_resolve ()
194
+ if ! has (' unix' )
195
+ return
196
+ endif
197
+
198
+ " Xlink1 -> Xlink2
199
+ " Xlink2 -> Xlink3
200
+ silent ! ln -s -f Xlink2 Xlink1
201
+ silent ! ln -s -f Xlink3 Xlink2
202
+ call assert_equal (' Xlink3' , resolve (' Xlink1' ))
203
+ call assert_equal (' ./Xlink3' , resolve (' ./Xlink1' ))
204
+ call assert_equal (' Xlink3/' , resolve (' Xlink2/' ))
205
+ " FIXME: these tests result in things like "Xlink2/" instead of "Xlink3/"?!
206
+ " call assert_equal('Xlink3/', resolve('Xlink1/'))
207
+ " call assert_equal('./Xlink3/', resolve('./Xlink1/'))
208
+ " call assert_equal(getcwd() . '/Xlink3/', resolve(getcwd() . '/Xlink1/'))
209
+ call assert_equal (getcwd () . ' /Xlink3' , resolve (getcwd () . ' /Xlink1' ))
210
+
211
+ " Test resolve() with a symlink cycle.
212
+ " Xlink1 -> Xlink2
213
+ " Xlink2 -> Xlink3
214
+ " Xlink3 -> Xlink1
215
+ silent ! ln -s -f Xlink1 Xlink3
216
+ call assert_fails (' call resolve("Xlink1")' , ' E655:' )
217
+ call assert_fails (' call resolve("./Xlink1")' , ' E655:' )
218
+ call assert_fails (' call resolve("Xlink2")' , ' E655:' )
219
+ call assert_fails (' call resolve("Xlink3")' , ' E655:' )
220
+ call delete (' Xlink1' )
221
+ call delete (' Xlink2' )
222
+ call delete (' Xlink3' )
223
+
224
+ silent ! ln -s -f Xdir//Xfile Xlink
225
+ call assert_equal (' Xdir/Xfile' , resolve (' Xlink' ))
226
+ call delete (' Xlink' )
227
+
228
+ silent ! ln -s -f Xlink2/ Xlink1
229
+ call assert_equal (' Xlink2' , resolve (' Xlink1' ))
230
+ call assert_equal (' Xlink2/' , resolve (' Xlink1/' ))
231
+ call delete (' Xlink1' )
232
+
233
+ silent ! ln -s -f ./Xlink2 Xlink1
234
+ call assert_equal (' Xlink2' , resolve (' Xlink1' ))
235
+ call assert_equal (' ./Xlink2' , resolve (' ./Xlink1' ))
236
+ call delete (' Xlink1' )
237
+ endfunc
238
+
193
239
func Test_simplify ()
194
240
call assert_equal (' ' , simplify (' ' ))
195
241
call assert_equal (' /' , simplify (' /' ))
0 commit comments