make_test.ml 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. include Seppo_lib
  2. open Assrt
  3. let _test_fkt () =
  4. let bifu _rs _pqs dst _src =
  5. let pfrt _oc =
  6. Ok dst in
  7. let ( let* ) = Result.bind in
  8. let* _ = File.mkdir_p File.pDir dst in
  9. File.out_channel dst pfrt
  10. in
  11. let mmk rs t : (string, string) result =
  12. match Make.M2.find_rule rs t with
  13. | Some (r,v) ->
  14. let j_src' = r.prerequisites |> List.hd in
  15. let j_src = j_src' |> Make.Jig.make in
  16. let src = v |> Make.Jig.paste j_src |> Option.get in
  17. Logr.info (fun m -> m "%s.%s %s -> %s" "Make_test" "test_fkt.build" src t);
  18. src |> bifu rs r.prerequisites t
  19. | None -> Error "no rules found to make" in
  20. let rs : Make.t list = [{
  21. target = "%-%/index.xml";
  22. prerequisites = ["app/var/db/%/%.ix"];
  23. fresh = Make.Outdated;
  24. command = (fun _ _ _ _ -> Error "Not implemented");
  25. }] in
  26. "o/p-0/index.xml"
  27. |> mmk rs
  28. |> Result.get_ok
  29. |> Assrt.equals_string __LOC__ "o/p-0/index.xml"
  30. let test_pat () =
  31. let ji = "a%b%c" |> Make.Jig.make in
  32. match Make.Jig.cut ji "aSomebThingc" with
  33. | Some ["Some";"Thing"] as v ->
  34. Option.bind v ("A_%_B_%_C" |> Make.Jig.make |> Make.Jig.paste)
  35. |> Option.value ~default:"-"
  36. |> Assrt.equals_string __LOC__ "A_Some_B_Thing_C"
  37. | _ -> "Ouch" |> Assrt.equals_string __LOC__ ""
  38. module Jig = struct
  39. let test_make () =
  40. let jig_src = "%/%.ix" |> Make.Jig.make in
  41. let jig_dst = "%-%/index.xml" |> Make.Jig.make in
  42. "o/p/2.ix"
  43. |> Make.Jig.cut jig_src
  44. |> Option.get
  45. |> Make.Jig.paste jig_dst
  46. |> Option.get
  47. |> Assrt.equals_string __LOC__ "o/p-2/index.xml"
  48. let test_paste () =
  49. let jig = "%/%/%.ix" |> Make.Jig.make in
  50. "foo/bar/baz.ix"
  51. |> Make.Jig.cut jig
  52. |> Option.get
  53. |> Make.Jig.paste jig
  54. |> Option.get
  55. |> equals_string __LOC__ "foo/bar/baz.ix"
  56. end
  57. let _test_mk1 () =
  58. Logr.info (fun m -> m "%s" __LOC__);
  59. let r : Make.t = {
  60. target = {|a/b-%.xml|};
  61. fresh = Make.Outdated;
  62. prerequisites = [{|c/d-%.ix|}];
  63. command = (fun _ _r _rz t ->
  64. Logr.info (fun m -> m "%s '%s'" __LOC__ t);
  65. t |> Assrt.equals_string __LOC__ "a/b-37.xml";
  66. Ok t);
  67. } in
  68. Make.M2.make [r] "a/b-37.xml"
  69. |> Result.get_ok
  70. |> Assrt.equals_string __LOC__ "a/b-37.xml"
  71. let () =
  72. (* _test_fkt (); *)
  73. test_pat ();
  74. Jig.test_make ();
  75. Jig.test_paste ();
  76. (* _test_mk1 (); *)
  77. assert true