|
Packit |
9ff65e |
(******************************************************************************)
|
|
Packit |
9ff65e |
(* ocaml-fileutils: files and filenames common operations *)
|
|
Packit |
9ff65e |
(* *)
|
|
Packit |
9ff65e |
(* Copyright (C) 2003-2014, Sylvain Le Gall *)
|
|
Packit |
9ff65e |
(* *)
|
|
Packit |
9ff65e |
(* This library is free software; you can redistribute it and/or modify it *)
|
|
Packit |
9ff65e |
(* under the terms of the GNU Lesser General Public License as published by *)
|
|
Packit |
9ff65e |
(* the Free Software Foundation; either version 2.1 of the License, or (at *)
|
|
Packit |
9ff65e |
(* your option) any later version, with the OCaml static compilation *)
|
|
Packit |
9ff65e |
(* exception. *)
|
|
Packit |
9ff65e |
(* *)
|
|
Packit |
9ff65e |
(* This library is distributed in the hope that it will be useful, but *)
|
|
Packit |
9ff65e |
(* WITHOUT ANY WARRANTY; without even the implied warranty of *)
|
|
Packit |
9ff65e |
(* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the file *)
|
|
Packit |
9ff65e |
(* COPYING for more details. *)
|
|
Packit |
9ff65e |
(* *)
|
|
Packit |
9ff65e |
(* You should have received a copy of the GNU Lesser General Public License *)
|
|
Packit |
9ff65e |
(* along with this library; if not, write to the Free Software Foundation, *)
|
|
Packit |
9ff65e |
(* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *)
|
|
Packit |
9ff65e |
(******************************************************************************)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
open OUnit2
|
|
Packit |
9ff65e |
open FilePath
|
|
Packit |
9ff65e |
open FileUtil
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
exception ExpectedException
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let test_umask = 0o0022
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let umask_mutex = OUnitShared.Mutex.create OUnitShared.ScopeProcess
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let bracket_umask umask =
|
|
Packit |
9ff65e |
bracket
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
OUnitShared.Mutex.lock test_ctxt.OUnitTest.shared umask_mutex;
|
|
Packit |
9ff65e |
Unix.umask umask)
|
|
Packit |
9ff65e |
(fun umask test_ctxt ->
|
|
Packit |
9ff65e |
let _i: int = Unix.umask umask in
|
|
Packit |
9ff65e |
OUnitShared.Mutex.unlock test_ctxt.OUnitTest.shared umask_mutex)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let with_bracket_umask test_ctxt umask f =
|
|
Packit |
9ff65e |
OUnitBracket.with_bracket test_ctxt (bracket_umask umask) f
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
module SetFilename = Set.Make (struct
|
|
Packit |
9ff65e |
type t = FilePath.DefaultPath.filename
|
|
Packit |
9ff65e |
let compare = FilePath.DefaultPath.compare
|
|
Packit |
9ff65e |
end)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let assert_equal_string ~msg =
|
|
Packit |
9ff65e |
assert_equal ~printer:(fun x -> x) ~msg:msg
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
module DiffSetFilename =
|
|
Packit |
9ff65e |
OUnitDiff.SetMake
|
|
Packit |
9ff65e |
(struct
|
|
Packit |
9ff65e |
type t = string
|
|
Packit |
9ff65e |
let compare = FilePath.DefaultPath.compare
|
|
Packit |
9ff65e |
let pp_printer = Format.pp_print_string
|
|
Packit |
9ff65e |
let pp_print_sep = OUnitDiff.pp_comma_separator
|
|
Packit |
9ff65e |
end)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(** Check that two set of file are equal *)
|
|
Packit |
9ff65e |
let assert_equal_set_filename ?msg st_ref st =
|
|
Packit |
9ff65e |
DiffSetFilename.assert_equal ?msg
|
|
Packit |
9ff65e |
(DiffSetFilename.of_list (SetFilename.elements st_ref))
|
|
Packit |
9ff65e |
(DiffSetFilename.of_list (SetFilename.elements st))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let assert_perm fn exp =
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~msg:(Printf.sprintf "permission of '%s'" fn)
|
|
Packit |
9ff65e |
~printer:(Printf.sprintf "0o%04o")
|
|
Packit |
9ff65e |
exp (Unix.lstat fn).Unix.st_perm
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let assert_error msg e f =
|
|
Packit |
9ff65e |
assert_raises
|
|
Packit |
9ff65e |
~msg
|
|
Packit |
9ff65e |
ExpectedException
|
|
Packit |
9ff65e |
(fun () ->
|
|
Packit |
9ff65e |
f (fun _ err -> if e err then raise ExpectedException))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(** Ensure that we are dealing with generated file (and not random
|
|
Packit |
9ff65e |
file on the filesystem).
|
|
Packit |
9ff65e |
*)
|
|
Packit |
9ff65e |
module SafeFS =
|
|
Packit |
9ff65e |
struct
|
|
Packit |
9ff65e |
module S =
|
|
Packit |
9ff65e |
Set.Make
|
|
Packit |
9ff65e |
(struct
|
|
Packit |
9ff65e |
type t = int * int
|
|
Packit |
9ff65e |
let compare = Pervasives.compare
|
|
Packit |
9ff65e |
end)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
type t =
|
|
Packit |
9ff65e |
{
|
|
Packit |
9ff65e |
mutable files: SetFilename.t;
|
|
Packit |
9ff65e |
mutable dirs: SetFilename.t;
|
|
Packit |
9ff65e |
mutable markers: S.t;
|
|
Packit |
9ff65e |
}
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let default () =
|
|
Packit |
9ff65e |
{
|
|
Packit |
9ff65e |
files = SetFilename.empty;
|
|
Packit |
9ff65e |
dirs = SetFilename.empty;
|
|
Packit |
9ff65e |
markers = S.empty;
|
|
Packit |
9ff65e |
}
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let marker fn =
|
|
Packit |
9ff65e |
let st = Unix.lstat fn in
|
|
Packit |
9ff65e |
(st.Unix.st_dev, st.Unix.st_ino)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let mark t fn =
|
|
Packit |
9ff65e |
t.markers <- S.add (marker fn) t.markers
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let touch t fn =
|
|
Packit |
9ff65e |
if Sys.file_exists fn then begin
|
|
Packit |
9ff65e |
failwith (Printf.sprintf "File %S already exists." fn)
|
|
Packit |
9ff65e |
end else begin
|
|
Packit |
9ff65e |
let chn = open_out fn in
|
|
Packit |
9ff65e |
close_out chn;
|
|
Packit |
9ff65e |
mark t fn;
|
|
Packit |
9ff65e |
t.files <- SetFilename.add fn t.files
|
|
Packit |
9ff65e |
end
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let mkdir t dn =
|
|
Packit |
9ff65e |
if Sys.file_exists dn then begin
|
|
Packit |
9ff65e |
failwith (Printf.sprintf "Directory %S already exists." dn)
|
|
Packit |
9ff65e |
end else begin
|
|
Packit |
9ff65e |
Unix.mkdir dn 0o755;
|
|
Packit |
9ff65e |
mark t dn;
|
|
Packit |
9ff65e |
t.dirs <- SetFilename.add dn t.dirs
|
|
Packit |
9ff65e |
end
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let auto_ask_user t =
|
|
Packit |
9ff65e |
Ask (fun fn -> S.mem (marker fn) t.markers)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let create dn dirs files =
|
|
Packit |
9ff65e |
let t = default () in
|
|
Packit |
9ff65e |
mark t dn;
|
|
Packit |
9ff65e |
t.dirs <- SetFilename.add dn t.dirs;
|
|
Packit |
9ff65e |
List.iter (fun fn -> mkdir t (Filename.concat dn fn)) dirs;
|
|
Packit |
9ff65e |
List.iter (fun fn -> touch t (Filename.concat dn fn)) files;
|
|
Packit |
9ff65e |
t
|
|
Packit |
9ff65e |
end
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
module Test =
|
|
Packit |
9ff65e |
functor (OsPath: PATH_STRING_SPECIFICATION) ->
|
|
Packit |
9ff65e |
struct
|
|
Packit |
9ff65e |
let os_string = ref ""
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let test_label s value = (!os_string)^" : "^s^" \""^value^"\""
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let test_label_list s lst = test_label s ("["^(String.concat ";" lst)^"]")
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let test_label_pair s (a, b) = test_label s (a^"\" \""^b)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let test_name s = (s)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let reduce (exp, res) =
|
|
Packit |
9ff65e |
(test_name "reduce") >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal_string
|
|
Packit |
9ff65e |
~msg:(test_label "reduce" exp)
|
|
Packit |
9ff65e |
res (OsPath.reduce ~no_symlink:true exp))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let make_path (exp, res) =
|
|
Packit |
9ff65e |
(test_name "make_path") >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal_string ~msg:(test_label_list "make_path" exp)
|
|
Packit |
9ff65e |
res (OsPath.string_of_path exp))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let make_absolute (base, rela, res) =
|
|
Packit |
9ff65e |
(test_name "make_absolute") >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal_string ~msg:(test_label_pair "make_absolute" (base, rela))
|
|
Packit |
9ff65e |
res (OsPath.reduce ~no_symlink:true (OsPath.make_absolute base rela)))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let make_relative (base, abs, res) =
|
|
Packit |
9ff65e |
(test_name "make_relative") >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal_string ~msg:(test_label_pair "make_relative" (base, abs))
|
|
Packit |
9ff65e |
res (OsPath.make_relative base abs))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let valid exp =
|
|
Packit |
9ff65e |
(test_name "valid") >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_bool (test_label "is_valid" exp)
|
|
Packit |
9ff65e |
(OsPath.is_valid exp))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let identity exp =
|
|
Packit |
9ff65e |
(test_name "identity") >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal_string ~msg:(test_label "identity" exp)
|
|
Packit |
9ff65e |
exp (OsPath.identity exp))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let extension (filename, basename, extension) =
|
|
Packit |
9ff65e |
(test_name "extension") >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal_string ~msg:(test_label "chop_extension" filename)
|
|
Packit |
9ff65e |
(OsPath.chop_extension filename) basename;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
assert_equal_string ~msg:(test_label "get_extension" filename)
|
|
Packit |
9ff65e |
(OsPath.string_of_extension (OsPath.get_extension filename))
|
|
Packit |
9ff65e |
extension;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
assert_bool (test_label "check_extension" filename)
|
|
Packit |
9ff65e |
(OsPath.check_extension filename
|
|
Packit |
9ff65e |
(OsPath.extension_of_string extension));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
assert_bool (test_label "check_extension (false) " filename)
|
|
Packit |
9ff65e |
(not (OsPath.check_extension filename
|
|
Packit |
9ff65e |
(OsPath.extension_of_string "dummy"))))
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let is_relative (filename, res) =
|
|
Packit |
9ff65e |
(test_name "is_relative") >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
res
|
|
Packit |
9ff65e |
(OsPath.is_relative filename))
|
|
Packit |
9ff65e |
end
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
module TestUnix = Test(UnixPath)
|
|
Packit |
9ff65e |
module TestMacOS = Test(MacOSPath)
|
|
Packit |
9ff65e |
module TestWin32 = Test(Win32Path)
|
|
Packit |
9ff65e |
let () =
|
|
Packit |
9ff65e |
TestUnix.os_string := "Unix";
|
|
Packit |
9ff65e |
TestMacOS.os_string := "MacOS";
|
|
Packit |
9ff65e |
TestWin32.os_string := "Win32"
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(** Static test *)
|
|
Packit |
9ff65e |
let _ =
|
|
Packit |
9ff65e |
assert(UnixPath.get_extension "test.txt" = "txt");
|
|
Packit |
9ff65e |
assert(MacOSPath.get_extension "test.txt" = "txt");
|
|
Packit |
9ff65e |
assert(Win32Path.get_extension "test.txt" = "txt")
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(*********************)
|
|
Packit |
9ff65e |
(* Unix FilePath test*)
|
|
Packit |
9ff65e |
(*********************)
|
|
Packit |
9ff65e |
let test_unix =
|
|
Packit |
9ff65e |
let test_path =
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("/");
|
|
Packit |
9ff65e |
("/a/b");
|
|
Packit |
9ff65e |
("/a/b/c/");
|
|
Packit |
9ff65e |
("/a/../b/c");
|
|
Packit |
9ff65e |
("/a/../b/../c");
|
|
Packit |
9ff65e |
("a/b/c/");
|
|
Packit |
9ff65e |
("../a/b");
|
|
Packit |
9ff65e |
("");
|
|
Packit |
9ff65e |
(".");
|
|
Packit |
9ff65e |
("./");
|
|
Packit |
9ff65e |
("..");
|
|
Packit |
9ff65e |
("../")
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
"Unix FilePath" >::: (
|
|
Packit |
9ff65e |
(* Is_valid *)
|
|
Packit |
9ff65e |
(
|
|
Packit |
9ff65e |
List.map TestUnix.valid test_path
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Identity *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestUnix.identity test_path
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Reduce path *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestUnix.reduce
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("/a/b/c", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c/", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c/d/..", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c/.", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/d/../b/c", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/./b/c", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c/d/./..", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c/d/../.", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/d/./../c", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/d/.././c", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/../d/../b/c", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/./././b/./c", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/../a/./b/../c/../b/./c", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/../..", "/");
|
|
Packit |
9ff65e |
("./d/../a/b/c", "a/b/c");
|
|
Packit |
9ff65e |
("a/b/c/../../../", "");
|
|
Packit |
9ff65e |
("", "");
|
|
Packit |
9ff65e |
(".", "");
|
|
Packit |
9ff65e |
("./", "");
|
|
Packit |
9ff65e |
("..", "..");
|
|
Packit |
9ff65e |
("../", "..");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Create path *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestUnix.make_path
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
(["/a"; "b"; "/c/d"], "/a:b:/c/d");
|
|
Packit |
9ff65e |
([], "");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Convert to absolute *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestUnix.make_absolute
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("/a/b/c", ".", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c", "./d", "/a/b/c/d");
|
|
Packit |
9ff65e |
("/a/b/c", "../d", "/a/b/d");
|
|
Packit |
9ff65e |
("/a/b/c", "", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c", ".", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c", "./", "/a/b/c");
|
|
Packit |
9ff65e |
("/a/b/c", "..", "/a/b");
|
|
Packit |
9ff65e |
("/a/b/c", "../", "/a/b")
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Convert to relative *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestUnix.make_relative
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("/a/b/c", "/a/b/c", "");
|
|
Packit |
9ff65e |
("/a/b/c", "/a/b/d", "../d")
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Check extension *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestUnix.extension
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("/a/b/c.d", "/a/b/c", "d");
|
|
Packit |
9ff65e |
("/a/b.c/d.e", "/a/b.c/d", "e");
|
|
Packit |
9ff65e |
("a.", "a", "");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(**********************)
|
|
Packit |
9ff65e |
(* Win32 FilePath test*)
|
|
Packit |
9ff65e |
(**********************)
|
|
Packit |
9ff65e |
let test_win32 =
|
|
Packit |
9ff65e |
let test_path =
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("c:\\");
|
|
Packit |
9ff65e |
("c:\\a\\b");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c\\");
|
|
Packit |
9ff65e |
("c:\\a\\..\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\..\\b\\..\\c");
|
|
Packit |
9ff65e |
("a\\b\\c\\");
|
|
Packit |
9ff65e |
("..\\a\\b");
|
|
Packit |
9ff65e |
("");
|
|
Packit |
9ff65e |
(".");
|
|
Packit |
9ff65e |
(".\\");
|
|
Packit |
9ff65e |
("..");
|
|
Packit |
9ff65e |
("..\\")
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
"Win32 FilePath" >:::
|
|
Packit |
9ff65e |
(
|
|
Packit |
9ff65e |
(* Is_valid *)
|
|
Packit |
9ff65e |
(List.map TestWin32.valid test_path)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Identity *)
|
|
Packit |
9ff65e |
@ (List.map TestWin32.identity test_path)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Reduce path *)
|
|
Packit |
9ff65e |
@ (List.map TestWin32.reduce
|
|
Packit |
9ff65e |
[("c:\\a\\b\\c", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c\\", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c\\d\\..", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c\\.", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\d\\..\\b\\c", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\.\\b\\c", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c\\d\\.\\..", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c\\d\\..\\.", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\d\\.\\..\\c", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\d\\..\\.\\c", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\..\\d\\..\\b\\c", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\.\\.\\.\\b\\.\\c", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\..\\a\\.\\b\\..\\c\\..\\b\\.\\c", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("a\\..\\b", "b");
|
|
Packit |
9ff65e |
("", "");
|
|
Packit |
9ff65e |
(".", "");
|
|
Packit |
9ff65e |
(".\\", "");
|
|
Packit |
9ff65e |
("..", "..");
|
|
Packit |
9ff65e |
("..\\", "..")])
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Create path *)
|
|
Packit |
9ff65e |
@ (List.map TestWin32.make_path
|
|
Packit |
9ff65e |
[(["c:/a"; "b"; "c:/c\\d"], "c:\\a;b;c:\\c\\d");
|
|
Packit |
9ff65e |
([], "")])
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Convert to absolute *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestWin32.make_absolute
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", ".", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", ".\\d", "c:\\a\\b\\c\\d");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", "..\\d", "c:\\a\\b\\d");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", "", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", ".", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", ".\\", "c:\\a\\b\\c");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", "..", "c:\\a\\b");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", "..\\", "c:\\a\\b");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Convert to relative *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestWin32.make_relative
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", "c:/a\\b\\c", "");
|
|
Packit |
9ff65e |
("c:\\a\\b\\c", "c:/a\\b\\d", "..\\d")
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Check extension *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestWin32.extension
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("c:\\a\\b\\c.d", "c:\\a\\b\\c", "d");
|
|
Packit |
9ff65e |
("c:\\a\\b.c\\d.e", "c:\\a\\b.c\\d", "e");
|
|
Packit |
9ff65e |
("a.", "a", "");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestWin32.is_relative
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"c:/a", false;
|
|
Packit |
9ff65e |
"c:\\a", false;
|
|
Packit |
9ff65e |
"./a", true;
|
|
Packit |
9ff65e |
".\\a", true;
|
|
Packit |
9ff65e |
"../a", true;
|
|
Packit |
9ff65e |
"..\\a", true;
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(**********************)
|
|
Packit |
9ff65e |
(* MacOS FilePath test*)
|
|
Packit |
9ff65e |
(**********************)
|
|
Packit |
9ff65e |
let test_macos =
|
|
Packit |
9ff65e |
let test_path =
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("a:");
|
|
Packit |
9ff65e |
("a:::");
|
|
Packit |
9ff65e |
(":a:b:c");
|
|
Packit |
9ff65e |
("");
|
|
Packit |
9ff65e |
(":");
|
|
Packit |
9ff65e |
("::");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
"MacOS FilePath" >:::
|
|
Packit |
9ff65e |
(
|
|
Packit |
9ff65e |
(* Is_valid *)
|
|
Packit |
9ff65e |
(
|
|
Packit |
9ff65e |
List.map TestMacOS.valid test_path
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Identity *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestMacOS.identity test_path
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Reduce path *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestMacOS.reduce
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("root:a:b:c", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:b:c:", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:b:c:d::", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:d::b:c", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:b:c:d::", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:b:d::c", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:b::d::b:c", "root:a:b:c");
|
|
Packit |
9ff65e |
("", "");
|
|
Packit |
9ff65e |
(":", "");
|
|
Packit |
9ff65e |
("::", "::");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Create path *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestMacOS.make_path
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
([":a"; "b"; ":c:d"], ":a;b;:c:d");
|
|
Packit |
9ff65e |
([], "");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Convert to absolute *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestMacOS.make_absolute
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("root:a:b:c", ":", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:b:c", ":d", "root:a:b:c:d");
|
|
Packit |
9ff65e |
("root:a:b:c", "::d", "root:a:b:d");
|
|
Packit |
9ff65e |
("root:a:b:c", "", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:b:c", ":", "root:a:b:c");
|
|
Packit |
9ff65e |
("root:a:b:c", "::", "root:a:b");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Convert to relative *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestMacOS.make_relative
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("root:a:b:c", "root:a:b:c", "");
|
|
Packit |
9ff65e |
("root:a:b:c", "root:a:b:d", "::d")
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Check extension *)
|
|
Packit |
9ff65e |
@ (
|
|
Packit |
9ff65e |
List.map TestMacOS.extension
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
("root:a:b:c.d", "root:a:b:c", "d");
|
|
Packit |
9ff65e |
("root:a:b.c:d.e", "root:a:b.c:d", "e");
|
|
Packit |
9ff65e |
("a.", "a", "");
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(*****************)
|
|
Packit |
9ff65e |
(* FileUtil test *)
|
|
Packit |
9ff65e |
(*****************)
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
(* Test to be performed *)
|
|
Packit |
9ff65e |
let test_fileutil =
|
|
Packit |
9ff65e |
"FileUtil" >:::
|
|
Packit |
9ff65e |
["Test" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file_test =
|
|
Packit |
9ff65e |
let fn, chn = bracket_tmpfile test_ctxt in
|
|
Packit |
9ff65e |
output_string chn "foo";
|
|
Packit |
9ff65e |
close_out chn;
|
|
Packit |
9ff65e |
fn
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let non_fatal_test file (stest, expr, res) =
|
|
Packit |
9ff65e |
non_fatal test_ctxt
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_bool
|
|
Packit |
9ff65e |
("Test "^stest^" on "^file)
|
|
Packit |
9ff65e |
(res = (test expr file)))
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
non_fatal_test file_test ("Size_not_null", Size_not_null, true);
|
|
Packit |
9ff65e |
List.iter
|
|
Packit |
9ff65e |
(non_fatal_test tmp_dir)
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"True", True, true;
|
|
Packit |
9ff65e |
"False", False, false;
|
|
Packit |
9ff65e |
"Is_dir", Is_dir, true;
|
|
Packit |
9ff65e |
"Not Is_dir", (Not Is_dir), false;
|
|
Packit |
9ff65e |
"Is_dev_block", Is_dev_block, false;
|
|
Packit |
9ff65e |
"Is_dev_char", Is_dev_char, false;
|
|
Packit |
9ff65e |
"Exists", Exists, true;
|
|
Packit |
9ff65e |
"Is_file", Is_file, false;
|
|
Packit |
9ff65e |
"Is_set_group_ID", Is_set_group_ID, false;
|
|
Packit |
9ff65e |
"Has_sticky_bit", Has_sticky_bit, false;
|
|
Packit |
9ff65e |
"Is_link", Is_link, false;
|
|
Packit |
9ff65e |
"Is_pipe", Is_pipe, false;
|
|
Packit |
9ff65e |
"Is_readable", Is_readable, true;
|
|
Packit |
9ff65e |
"Is_writeable", Is_writeable, true;
|
|
Packit |
9ff65e |
"Is_socket", Is_socket, false;
|
|
Packit |
9ff65e |
"Has_set_user_ID", Has_set_user_ID, false;
|
|
Packit |
9ff65e |
"Is_exec", Is_exec, true;
|
|
Packit |
9ff65e |
"Match", Match(tmp_dir), true;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"And of test_file * test_file", And(True, False), false;
|
|
Packit |
9ff65e |
"Or of test_file * test_file", Or(True, False), true;
|
|
Packit |
9ff65e |
"Is_newer_than", (Is_newer_than tmp_dir), false;
|
|
Packit |
9ff65e |
"Is_older_than", (Is_older_than tmp_dir), false;
|
|
Packit |
9ff65e |
];
|
|
Packit |
9ff65e |
if Sys.os_type <> "Win32" then begin
|
|
Packit |
9ff65e |
List.iter
|
|
Packit |
9ff65e |
(non_fatal_test tmp_dir)
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"Is_owned_by_user_ID", Is_owned_by_user_ID, true;
|
|
Packit |
9ff65e |
"Is_owned_by_group_ID", Is_owned_by_group_ID, true;
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
end);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Test with FileUtilStr.Match" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir ~prefix:"fileutil-foobar" test_ctxt in
|
|
Packit |
9ff65e |
assert_bool
|
|
Packit |
9ff65e |
"FileUtilStr.Match = true"
|
|
Packit |
9ff65e |
(FileUtilStr.test (Match ".*fileutil-") tmp_dir);
|
|
Packit |
9ff65e |
assert_bool
|
|
Packit |
9ff65e |
"FileUtilStr.Match = false"
|
|
Packit |
9ff65e |
(not (FileUtilStr.test (Match "fileutil") tmp_dir)));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Mode" >:::
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"to_string" >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
List.iter
|
|
Packit |
9ff65e |
(fun (str, mode) ->
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:(fun s -> s)
|
|
Packit |
9ff65e |
str
|
|
Packit |
9ff65e |
(FileUtilMode.to_string mode))
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"u+r", [`User (`Add `Read)];
|
|
Packit |
9ff65e |
"u+rw", [`User (`Add (`List [`Read; `Write]))];
|
|
Packit |
9ff65e |
"+rw,u=rw,g=rwx",
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
`None (`Add (`List [`Read; `Write]));
|
|
Packit |
9ff65e |
`User (`Set (`List [`Read; `Write]));
|
|
Packit |
9ff65e |
`Group (`Set (`List [`Read; `Write; `Exec]));
|
|
Packit |
9ff65e |
];
|
|
Packit |
9ff65e |
]);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"apply" >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
List.iter
|
|
Packit |
9ff65e |
(fun (is_dir, umask, i, m, e) ->
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~msg:(Printf.sprintf "0o%04o + %s" i (FileUtilMode.to_string m))
|
|
Packit |
9ff65e |
~printer:(Printf.sprintf "0o%04o")
|
|
Packit |
9ff65e |
e (FileUtilMode.apply ~is_dir ~umask i m))
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Group (`Add `Read)], 0o0640;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Group (`Add (`List [`Read; `Write]))], 0o0660;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Other (`Add (`List [`Read; `Write]))], 0o0606;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`User (`Set (`List [`Read; `Write; `Exec]))], 0o0700;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`User (`Set (`List [`Read; `Write; `Exec]))], 0o0700;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`None (`Add (`List [`Read; `Write; `Exec]))], 0o0755;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Group (`Add `ExecX)], 0o0600;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0700,
|
|
Packit |
9ff65e |
[`Group (`Add `ExecX)], 0o0710;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
true, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Group (`Add `ExecX)], 0o0610;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Group (`Set `User)], 0o0660;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Group (`Add `StickyO)], 0o0600;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Group (`Add `Sticky)], 0o2600;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Other (`Add `StickyO)], 0o1600;
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
false, 0o022, 0o0600,
|
|
Packit |
9ff65e |
[`Other (`Add `Sticky)], 0o0600;
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
)
|
|
Packit |
9ff65e |
];
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Touch in not existing subdir" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
try
|
|
Packit |
9ff65e |
let file = make_filename [tmp_dir; "doesntexist"; "essai0"] in
|
|
Packit |
9ff65e |
touch file;
|
|
Packit |
9ff65e |
assert_failure
|
|
Packit |
9ff65e |
"Touch should have failed, since intermediate directory is missing"
|
|
Packit |
9ff65e |
with _ ->
|
|
Packit |
9ff65e |
());
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Touch in existing dir v1" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file = make_filename [tmp_dir; "essai0"] in
|
|
Packit |
9ff65e |
touch file;
|
|
Packit |
9ff65e |
assert_bool "touch" (test Exists file);
|
|
Packit |
9ff65e |
);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Touch in existing dir with no create" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file = make_filename [tmp_dir; "essai2"] in
|
|
Packit |
9ff65e |
touch ~create:false file;
|
|
Packit |
9ff65e |
assert_bool "touch" (not (test Exists file)));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Touch in existing dir v2" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file = make_filename [tmp_dir; "essai1"] in
|
|
Packit |
9ff65e |
touch file;
|
|
Packit |
9ff65e |
assert_bool "touch" (test Exists file));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Touch precedence" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let time = Unix.gettimeofday () in
|
|
Packit |
9ff65e |
let fn1 = make_filename [tmp_dir; "essai1"] in
|
|
Packit |
9ff65e |
let fn2 = make_filename [tmp_dir; "essai0"] in
|
|
Packit |
9ff65e |
touch ~time:(Touch_timestamp time) fn1;
|
|
Packit |
9ff65e |
touch ~time:(Touch_timestamp (time +. 1.0)) fn2;
|
|
Packit |
9ff65e |
assert_bool "touch precedence 1"
|
|
Packit |
9ff65e |
(test (Is_newer_than fn1) fn2);
|
|
Packit |
9ff65e |
assert_bool
|
|
Packit |
9ff65e |
"touch precedence 2"
|
|
Packit |
9ff65e |
(test (Is_older_than fn2) fn1));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Mkdir simple v1" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir = make_filename [tmp_dir; "essai2"] in
|
|
Packit |
9ff65e |
mkdir dir;
|
|
Packit |
9ff65e |
assert_bool "mkdir" (test Is_dir dir));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Mkdir simple && mode 700" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir = make_filename [tmp_dir; "essai3"] in
|
|
Packit |
9ff65e |
mkdir ~mode:(`Octal 0o0700) dir;
|
|
Packit |
9ff65e |
assert_bool "mkdir" (test Is_dir dir));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Mkdir recurse v2" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir = make_filename [tmp_dir; "essai4"; "essai5"] in
|
|
Packit |
9ff65e |
assert_error
|
|
Packit |
9ff65e |
"missing component path"
|
|
Packit |
9ff65e |
(function
|
|
Packit |
9ff65e |
| `MissingComponentPath _ -> true
|
|
Packit |
9ff65e |
| _ -> false)
|
|
Packit |
9ff65e |
(fun error -> mkdir ~error dir));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Mkdir && already exist v3" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir = make_filename [tmp_dir; "essai0"] in
|
|
Packit |
9ff65e |
touch dir;
|
|
Packit |
9ff65e |
assert_error
|
|
Packit |
9ff65e |
"dirname already used"
|
|
Packit |
9ff65e |
(function
|
|
Packit |
9ff65e |
| `DirnameAlreadyUsed _ -> true
|
|
Packit |
9ff65e |
| _ -> false)
|
|
Packit |
9ff65e |
(fun error -> mkdir ~error dir));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Mkdir recurse v4" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir1 = (make_filename [tmp_dir; "essai4"]) in
|
|
Packit |
9ff65e |
let dir2 = (make_filename [dir1; "essai5"]) in
|
|
Packit |
9ff65e |
mkdir ~parent:true dir2;
|
|
Packit |
9ff65e |
assert_bool "mkdir" (test Is_dir dir2);
|
|
Packit |
9ff65e |
assert_perm dir1 0o0755;
|
|
Packit |
9ff65e |
assert_perm dir2 0o0755;
|
|
Packit |
9ff65e |
rm ~recurse:true [dir1];
|
|
Packit |
9ff65e |
assert_bool "no dir" (not (test Exists dir2));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
mkdir
|
|
Packit |
9ff65e |
~parent:true
|
|
Packit |
9ff65e |
~mode:(`Symbolic [`Group (`Add `Write); `Other (`Set (`List []))])
|
|
Packit |
9ff65e |
dir2;
|
|
Packit |
9ff65e |
assert_bool "mkdir" (test Is_dir dir2);
|
|
Packit |
9ff65e |
assert_perm dir1 0o0755;
|
|
Packit |
9ff65e |
assert_perm dir2 0o0770;
|
|
Packit |
9ff65e |
rm ~recurse:true [dir1];
|
|
Packit |
9ff65e |
assert_bool "no dir" (not (test Exists dir2));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
mkdir
|
|
Packit |
9ff65e |
~parent:true
|
|
Packit |
9ff65e |
~mode:(`Octal 0o0770)
|
|
Packit |
9ff65e |
dir2;
|
|
Packit |
9ff65e |
assert_bool "mkdir" (test Is_dir dir2);
|
|
Packit |
9ff65e |
assert_perm dir1 0o0755;
|
|
Packit |
9ff65e |
assert_perm dir2 0o0770;
|
|
Packit |
9ff65e |
rm ~recurse:true [dir1];
|
|
Packit |
9ff65e |
assert_bool "no dir" (not (test Exists dir2)));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Find v0" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
with_bracket_chdir test_ctxt tmp_dir
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
let find_acc _ =
|
|
Packit |
9ff65e |
find True "." (fun acc x -> reduce x :: acc) []
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let lst_dot =
|
|
Packit |
9ff65e |
find_acc "."
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let lst_empty =
|
|
Packit |
9ff65e |
find_acc ""
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
assert_bool "find '.' is empty" (lst_dot <> []);
|
|
Packit |
9ff65e |
assert_bool "find '' is empty" (lst_empty <> []);
|
|
Packit |
9ff65e |
assert_bool "find '.' <> find ''" (lst_dot = lst_empty)));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Find v1" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let sfs =
|
|
Packit |
9ff65e |
SafeFS.create tmp_dir
|
|
Packit |
9ff65e |
["essai_dir"]
|
|
Packit |
9ff65e |
["essai_file"]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let set =
|
|
Packit |
9ff65e |
find True tmp_dir (fun set fln -> SetFilename.add fln set)
|
|
Packit |
9ff65e |
SetFilename.empty
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
assert_equal_set_filename
|
|
Packit |
9ff65e |
(SetFilename.union sfs.SafeFS.dirs sfs.SafeFS.files)
|
|
Packit |
9ff65e |
set);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Find v2" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let sfs =
|
|
Packit |
9ff65e |
SafeFS.create tmp_dir
|
|
Packit |
9ff65e |
["essai_dir"]
|
|
Packit |
9ff65e |
["essai_file"]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let set =
|
|
Packit |
9ff65e |
find Is_dir tmp_dir (fun set fln -> SetFilename.add fln set)
|
|
Packit |
9ff65e |
SetFilename.empty
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
assert_equal_set_filename sfs.SafeFS.dirs set);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Find v3" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let sfs =
|
|
Packit |
9ff65e |
SafeFS.create tmp_dir
|
|
Packit |
9ff65e |
["essai_dir"]
|
|
Packit |
9ff65e |
["essai_file"]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let set =
|
|
Packit |
9ff65e |
find Is_file tmp_dir (fun set fln -> SetFilename.add fln set)
|
|
Packit |
9ff65e |
SetFilename.empty
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
assert_equal_set_filename sfs.SafeFS.files set);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Find v4" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let sfs =
|
|
Packit |
9ff65e |
SafeFS.create tmp_dir
|
|
Packit |
9ff65e |
["essai_dir"]
|
|
Packit |
9ff65e |
["essai_file"]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let set =
|
|
Packit |
9ff65e |
find Is_file (Filename.concat tmp_dir "")
|
|
Packit |
9ff65e |
(fun set fln -> SetFilename.add fln set)
|
|
Packit |
9ff65e |
SetFilename.empty
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
assert_equal_set_filename sfs.SafeFS.files set);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Unix specific" >:::
|
|
Packit |
9ff65e |
(
|
|
Packit |
9ff65e |
let mk_symlink test_ctxt =
|
|
Packit |
9ff65e |
let () =
|
|
Packit |
9ff65e |
skip_if (Sys.os_type <> "Unix") "Symlink only works on Unix."
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let symlink = make_filename [tmp_dir; "recurse"] in
|
|
Packit |
9ff65e |
let sfs =
|
|
Packit |
9ff65e |
SafeFS.create tmp_dir
|
|
Packit |
9ff65e |
["essai_dir"]
|
|
Packit |
9ff65e |
["essai_file"]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
Unix.symlink current_dir symlink;
|
|
Packit |
9ff65e |
SafeFS.mark sfs symlink;
|
|
Packit |
9ff65e |
tmp_dir, symlink, sfs
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let mk_filelink test_ctxt =
|
|
Packit |
9ff65e |
let () =
|
|
Packit |
9ff65e |
skip_if (Sys.os_type <> "Unix") "Symlink only works on Unix."
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let symlink = make_filename [tmp_dir; "recurse"] in
|
|
Packit |
9ff65e |
let source = make_filename [tmp_dir; "essai_file"] in
|
|
Packit |
9ff65e |
let sfs =
|
|
Packit |
9ff65e |
SafeFS.create tmp_dir
|
|
Packit |
9ff65e |
[]
|
|
Packit |
9ff65e |
["essai_file"]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
Unix.symlink source symlink;
|
|
Packit |
9ff65e |
SafeFS.mark sfs symlink;
|
|
Packit |
9ff65e |
tmp_dir, symlink, sfs
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let mk_deadlink test_ctxt =
|
|
Packit |
9ff65e |
let () =
|
|
Packit |
9ff65e |
skip_if (Sys.os_type <> "Unix") "Symlink only works on Unix."
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir = make_filename [tmp_dir; "dir1"] in
|
|
Packit |
9ff65e |
let symlink = make_filename [dir; "dead"] in
|
|
Packit |
9ff65e |
mkdir dir;
|
|
Packit |
9ff65e |
Unix.symlink "non_existing.txt" symlink;
|
|
Packit |
9ff65e |
tmp_dir, symlink, dir
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"Unix symlink" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let _, symlink, _ = mk_symlink test_ctxt in
|
|
Packit |
9ff65e |
assert_bool "symlink is not a link" (test Is_link symlink);
|
|
Packit |
9ff65e |
assert_bool "symlink is not a dir" (test Is_dir symlink));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Find v4 (link follow)" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir, _, _ = mk_symlink test_ctxt in
|
|
Packit |
9ff65e |
try
|
|
Packit |
9ff65e |
find ~follow:Follow Is_dir tmp_dir (fun () _ -> ()) ();
|
|
Packit |
9ff65e |
assert_failure
|
|
Packit |
9ff65e |
"find follow should have failed, since there is \
|
|
Packit |
9ff65e |
recursive symlink"
|
|
Packit |
9ff65e |
with RecursiveLink _ ->
|
|
Packit |
9ff65e |
());
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Find v5 (no link follow)" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir, fn, sfs = mk_symlink test_ctxt in
|
|
Packit |
9ff65e |
let set =
|
|
Packit |
9ff65e |
find ~follow:Skip Is_dir tmp_dir
|
|
Packit |
9ff65e |
(fun set fln -> SetFilename.add fln set)
|
|
Packit |
9ff65e |
SetFilename.empty
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
assert_bool "find symlink skip fails"
|
|
Packit |
9ff65e |
(SetFilename.equal set
|
|
Packit |
9ff65e |
(SetFilename.add fn sfs.SafeFS.dirs)));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Unix delete symlink" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let _, symlink, _ = mk_symlink test_ctxt in
|
|
Packit |
9ff65e |
rm [symlink];
|
|
Packit |
9ff65e |
try
|
|
Packit |
9ff65e |
let _st: Unix.stats = Unix.lstat symlink in
|
|
Packit |
9ff65e |
assert_failure "rm symlink failed"
|
|
Packit |
9ff65e |
with Unix.Unix_error(Unix.ENOENT, _, _) ->
|
|
Packit |
9ff65e |
());
|
|
Packit |
9ff65e |
"Dead link + stat" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let _, symlink, _ = mk_deadlink test_ctxt in
|
|
Packit |
9ff65e |
let st = stat symlink in
|
|
Packit |
9ff65e |
assert_bool "is marked as a link" st.is_link;
|
|
Packit |
9ff65e |
assert_equal ~msg:"is a link" Symlink st.kind;
|
|
Packit |
9ff65e |
assert_raises
|
|
Packit |
9ff65e |
~msg:"cannot dereference"
|
|
Packit |
9ff65e |
(FileDoesntExist symlink)
|
|
Packit |
9ff65e |
(fun () -> stat ~dereference:true symlink));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Dead link + test" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let _, symlink, _ = mk_deadlink test_ctxt in
|
|
Packit |
9ff65e |
assert_bool "dead link exists"
|
|
Packit |
9ff65e |
(test Is_link symlink));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Dead symlink + rm" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let _, _, dir = mk_deadlink test_ctxt in
|
|
Packit |
9ff65e |
rm ~recurse:true [dir]);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Dead symlink + cp -r" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir, _, dir1 = mk_deadlink test_ctxt in
|
|
Packit |
9ff65e |
let dir2 = make_filename [tmp_dir; "dir2"] in
|
|
Packit |
9ff65e |
cp ~recurse:true [dir1] dir2;
|
|
Packit |
9ff65e |
try
|
|
Packit |
9ff65e |
(* test Is_link *)
|
|
Packit |
9ff65e |
let _st: Unix.stats =
|
|
Packit |
9ff65e |
Unix.lstat (make_filename [dir2; "dead"])
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
()
|
|
Packit |
9ff65e |
with Unix.Unix_error(Unix.ENOENT, _, _) ->
|
|
Packit |
9ff65e |
assert_failure "dead link not copied.");
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Dead symlink + cp -r v2" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir, symlink, _ = mk_deadlink test_ctxt in
|
|
Packit |
9ff65e |
let dir2 = make_filename [tmp_dir; "dir2"] in
|
|
Packit |
9ff65e |
cp ~recurse:true [symlink] dir2;
|
|
Packit |
9ff65e |
try
|
|
Packit |
9ff65e |
(* test Is_link *)
|
|
Packit |
9ff65e |
let _st: Unix.stats = Unix.lstat dir2 in
|
|
Packit |
9ff65e |
()
|
|
Packit |
9ff65e |
with Unix.Unix_error(Unix.ENOENT, _, _) ->
|
|
Packit |
9ff65e |
assert_failure "dead link not copied.");
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Dead symlink + cp" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir, symlink, _ = mk_deadlink test_ctxt in
|
|
Packit |
9ff65e |
let dir2 = make_filename [tmp_dir; "dir2"] in
|
|
Packit |
9ff65e |
try
|
|
Packit |
9ff65e |
cp [symlink] dir2;
|
|
Packit |
9ff65e |
assert_failure "dead link should not copied."
|
|
Packit |
9ff65e |
with FileDoesntExist _ ->
|
|
Packit |
9ff65e |
());
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Live filelink + cp" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir, symlink, _ = mk_filelink test_ctxt in
|
|
Packit |
9ff65e |
let dest = make_filename [tmp_dir; "dest"] in
|
|
Packit |
9ff65e |
cp [symlink] dest;
|
|
Packit |
9ff65e |
assert_bool "regular" (not(test Is_link dest)));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Readlink" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir, fn, _ = mk_symlink test_ctxt in
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:(Printf.sprintf "%S")
|
|
Packit |
9ff65e |
tmp_dir (readlink fn));
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Chmod" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let fn, chn = bracket_tmpfile test_ctxt in
|
|
Packit |
9ff65e |
let () = close_out chn in
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let iter_chmod =
|
|
Packit |
9ff65e |
List.iter
|
|
Packit |
9ff65e |
(fun (ini, mode, exp) ->
|
|
Packit |
9ff65e |
Unix.chmod fn ini;
|
|
Packit |
9ff65e |
chmod mode [fn];
|
|
Packit |
9ff65e |
assert_perm fn exp)
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let () =
|
|
Packit |
9ff65e |
if Sys.os_type = "Unix" then begin
|
|
Packit |
9ff65e |
iter_chmod
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`User (`Add `Exec)], 0o0100;
|
|
Packit |
9ff65e |
0o0100, `Symbolic [`User (`Remove `Exec)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`Group (`Add `Exec)], 0o0010;
|
|
Packit |
9ff65e |
0o0010, `Symbolic [`Group (`Remove `Exec)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`Other (`Add `Exec)], 0o0001;
|
|
Packit |
9ff65e |
0o0001, `Symbolic [`Other (`Remove `Exec)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`All (`Add `Exec)], 0o0111;
|
|
Packit |
9ff65e |
0o0111, `Symbolic [`All (`Remove `Exec)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`User (`Add `ExecX)], 0o0000;
|
|
Packit |
9ff65e |
0o0010, `Symbolic [`User (`Add `ExecX)], 0o0110;
|
|
Packit |
9ff65e |
0o0001, `Symbolic [`User (`Add `ExecX)], 0o0101;
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
end;
|
|
Packit |
9ff65e |
iter_chmod
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
0o0200, `Symbolic [`User (`Add `Write)], 0o0200;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`User (`Add `Write)], 0o0200;
|
|
Packit |
9ff65e |
0o0200, `Symbolic [`User (`Remove `Write)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`Group (`Add `Write)], 0o0020;
|
|
Packit |
9ff65e |
0o0020, `Symbolic [`Group (`Remove `Write)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`Other (`Add `Write)], 0o0002;
|
|
Packit |
9ff65e |
0o0002, `Symbolic [`Other (`Remove `Write)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`All (`Add `Write)], 0o0222;
|
|
Packit |
9ff65e |
0o0222, `Symbolic [`All (`Remove `Write)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`User (`Add `Read)], 0o0400;
|
|
Packit |
9ff65e |
0o0400, `Symbolic [`User (`Remove `Read)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`Group (`Add `Read)], 0o0040;
|
|
Packit |
9ff65e |
0o0040, `Symbolic [`Group (`Remove `Read)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`Other (`Add `Read)], 0o0004;
|
|
Packit |
9ff65e |
0o0004, `Symbolic [`Other (`Remove `Read)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Symbolic [`All (`Add `Read)], 0o0444;
|
|
Packit |
9ff65e |
0o0444, `Symbolic [`All (`Remove `Read)], 0o0000;
|
|
Packit |
9ff65e |
0o0000, `Octal 0o644, 0o0644;
|
|
Packit |
9ff65e |
0o0100,
|
|
Packit |
9ff65e |
(* u=r,g=u,u+w *)
|
|
Packit |
9ff65e |
`Symbolic [`User (`Set `Read);
|
|
Packit |
9ff65e |
`Group (`Set `User);
|
|
Packit |
9ff65e |
`User (`Add `Write)],
|
|
Packit |
9ff65e |
0o640;
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let fn = make_filename [tmp_dir; "essai6"] in
|
|
Packit |
9ff65e |
touch fn;
|
|
Packit |
9ff65e |
Unix.chmod fn 0o0000;
|
|
Packit |
9ff65e |
chmod ~recurse:true (`Symbolic [`User (`Add `Read)]) [tmp_dir];
|
|
Packit |
9ff65e |
assert_perm fn 0o0400);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Cp v1" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file = make_filename [tmp_dir; "essai6"] in
|
|
Packit |
9ff65e |
let fn0 = make_filename [tmp_dir; "essai0"] in
|
|
Packit |
9ff65e |
touch fn0;
|
|
Packit |
9ff65e |
cp [fn0] file;
|
|
Packit |
9ff65e |
assert_bool "cp" (test Exists file));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Cp v2" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file = make_filename [tmp_dir; "essai4"] in
|
|
Packit |
9ff65e |
let fn0 = make_filename [tmp_dir; "essai0"] in
|
|
Packit |
9ff65e |
touch fn0;
|
|
Packit |
9ff65e |
cp [fn0] file;
|
|
Packit |
9ff65e |
assert_bool "cp" (test Exists file));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Cp with space" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dirspace = make_filename [tmp_dir; "essai 7"] in
|
|
Packit |
9ff65e |
let file = make_filename [dirspace; "essai0"] in
|
|
Packit |
9ff65e |
let fn0 = make_filename [tmp_dir; "essai0"] in
|
|
Packit |
9ff65e |
touch fn0;
|
|
Packit |
9ff65e |
mkdir dirspace;
|
|
Packit |
9ff65e |
cp [fn0] file;
|
|
Packit |
9ff65e |
assert_bool "cp" (test Exists file));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Cp dir to dir" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir1 = make_filename [tmp_dir; "dir1"] in
|
|
Packit |
9ff65e |
let dir2 = make_filename [tmp_dir; "dir2"] in
|
|
Packit |
9ff65e |
mkdir dir1;
|
|
Packit |
9ff65e |
touch (make_filename [dir1; "file.txt"]);
|
|
Packit |
9ff65e |
cp ~recurse:true [dir1] dir2;
|
|
Packit |
9ff65e |
assert_bool "cp" (test Exists (make_filename [dir2; "file.txt"]));
|
|
Packit |
9ff65e |
cp ~recurse:true [dir1] dir2;
|
|
Packit |
9ff65e |
assert_bool "cp dir" (test Is_dir (make_filename [dir2; "dir1"])));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Cp ACL" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let fn1 = make_filename [tmp_dir; "foo1.txt"] in
|
|
Packit |
9ff65e |
let fn2 = make_filename [tmp_dir; "foo2.txt"] in
|
|
Packit |
9ff65e |
let fn3 = make_filename [tmp_dir; "foo3.txt"] in
|
|
Packit |
9ff65e |
touch fn1;
|
|
Packit |
9ff65e |
Unix.chmod fn1 0o444;
|
|
Packit |
9ff65e |
assert_perm fn1 0o444;
|
|
Packit |
9ff65e |
cp [fn1] fn2;
|
|
Packit |
9ff65e |
assert_perm fn2 0o444;
|
|
Packit |
9ff65e |
if Sys.os_type = "Unix" then begin
|
|
Packit |
9ff65e |
Unix.chmod fn1 0o555;
|
|
Packit |
9ff65e |
assert_perm fn1 0o555;
|
|
Packit |
9ff65e |
cp [fn1] fn3;
|
|
Packit |
9ff65e |
assert_perm fn3 0o555
|
|
Packit |
9ff65e |
end);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Cp preserve" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir1 = make_filename [tmp_dir; "dir1"] in
|
|
Packit |
9ff65e |
let fn1 = make_filename [dir1; "fn1.txt"] in
|
|
Packit |
9ff65e |
let dir2 = make_filename [tmp_dir; "dir2"] in
|
|
Packit |
9ff65e |
let fn2 = make_filename [dir2; "fn1.txt"] in
|
|
Packit |
9ff65e |
let assert_equal_time ?msg exp got =
|
|
Packit |
9ff65e |
assert_equal ?msg ~printer:string_of_float exp got
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
mkdir dir1;
|
|
Packit |
9ff65e |
touch ~time:(Touch_timestamp 1.0) ~mtime:true fn1;
|
|
Packit |
9ff65e |
touch ~time:(Touch_timestamp 2.0) ~atime:true fn1;
|
|
Packit |
9ff65e |
touch ~time:(Touch_timestamp 3.0) ~mtime:true dir1;
|
|
Packit |
9ff65e |
touch ~time:(Touch_timestamp 4.0) ~atime:true dir1;
|
|
Packit |
9ff65e |
assert_equal_time ~msg:"fn1 mtime" 1.0 (stat fn1).modification_time;
|
|
Packit |
9ff65e |
assert_equal_time ~msg:"fn1 atime" 2.0 (stat fn1).access_time;
|
|
Packit |
9ff65e |
assert_equal_time ~msg:"dir1 mtime" 3.0 (stat dir1).modification_time;
|
|
Packit |
9ff65e |
assert_equal_time ~msg:"dir1 atime" 4.0 (stat dir1).access_time;
|
|
Packit |
9ff65e |
cp ~recurse:true ~preserve:true [dir1] dir2;
|
|
Packit |
9ff65e |
assert_equal_time ~msg:"fn2 mtime" 1.0 (stat fn2).modification_time;
|
|
Packit |
9ff65e |
assert_equal_time ~msg:"fn2 atime" 2.0 (stat fn2).access_time;
|
|
Packit |
9ff65e |
assert_equal_time ~msg:"dir2 mtime" 3.0 (stat dir2).modification_time;
|
|
Packit |
9ff65e |
assert_equal_time ~msg:"dir2 atime" 4.0 (stat dir2).access_time);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Cp POSIX" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir1 = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let tmp_dir2 = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
touch (concat tmp_dir1 "foo.txt");
|
|
Packit |
9ff65e |
with_bracket_chdir test_ctxt tmp_dir1
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
cp ~recurse:true [current_dir] tmp_dir2);
|
|
Packit |
9ff65e |
assert_bool "file" (test Is_file (concat tmp_dir2 "foo.txt")));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Mv simple" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file0 = make_filename [tmp_dir; "essai0"] in
|
|
Packit |
9ff65e |
let file1 = make_filename [tmp_dir; "essai10"] in
|
|
Packit |
9ff65e |
let file2 = make_filename [tmp_dir; "essai9"] in
|
|
Packit |
9ff65e |
touch file0;
|
|
Packit |
9ff65e |
cp [file0] file1;
|
|
Packit |
9ff65e |
mv file1 file2;
|
|
Packit |
9ff65e |
cp [file0] file1;
|
|
Packit |
9ff65e |
mv file1 file2;
|
|
Packit |
9ff65e |
assert_bool "mv" (test Exists file2));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Mv otherfs" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file_test = make_filename [tmp_dir; "essai12"] in
|
|
Packit |
9ff65e |
let sfs = SafeFS.create tmp_dir [] ["essai12"] in
|
|
Packit |
9ff65e |
let file =
|
|
Packit |
9ff65e |
let fn = Filename.temp_file ~temp_dir:(pwd ()) "otherfs" ".txt" in
|
|
Packit |
9ff65e |
Sys.remove fn;
|
|
Packit |
9ff65e |
bracket ignore
|
|
Packit |
9ff65e |
(fun () _ ->
|
|
Packit |
9ff65e |
rm ~force:(SafeFS.auto_ask_user sfs) [fn])
|
|
Packit |
9ff65e |
test_ctxt;
|
|
Packit |
9ff65e |
fn
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
mv file_test file;
|
|
Packit |
9ff65e |
SafeFS.mark sfs file;
|
|
Packit |
9ff65e |
assert_bool "mv" (test Exists file));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Rm simple" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let file = (make_filename [tmp_dir; "essai0"]) in
|
|
Packit |
9ff65e |
let sfs = SafeFS.create tmp_dir [] ["essai0"] in
|
|
Packit |
9ff65e |
rm ~force:(SafeFS.auto_ask_user sfs) [file];
|
|
Packit |
9ff65e |
assert_bool "rm" (test (Not Exists) file));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Rm no recurse" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir = (make_filename [tmp_dir; "essai4"]) in
|
|
Packit |
9ff65e |
let sfs = SafeFS.create tmp_dir ["essai4"] ["essai0"] in
|
|
Packit |
9ff65e |
mkdir dir;
|
|
Packit |
9ff65e |
assert_error
|
|
Packit |
9ff65e |
"rm should have failed trying to delete a directory"
|
|
Packit |
9ff65e |
(function
|
|
Packit |
9ff65e |
| `NoRecurse _ -> true
|
|
Packit |
9ff65e |
| _ -> false)
|
|
Packit |
9ff65e |
(fun error -> rm ~error ~force:(SafeFS.auto_ask_user sfs) [dir]));
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Rm ask duplicate" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
let tmp_dir = bracket_tmpdir test_ctxt in
|
|
Packit |
9ff65e |
let dir = make_filename [tmp_dir; "ask-duplicate"] in
|
|
Packit |
9ff65e |
let sfs =
|
|
Packit |
9ff65e |
SafeFS.create tmp_dir
|
|
Packit |
9ff65e |
["ask-duplicate"]
|
|
Packit |
9ff65e |
[make_filename ["ask-duplicate"; "toto.txt"]]
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let set_asked = ref SetFilename.empty in
|
|
Packit |
9ff65e |
let set_duplicated = ref SetFilename.empty in
|
|
Packit |
9ff65e |
let ask_register fn =
|
|
Packit |
9ff65e |
if SetFilename.mem fn !set_asked then
|
|
Packit |
9ff65e |
set_duplicated := SetFilename.add fn !set_duplicated;
|
|
Packit |
9ff65e |
set_asked := SetFilename.add fn !set_asked;
|
|
Packit |
9ff65e |
match SafeFS.auto_ask_user sfs with
|
|
Packit |
9ff65e |
| Ask f -> f fn
|
|
Packit |
9ff65e |
| _ -> false
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
rm ~force:(Ask ask_register) ~recurse:true [dir];
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~msg:"duplicate file asked when removing"
|
|
Packit |
9ff65e |
SetFilename.empty
|
|
Packit |
9ff65e |
!set_duplicated);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Which ocamlc" >::
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
try
|
|
Packit |
9ff65e |
let _str: string = which "ocamlc" in
|
|
Packit |
9ff65e |
()
|
|
Packit |
9ff65e |
with Not_found ->
|
|
Packit |
9ff65e |
assert_failure "Cannot find ocamlc");
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Umask" >::
|
|
Packit |
9ff65e |
(fun test_ctxt ->
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:(Printf.sprintf "0o%04o")
|
|
Packit |
9ff65e |
test_umask
|
|
Packit |
9ff65e |
(umask (`Octal (fun i -> i)));
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:FileUtilMode.to_string
|
|
Packit |
9ff65e |
[`User (`Set (`List [`Read; `Write; `Exec]));
|
|
Packit |
9ff65e |
`Group (`Set (`List [`Read; `Exec]));
|
|
Packit |
9ff65e |
`Other (`Set (`List [`Read; `Exec]))]
|
|
Packit |
9ff65e |
(umask (`Symbolic (fun s -> s)));
|
|
Packit |
9ff65e |
List.iter
|
|
Packit |
9ff65e |
(fun (i, e) ->
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:(Printf.sprintf "0o%04o")
|
|
Packit |
9ff65e |
e (umask_apply i))
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
0o777, 0o755;
|
|
Packit |
9ff65e |
0o1777, 0o1755
|
|
Packit |
9ff65e |
];
|
|
Packit |
9ff65e |
with_bracket_umask test_ctxt test_umask
|
|
Packit |
9ff65e |
(fun _ _ ->
|
|
Packit |
9ff65e |
umask ~mode:(`Octal 0o0222) (`Octal ignore);
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:(Printf.sprintf "0o%04o")
|
|
Packit |
9ff65e |
0o0222 (umask (`Octal (fun i -> i))));
|
|
Packit |
9ff65e |
with_bracket_umask test_ctxt test_umask
|
|
Packit |
9ff65e |
(fun _ _ ->
|
|
Packit |
9ff65e |
assert_raises
|
|
Packit |
9ff65e |
(UmaskError("Cannot set sticky bit in umask 0o1222"))
|
|
Packit |
9ff65e |
(fun () ->
|
|
Packit |
9ff65e |
umask ~mode:(`Octal 0o1222) (`Octal ignore)));
|
|
Packit |
9ff65e |
List.iter
|
|
Packit |
9ff65e |
(fun (s, e) ->
|
|
Packit |
9ff65e |
with_bracket_umask test_ctxt test_umask
|
|
Packit |
9ff65e |
(fun msk _ ->
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~msg:(Printf.sprintf
|
|
Packit |
9ff65e |
"0o%04o + %s -> 0o%04o"
|
|
Packit |
9ff65e |
msk (FileUtilMode.to_string s) e)
|
|
Packit |
9ff65e |
~printer:(Printf.sprintf "0o%04o")
|
|
Packit |
9ff65e |
e (umask ~mode:(`Symbolic s) (`Octal (fun i -> i)))))
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
[`None (`Add `Read)], 0o0022;
|
|
Packit |
9ff65e |
[`None (`Add (`List [`Read; `Write]))], 0o0000;
|
|
Packit |
9ff65e |
[`All (`Remove `Read)], 0o0466;
|
|
Packit |
9ff65e |
[`Group (`Set (`List [`Read; `Write; `Exec]))], 0o0002;
|
|
Packit |
9ff65e |
];
|
|
Packit |
9ff65e |
()
|
|
Packit |
9ff65e |
);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"Size" >:::
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"string_of_size" >:::
|
|
Packit |
9ff65e |
(
|
|
Packit |
9ff65e |
let i64_unit =
|
|
Packit |
9ff65e |
1025L
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let i64_unit2 =
|
|
Packit |
9ff65e |
Int64.succ (Int64.mul 1024L 1024L)
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let test_of_vector fuzzy (str, sz) =
|
|
Packit |
9ff65e |
test_case
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:(fun s -> s)
|
|
Packit |
9ff65e |
str
|
|
Packit |
9ff65e |
(string_of_size ~fuzzy:fuzzy sz))
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"exact" >:::
|
|
Packit |
9ff65e |
(List.map
|
|
Packit |
9ff65e |
(test_of_vector false)
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"0 TB", TB 0L;
|
|
Packit |
9ff65e |
"0 GB", GB 0L;
|
|
Packit |
9ff65e |
"0 MB", MB 0L;
|
|
Packit |
9ff65e |
"0 KB", KB 0L;
|
|
Packit |
9ff65e |
"0 B", B 0L;
|
|
Packit |
9ff65e |
"1 TB", TB 1L;
|
|
Packit |
9ff65e |
"1 GB", GB 1L;
|
|
Packit |
9ff65e |
"1 MB", MB 1L;
|
|
Packit |
9ff65e |
"1 KB", KB 1L;
|
|
Packit |
9ff65e |
"1 B", B 1L;
|
|
Packit |
9ff65e |
"1025 TB", TB i64_unit;
|
|
Packit |
9ff65e |
"1 TB 1 GB", GB i64_unit;
|
|
Packit |
9ff65e |
"1 GB 1 MB", MB i64_unit;
|
|
Packit |
9ff65e |
"1 MB 1 KB", KB i64_unit;
|
|
Packit |
9ff65e |
"1 KB 1 B", B i64_unit;
|
|
Packit |
9ff65e |
"1024 TB 1 GB", GB i64_unit2;
|
|
Packit |
9ff65e |
"1 TB 1 MB", MB i64_unit2;
|
|
Packit |
9ff65e |
"1 GB 1 KB", KB i64_unit2;
|
|
Packit |
9ff65e |
"1 MB 1 B", B i64_unit2;
|
|
Packit |
9ff65e |
"97 MB 728 KB 349 B", B 102457693L;
|
|
Packit |
9ff65e |
]);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"fuzzy" >:::
|
|
Packit |
9ff65e |
(List.map
|
|
Packit |
9ff65e |
(test_of_vector true)
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"0.00 TB", TB 0L;
|
|
Packit |
9ff65e |
"0.00 GB", GB 0L;
|
|
Packit |
9ff65e |
"0.00 MB", MB 0L;
|
|
Packit |
9ff65e |
"0.00 KB", KB 0L;
|
|
Packit |
9ff65e |
"0.00 B", B 0L;
|
|
Packit |
9ff65e |
"1.00 TB", TB 1L;
|
|
Packit |
9ff65e |
"1.00 GB", GB 1L;
|
|
Packit |
9ff65e |
"1.00 MB", MB 1L;
|
|
Packit |
9ff65e |
"1.00 KB", KB 1L;
|
|
Packit |
9ff65e |
"1.00 B", B 1L;
|
|
Packit |
9ff65e |
"1025.00 TB", TB i64_unit;
|
|
Packit |
9ff65e |
"1.00 TB", GB i64_unit;
|
|
Packit |
9ff65e |
"1.00 GB", MB i64_unit;
|
|
Packit |
9ff65e |
"1.00 MB", KB i64_unit;
|
|
Packit |
9ff65e |
"1.00 KB", B i64_unit;
|
|
Packit |
9ff65e |
"1024.00 TB", GB i64_unit2;
|
|
Packit |
9ff65e |
"1.00 TB", MB i64_unit2;
|
|
Packit |
9ff65e |
"1.00 GB", KB i64_unit2;
|
|
Packit |
9ff65e |
"1.00 MB", B i64_unit2;
|
|
Packit |
9ff65e |
"97.71 MB", B 102457693L;
|
|
Packit |
9ff65e |
]);
|
|
Packit |
9ff65e |
]);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"size_add" >:::
|
|
Packit |
9ff65e |
(let test_of_vector (str, szs) =
|
|
Packit |
9ff65e |
test_case
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:(fun s -> s)
|
|
Packit |
9ff65e |
str
|
|
Packit |
9ff65e |
(string_of_size
|
|
Packit |
9ff65e |
(List.fold_left size_add (B 0L) szs)))
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
List.map
|
|
Packit |
9ff65e |
test_of_vector
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"1 TB 10 MB 12 KB", [TB 1L; KB 12L; MB 10L];
|
|
Packit |
9ff65e |
"2 MB 976 KB", [KB 2000L; MB 1L]
|
|
Packit |
9ff65e |
]);
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
"size_compare" >:::
|
|
Packit |
9ff65e |
(
|
|
Packit |
9ff65e |
let test_of_vector (sz1, sz2, res) =
|
|
Packit |
9ff65e |
test_case
|
|
Packit |
9ff65e |
(fun _ ->
|
|
Packit |
9ff65e |
let cmp =
|
|
Packit |
9ff65e |
size_compare sz1 sz2
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
let norm i =
|
|
Packit |
9ff65e |
if i < 0 then
|
|
Packit |
9ff65e |
-1
|
|
Packit |
9ff65e |
else if i > 0 then
|
|
Packit |
9ff65e |
1
|
|
Packit |
9ff65e |
else
|
|
Packit |
9ff65e |
0
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
assert_equal
|
|
Packit |
9ff65e |
~printer:string_of_int
|
|
Packit |
9ff65e |
(norm res)
|
|
Packit |
9ff65e |
cmp)
|
|
Packit |
9ff65e |
in
|
|
Packit |
9ff65e |
List.map
|
|
Packit |
9ff65e |
test_of_vector
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
TB 1L, TB 1L, 0;
|
|
Packit |
9ff65e |
GB 1L, GB 1L, 0;
|
|
Packit |
9ff65e |
MB 1L, MB 1L, 0;
|
|
Packit |
9ff65e |
KB 1L, KB 1L, 0;
|
|
Packit |
9ff65e |
B 1L, B 1L, 0;
|
|
Packit |
9ff65e |
TB 1L, B 1L, 1;
|
|
Packit |
9ff65e |
GB 1L, B 1L, 1;
|
|
Packit |
9ff65e |
MB 1L, B 1L, 1;
|
|
Packit |
9ff65e |
KB 1L, B 1L, 1;
|
|
Packit |
9ff65e |
B 2L, B 1L, 1;
|
|
Packit |
9ff65e |
]);
|
|
Packit |
9ff65e |
];
|
|
Packit |
9ff65e |
]
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
let () =
|
|
Packit |
9ff65e |
let _i: int = Unix.umask test_umask in
|
|
Packit |
9ff65e |
run_test_tt_main
|
|
Packit |
9ff65e |
("ocaml-fileutils" >:::
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
"FilePath" >:::
|
|
Packit |
9ff65e |
[
|
|
Packit |
9ff65e |
test_unix;
|
|
Packit |
9ff65e |
test_win32;
|
|
Packit |
9ff65e |
test_macos;
|
|
Packit |
9ff65e |
];
|
|
Packit |
9ff65e |
|
|
Packit |
9ff65e |
test_fileutil;
|
|
Packit |
9ff65e |
])
|