@@ -264,6 +264,34 @@ let test_remove_dir env () =
264
264
in
265
265
()
266
266
267
+ let test_native env () =
268
+ let cwd = Sys. getcwd () ^ " \\ " in
269
+ let test x =
270
+ let native = Eio.Path. native x in
271
+ let result =
272
+ native |> Option. map @@ fun native ->
273
+ if String. starts_with ~prefix: cwd native then
274
+ " .\\ " ^ String. sub native (String. length cwd) (String. length native - String. length cwd)
275
+ else native
276
+ in
277
+ traceln " %a -> %a" Eio.Path. pp x Fmt. (Dump. option string ) result
278
+ in
279
+ test env#fs;
280
+ test (env#fs / " \\ " );
281
+ test (env#fs / " \\ etc\\ hosts" );
282
+ test (env#fs / " ." );
283
+ test (env#fs / " foo\\ bar" );
284
+ test env#cwd;
285
+ test (env#cwd / " .." );
286
+ let sub = env#cwd / " native-sub" in
287
+ Eio.Path. mkdir sub ~perm: 0o700 ;
288
+ Eio.Path. with_open_dir sub @@ fun sub ->
289
+ test sub;
290
+ test (sub / " foo.txt" );
291
+ test (sub / " ." );
292
+ test (sub / " .." );
293
+ test (sub / " \\ etc\\ passwd" )
294
+
267
295
let tests env = [
268
296
" create-write-read" , `Quick , test_create_and_read env;
269
297
" cwd-abs-path" , `Quick , test_cwd_no_access_abs env;
@@ -277,4 +305,5 @@ let tests env = [
277
305
" unlink" , `Quick , test_unlink env;
278
306
" failing-unlink" , `Quick , try_failing_unlink env;
279
307
" rmdir" , `Quick , test_remove_dir env;
280
- ]
308
+ " native" , `Quick , test_native env;
309
+ ]
0 commit comments