File: bytebuffer_tests.ml

package info (click to toggle)
ocaml-cohttp 6.2.1-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,624 kB
  • sloc: ml: 13,107; makefile: 20; sh: 18; javascript: 18
file content (37 lines) | stat: -rw-r--r-- 1,255 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
module Bytebuffer = Cohttp_lwt.Private.Bytebuffer

let%expect_test "read" =
  let line = "foobar\r\n" in
  let test buf_size =
    let buf = Bytebuffer.create buf_size in
    let refill =
      let line_pos = ref 0 in
      let reads_left = ref 10 in
      fun buf ~pos ~len ->
        if !reads_left = 0 then raise Exit;
        decr reads_left;
        let available = String.length line - !line_pos in
        if available = 0 then Lwt.return `Eof
        else
          let read_len = min len available in
          BytesLabels.blit_string ~src:line ~src_pos:!line_pos ~dst:buf
            ~dst_pos:pos ~len:read_len;
          line_pos := !line_pos + read_len;
          Lwt.return (`Ok read_len)
    in
    let open Lwt.Syntax in
    Lwt_main.run
    @@ Lwt.catch
         (fun () ->
           let+ res = Bytebuffer.read_line buf refill in
           match res with
           | None -> print_endline "failed to read line"
           | Some line -> Printf.printf "read line: %S\n" line)
         (function
           | Exit -> Lwt.return @@ print_endline "failed to read"
           | _ -> assert false)
  in
  test (String.length line);
  [%expect {| read line: "foobar" |}];
  test (String.length line - 1);
  [%expect {| read line: "foobar" |}]