A fork of mtelver's day10 project
1(** Unit tests for package data reading *)
2
3let test_dir = ref ""
4
5let setup () =
6 let dir = Filename.temp_dir "test-pkg-data-" "" in
7 test_dir := dir;
8 dir
9
10let teardown () =
11 if !test_dir <> "" then begin
12 ignore (Sys.command (Printf.sprintf "rm -rf %s" !test_dir));
13 test_dir := ""
14 end
15
16let mkdir_p path =
17 let rec create dir =
18 if not (Sys.file_exists dir) then begin
19 create (Filename.dirname dir);
20 try Unix.mkdir dir 0o755 with Unix.Unix_error (Unix.EEXIST, _, _) -> ()
21 end
22 in
23 create path
24
25(** Test: list_packages returns packages from html/p directory *)
26let test_list_packages () =
27 let base_dir = setup () in
28 let html_dir = Filename.concat base_dir "html" in
29 mkdir_p (Filename.concat html_dir "p/base/0.16.0");
30 mkdir_p (Filename.concat html_dir "p/base/0.15.0");
31 mkdir_p (Filename.concat html_dir "p/core/0.16.0");
32
33 let packages = Day10_web_data.Package_data.list_packages ~html_dir in
34 assert (List.length packages = 3);
35 assert (List.mem ("base", "0.16.0") packages);
36 assert (List.mem ("base", "0.15.0") packages);
37 assert (List.mem ("core", "0.16.0") packages);
38
39 teardown ();
40 Printf.printf "PASS: test_list_packages\n%!"
41
42(** Test: list_package_versions returns versions for a package *)
43let test_list_package_versions () =
44 let base_dir = setup () in
45 let html_dir = Filename.concat base_dir "html" in
46 mkdir_p (Filename.concat html_dir "p/base/0.16.0");
47 mkdir_p (Filename.concat html_dir "p/base/0.15.0");
48 mkdir_p (Filename.concat html_dir "p/base/0.14.0");
49
50 let versions = Day10_web_data.Package_data.list_package_versions ~html_dir ~name:"base" in
51 assert (List.length versions = 3);
52 (* Should be sorted descending *)
53 assert (List.hd versions = "0.16.0");
54
55 teardown ();
56 Printf.printf "PASS: test_list_package_versions\n%!"
57
58(** Test: package_has_docs checks if docs exist *)
59let test_package_has_docs () =
60 let base_dir = setup () in
61 let html_dir = Filename.concat base_dir "html" in
62 mkdir_p (Filename.concat html_dir "p/base/0.16.0");
63
64 assert (Day10_web_data.Package_data.package_has_docs ~html_dir ~name:"base" ~version:"0.16.0");
65 assert (not (Day10_web_data.Package_data.package_has_docs ~html_dir ~name:"base" ~version:"0.15.0"));
66
67 teardown ();
68 Printf.printf "PASS: test_package_has_docs\n%!"
69
70(** Test: list_package_names returns unique package names *)
71let test_list_package_names () =
72 let base_dir = setup () in
73 let html_dir = Filename.concat base_dir "html" in
74 mkdir_p (Filename.concat html_dir "p/base/0.16.0");
75 mkdir_p (Filename.concat html_dir "p/base/0.15.0");
76 mkdir_p (Filename.concat html_dir "p/core/0.16.0");
77 mkdir_p (Filename.concat html_dir "p/async/0.16.0");
78
79 let names = Day10_web_data.Package_data.list_package_names ~html_dir in
80 assert (List.length names = 3);
81 assert (List.mem "base" names);
82 assert (List.mem "core" names);
83 assert (List.mem "async" names);
84
85 teardown ();
86 Printf.printf "PASS: test_list_package_names\n%!"
87
88let () =
89 Printf.printf "Running Package_data tests...\n%!";
90 test_list_packages ();
91 test_list_package_versions ();
92 test_package_has_docs ();
93 test_list_package_names ();
94 Printf.printf "\nAll Package_data tests passed!\n%!"