blob: 402ddf0bd3123147f547a7cdf518657f7db8c738 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
(* TEST
* hasunix
include unix
** bytecode
** native
*)
(* Test the Unix.rename function *)
let writefile filename contents =
let oc = open_out_bin filename in
output_string oc contents;
close_out oc
let readfile filename =
let ic = open_in_bin filename in
let sz = in_channel_length ic in
let contents = really_input_string ic sz in
close_in ic;
contents
let safe_remove filename =
try Sys.remove filename with Sys_error _ -> ()
let testrename f1 f2 contents =
try
Unix.rename f1 f2;
if readfile f2 <> contents then print_string "wrong contents!"
else if Sys.file_exists f1 then print_string "initial file still exists!"
else print_string "passed"
with Unix.Unix_error(err, _, _) ->
print_string "Unix_error exception: "; print_string (Unix.error_message err)
let testfailure f1 f2 =
try
Unix.rename f1 f2; print_string "should fail but doesn't!"
with Unix.Unix_error _ ->
print_string "fails as expected"
let _ =
let f1 = "file1.dat" and f2 = "file2.dat" in
safe_remove f1; safe_remove f2;
print_string "Rename to nonexisting file: ";
writefile f1 "abc";
testrename f1 f2 "abc";
print_newline();
print_string "Rename to existing file: ";
writefile f1 "def";
writefile f2 "xyz";
testrename f1 f2 "def";
print_newline();
print_string "Renaming a nonexisting file: ";
testfailure f1 f2;
print_newline();
print_string "Renaming to a nonexisting directory: ";
writefile f1 "abc";
testfailure f1 (Filename.concat "nosuchdir" f2);
print_newline();
safe_remove f1; safe_remove f2
|