A fork of mtelver's day10 project
at main 94 lines 3.2 kB view raw
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%!"