File: FS_event.ml

package info (click to toggle)
ocaml-luv 0.5.14-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 3,504 kB
  • sloc: ml: 11,130; makefile: 6,223; sh: 4,592; ansic: 1,517; python: 38
file content (105 lines) | stat: -rw-r--r-- 3,178 bytes parent folder | download
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
(* This file is part of Luv, released under the MIT license. See LICENSE.md for
   details, or visit https://github.com/aantron/luv/blob/master/LICENSE.md. *)



open Test_helpers

let filename = "fs_event"

let with_fs_event f =
  if Sys.file_exists filename then
    Sys.remove filename;

  let event = Luv.FS_event.init () |> check_success_result "init" in

  f event;

  Luv.Handle.close event ignore;
  run ()

let tests = [
  "fs_event", [
    "init, close", `Quick, begin fun () ->
      with_fs_event ignore
    end;

    "start, stop", `Quick, begin fun () ->
      with_fs_event begin fun event ->
        let occurred = ref false in
        let timed_out = ref false in

        Luv.FS_event.start
          event Filename.current_dir_name (fun _ -> occurred := true);

        let timer = Luv.Timer.init () |> check_success_result "timer" in
        Luv.Timer.start timer 10 begin fun () ->
          Luv.FS_event.stop event |> check_success_result "stop";
          Luv.Handle.close timer ignore;
          timed_out := true
        end
        |> check_success_result "timer_start";

        run ();

        Alcotest.(check bool) "timed out" true !timed_out;
        Alcotest.(check bool) "occurred" false !occurred
      end
    end;

    "create", `Quick, begin fun () ->
      with_fs_event begin fun event ->
        let occurred = ref false in

        Luv.FS_event.start event Filename.current_dir_name begin fun result ->
          Luv.FS_event.stop event |> check_success_result "stop";
          let filename', events = check_success_result "start" result in
          Alcotest.(check (option string)) "filename" (Some filename) filename';
          Alcotest.(check bool) "rename" true (List.mem `RENAME events);
          Alcotest.(check bool) "change" false (List.mem `CHANGE events);
          occurred := true
        end;

        open_out filename |> close_out;

        run ();

        Alcotest.(check bool) "occurred" true !occurred
      end
    end;

    "change", `Quick, begin fun () ->
      with_fs_event begin fun event ->
        let occurred = ref false in

        open_out filename |> close_out;

        Luv.FS_event.start event filename begin fun result ->
          Luv.FS_event.stop event |> check_success_result "stop";
          let filename', events = check_success_result "start" result in
          Alcotest.(check (option string)) "filename" (Some filename) filename';
          Alcotest.(check bool) "rename" false (List.mem `RENAME events);
          Alcotest.(check bool) "change" true (List.mem `CHANGE events);
          occurred := true
        end;

        let start = ref 0. in

        let timer = Luv.Timer.init () |> check_success_result "timer init" in
        check_success_result "timer start" @@
        Luv.Timer.start timer 100 begin fun () ->
          start := Unix.gettimeofday ();
          let oc = open_out filename in
          let () = Printf.fprintf oc "foo" in
          close_out oc
        end;

        run ();

        Alcotest.(check bool) "occurred" true !occurred;
        Alcotest.(check (float 0.1)) "delay < 100ms" 0.
          (Unix.gettimeofday () -. !start)
      end
    end;
  ]
]