mirror of
https://github.com/c-cube/tiny_httpd.git
synced 2025-12-06 03:05:29 -05:00
52 lines
1.8 KiB
OCaml
52 lines
1.8 KiB
OCaml
open Test_util
|
|
open Tiny_httpd_core
|
|
module U = Util
|
|
|
|
let () = assert_eq "hello%20world" (U.percent_encode "hello world")
|
|
let () = assert_eq "%23%25^%24%40^%40" (U.percent_encode "#%^$@^@")
|
|
|
|
let () =
|
|
assert_eq "a%20ohm%2B5235%25%26%40%23%20---%20_"
|
|
(U.percent_encode "a ohm+5235%&@# --- _")
|
|
|
|
let () = assert_eq (Some "?") (U.percent_decode @@ U.percent_encode "?")
|
|
|
|
let () =
|
|
add_qcheck
|
|
@@ QCheck.Test.make ~count:1_000 ~long_factor:20 Q.string (fun s ->
|
|
String.iter (fun c -> Q.assume @@ is_ascii_char c) s;
|
|
match U.percent_decode (U.percent_encode s) with
|
|
| Some s' -> s = s'
|
|
| None -> Q.Test.fail_report "invalid percent encoding")
|
|
|
|
let () = assert_eq [ "a"; "b" ] (U.split_on_slash "/a/b")
|
|
let () = assert_eq [ "coucou"; "lol" ] (U.split_on_slash "/coucou/lol")
|
|
let () = assert_eq [ "a"; "b"; "c" ] (U.split_on_slash "/a/b//c/")
|
|
let () = assert_eq [ "a"; "b" ] (U.split_on_slash "//a/b/")
|
|
let () = assert_eq [ "a" ] (U.split_on_slash "/a//")
|
|
let () = assert_eq [] (U.split_on_slash "/")
|
|
let () = assert_eq [] (U.split_on_slash "//")
|
|
|
|
let () =
|
|
assert_eq ~cmp:eq_sorted (Ok [ "a", "b"; "c", "d" ]) (U.parse_query "a=b&c=d")
|
|
|
|
let () =
|
|
add_qcheck
|
|
@@ QCheck.Test.make ~long_factor:20 ~count:1_000
|
|
Q.(small_list (pair string string))
|
|
(fun l ->
|
|
List.iter
|
|
(fun (a, b) ->
|
|
Q.assume (a <> "" && b <> "");
|
|
String.iter (fun c -> Q.assume @@ is_ascii_char c) a;
|
|
String.iter (fun c -> Q.assume @@ is_ascii_char c) b)
|
|
l;
|
|
let s =
|
|
String.concat "&"
|
|
(List.map
|
|
(fun (x, y) -> U.percent_encode x ^ "=" ^ U.percent_encode y)
|
|
l)
|
|
in
|
|
eq_sorted (Ok l) (U.parse_query s))
|
|
|
|
let () = run_qcheck_and_exit ()
|