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 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
(******************************************************************************)
(* OASIS: architecture for building OCaml libraries and applications *)
(* *)
(* Copyright (C) 2011-2016, Sylvain Le Gall *)
(* Copyright (C) 2008-2011, OCamlCore SARL *)
(* *)
(* This library is free software; you can redistribute it and/or modify it *)
(* under the terms of the GNU Lesser General Public License as published by *)
(* the Free Software Foundation; either version 2.1 of the License, or (at *)
(* your option) any later version, with the OCaml static compilation *)
(* exception. *)
(* *)
(* This library is distributed in the hope that it will be useful, but *)
(* WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY *)
(* or FITNESS FOR A PARTICULAR PURPOSE. See the file COPYING for more *)
(* details. *)
(* *)
(* You should have received a copy of the GNU Lesser General Public License *)
(* along with this library; if not, write to the Free Software Foundation, *)
(* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA *)
(******************************************************************************)
(** Test for OASISFileSystem.
@author Sylvain Le Gall
*)
open OUnit2
open OASISFileSystem
let tests =
"OASISFileSystem" >:::
[
"defer_close" >::
(fun _ ->
let tester msg =
let clsr =
object
val count = ref 0
method close = incr count
method get_count = !count
end
in
clsr,
fun () ->
assert_equal
~msg:(msg ^ ": number of time #close has been called.")
~printer:string_of_int
1
clsr#get_count
in
let clsr, assrt = tester "normal" in
let () =
defer_close clsr ignore;
assrt ()
in
let clsr, assrt = tester "raise exception" in
let exc = Failure "foobar" in
let () =
try
defer_close clsr (fun _ -> if true then raise exc; ());
assert_failure "raise exception should have raised an exception"
with e when e = exc ->
assrt ()
in
());
"host_fs" >::
(fun test_ctxt ->
let tmpdir = bracket_tmpdir test_ctxt in
let hfs = new host_fs tmpdir in
let fn = of_unix_filename "foobar" in
let content = "abcd" in
let assert_present fn =
assert_bool
(Printf.sprintf
"File %S should exist."
(hfs#string_of_filename fn))
(hfs#file_exists fn)
in
let assert_absent fn =
assert_bool
(Printf.sprintf
"File %S should not exist."
(hfs#string_of_filename fn))
(not (hfs#file_exists fn))
in
let buf = Buffer.create (String.length content) in
assert_absent fn;
defer_close (hfs#open_out fn) ignore;
assert_present fn;
defer_close
(hfs#open_out fn)
(fun wrtr ->
Buffer.clear buf;
Buffer.add_string buf content;
wrtr#output buf);
Buffer.clear buf;
defer_close (hfs#open_in fn) (read_all buf);
assert_equal
~msg:"File content"
~printer:(Printf.sprintf "%S")
content
(Buffer.contents buf);
hfs#remove fn;
assert_absent fn;
());
"stream_of_reader" >::
(fun test_ctxt ->
let tmpdir = bracket_tmpdir test_ctxt in
let fn = of_unix_filename "test.txt" in
let hfs = new host_fs tmpdir in
let buf = Buffer.create 13 in
let test_one len =
let str =
Buffer.clear buf;
for i = 0 to len - 1 do
Buffer.add_char buf (Char.chr ((Char.code 'a') + (i mod 26)))
done;
defer_close
(hfs#open_out fn)
(fun wrtr -> wrtr#output buf);
Buffer.contents buf
in
defer_close
(hfs#open_in fn)
(fun rdr ->
let strm = stream_of_reader rdr in
Buffer.clear buf;
Stream.iter (Buffer.add_char buf) strm);
assert_equal ~printer:(Printf.sprintf "%S") str (Buffer.contents buf)
in
test_one 15;
test_one 15000);
]
|