From a3ac297c993c81e1a5ee38efe11811dee5fc2b83 Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 17:56:35 +0100 Subject: [PATCH 01/12] Add new printer for tests --- test/providers/int_printer.ml | 17 +++++++++++++++++ test/providers/int_printer.mli | 11 +++++++++++ 2 files changed, 28 insertions(+) create mode 100644 test/providers/int_printer.ml create mode 100644 test/providers/int_printer.mli diff --git a/test/providers/int_printer.ml b/test/providers/int_printer.ml new file mode 100644 index 0000000..60642c6 --- /dev/null +++ b/test/providers/int_printer.ml @@ -0,0 +1,17 @@ +module Impl = struct + type t = unit + + let string_of_int () i = Int.to_string i +end + +include Impl + +let handler : (unit, [ `Int_printer ]) Provider.Handler.t = + Provider.Handler.make + (List.concat + [ Interface.Int_printer.Provider_interface.make (module Impl) + |> Provider.Handler.bindings + ]) +;; + +let make () : [ `Int_printer ] Provider.t = Provider.T { t = (); handler } diff --git a/test/providers/int_printer.mli b/test/providers/int_printer.mli new file mode 100644 index 0000000..531ec86 --- /dev/null +++ b/test/providers/int_printer.mli @@ -0,0 +1,11 @@ +(** [Int_printer] is a provider for the {!module:Interface.Int_printer} interface. + + The structure of this file is very similar to the [Eio_reader] module, thus + is not documented in details. Refer to {!Eio_reader} for more. + + We use it as an alternate to [Num_printer], which is able to print both ints and floats + to demonstrate cases involving subtyping. *) + +type t = unit + +val make : t -> Interface.Int_printer.tag Provider.t From 5c051943f2fc754d817bf4d42ddc317fa8316b8b Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 17:34:10 +0100 Subject: [PATCH 02/12] Replace eio usage in test by equivalents --- test/providers/num_printer.mli | 12 ++++++++++ test/test__introspection.ml | 33 ++++++++++++++++---------- test/test__make_interface.ml | 43 +++++++++++++++++----------------- 3 files changed, 54 insertions(+), 34 deletions(-) diff --git a/test/providers/num_printer.mli b/test/providers/num_printer.mli index 395ef3d..9d72669 100644 --- a/test/providers/num_printer.mli +++ b/test/providers/num_printer.mli @@ -13,3 +13,15 @@ val handler (** If you simply wish to use this provider without overrides, use [make ()]. *) val make : t -> [ Interface.Int_printer.tag | Interface.Float_printer.tag ] Provider.t + +(** In this specific example, we chose to expose the signature of the provider's + implementation. This is not something that is usually required, since + {!make} already provides a way to build a provider. This is only done here + for the sake of the tests, as we show different ways an interface can be + built based on various parts of its implementation. *) +module Impl : sig + type nonrec t = t + + include Interface.Int_printer.Provider_interface.S with type t := t + include Interface.Float_printer.Provider_interface.S with type t := t +end diff --git a/test/test__introspection.ml b/test/test__introspection.ml index e352c7f..eb0ce96 100644 --- a/test/test__introspection.ml +++ b/test/test__introspection.ml @@ -21,6 +21,8 @@ let print_implements (Provider.T { t = _; handler }) = ; directory_reader = (implements Interface.Directory_reader.Provider_interface.Directory_reader : bool) + ; int_printer = + (implements Interface.Int_printer.Provider_interface.Int_printer : bool) } }] ;; @@ -32,25 +34,29 @@ let%expect_test "introspection" = (( implements ( (file_reader false) - (directory_reader false)))) |}]; + (directory_reader false) + (int_printer false)))) + |}]; let unix_reader = Providers.Unix_reader.make () in - Eio_main.run - @@ fun env -> - let eio_reader = Providers.Eio_reader.make ~env in - print_implements eio_reader; + let num_printer = Providers.Num_printer.make () in + print_implements num_printer; [%expect {| (( implements ( - (file_reader true) - (directory_reader true)))) |}]; + (file_reader false) + (directory_reader false) + (int_printer true)))) + |}]; print_implements unix_reader; [%expect {| (( implements ( (file_reader false) - (directory_reader true)))) |}]; + (directory_reader true) + (int_printer false)))) + |}]; let id_mapping = Hashtbl.create (module Int) in let next_id = ref 0 in let sexp_of_id id = @@ -73,14 +79,15 @@ let%expect_test "introspection" = (id 0) (name Provider_test__Interface__Directory_reader.Provider_interface.Directory_reader))) |}]; - print_implemented_traits eio_reader; + print_implemented_traits num_printer; [%expect {| - (((id 0) + (((id 1) (name - Provider_test__Interface__Directory_reader.Provider_interface.Directory_reader)) - ((id 1) - (name Provider_test__Interface__File_reader.Provider_interface.File_reader))) |}]; + Provider_test__Interface__Float_printer.Provider_interface.Float_printer)) + ((id 2) + (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) + |}]; ()); () ;; diff --git a/test/test__make_interface.ml b/test/test__make_interface.ml index f8f887a..d55c565 100644 --- a/test/test__make_interface.ml +++ b/test/test__make_interface.ml @@ -7,21 +7,21 @@ let%expect_test "make interface" = let trait1 = Provider.Trait.implement - Interface.Directory_reader.Provider_interface.Directory_reader - ~impl:(module Providers.Eio_reader.Impl) + Interface.Int_printer.Provider_interface.Int_printer + ~impl:(module Providers.Num_printer.Impl) in - let eio1 = - Interface.Directory_reader.Provider_interface.make (module Providers.Eio_reader.Impl) + let num1 = + Interface.Int_printer.Provider_interface.make (module Providers.Num_printer.Impl) in - (match trait1, List.hd_exn (Provider.Handler.bindings eio1) with + (match trait1, List.hd_exn (Provider.Handler.bindings num1) with | T t, T t' -> require [%here] (Provider.Trait.same t.trait t'.trait); [%expect {||}]; ()); let trait2 = Provider.Trait.implement - Interface.File_reader.Provider_interface.File_reader - ~impl:(module Providers.Eio_reader.Impl) + Interface.Float_printer.Provider_interface.Float_printer + ~impl:(module Providers.Num_printer.Impl) in (match trait1, trait2 with | T t1, T t2 -> @@ -32,17 +32,18 @@ let%expect_test "make interface" = }]; [%expect {| - ((trait1 ( - (id #id) - (name - Provider_test__Interface__Directory_reader.Provider_interface.Directory_reader))) - (trait2 ( - (id #id) - (name Provider_test__Interface__File_reader.Provider_interface.File_reader)))) |}]; + ((trait1 ( + (id #id) + (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) + (trait2 ( + (id #id) + (name + Provider_test__Interface__Float_printer.Provider_interface.Float_printer)))) + |}]; require [%here] (not (Provider.Trait.same t1.trait t2.trait)); [%expect {||}]; ()); - (match Provider.Handler.bindings eio1 with + (match Provider.Handler.bindings num1 with | [ c1 ] -> require_equal [%here] @@ -54,13 +55,13 @@ let%expect_test "make interface" = let empty = Provider.Handler.make [] in require [%here] (Provider.Handler.is_empty empty); require [%here] (List.is_empty (Provider.Handler.bindings empty)); - let eio2 = Provider.Handler.make [ trait2 ] in - require [%here] (not (Provider.Handler.is_empty eio2)); - require [%here] (not (Provider.Private.Handler.same_trait_uids empty eio2)); + let num2 = Provider.Handler.make [ trait2 ] in + require [%here] (not (Provider.Handler.is_empty num2)); + require [%here] (not (Provider.Private.Handler.same_trait_uids empty num2)); [%expect {||}]; - let eio3 = Provider.Handler.make [ trait1; trait2 ] in - let eio4 = Provider.Handler.extend eio1 ~with_:(Provider.Handler.bindings eio2) in - require [%here] (Provider.Private.Handler.same_trait_uids eio3 eio4); + let num3 = Provider.Handler.make [ trait1; trait2 ] in + let num4 = Provider.Handler.extend num1 ~with_:(Provider.Handler.bindings num2) in + require [%here] (Provider.Private.Handler.same_trait_uids num3 num4); [%expect {||}]; () ;; From c667490f7202232692456cdcfd6d2a4a49379bbd Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 17:55:07 +0100 Subject: [PATCH 03/12] Stale name (pending interface -> handler renaming) --- test/{test__make_interface.ml => test__make_handler.ml} | 0 test/{test__make_interface.mli => test__make_handler.mli} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename test/{test__make_interface.ml => test__make_handler.ml} (100%) rename test/{test__make_interface.mli => test__make_handler.mli} (100%) diff --git a/test/test__make_interface.ml b/test/test__make_handler.ml similarity index 100% rename from test/test__make_interface.ml rename to test/test__make_handler.ml diff --git a/test/test__make_interface.mli b/test/test__make_handler.mli similarity index 100% rename from test/test__make_interface.mli rename to test/test__make_handler.mli From 855c3ef34dd66a043527ac1edbd7160ffeee5e1f Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 17:55:31 +0100 Subject: [PATCH 04/12] Use alternate handler make strategy to ensure coverage --- test/providers/unix_reader.ml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/test/providers/unix_reader.ml b/test/providers/unix_reader.ml index a16da92..685d720 100644 --- a/test/providers/unix_reader.ml +++ b/test/providers/unix_reader.ml @@ -10,12 +10,5 @@ include Impl let make () : [ `Directory_reader ] Provider.t = Provider.T - { t = () - ; handler = - Provider.Handler.make - [ Provider.Trait.implement - Interface.Directory_reader.Provider_interface.Directory_reader - ~impl:(module Impl) - ] - } + { t = (); handler = Interface.Directory_reader.Provider_interface.make (module Impl) } ;; From 70c1126390b6feb90da0bdb376eb8fc9c9916cba Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 17:56:18 +0100 Subject: [PATCH 05/12] Tweak in tests --- test/test__introspection.ml | 25 +++++++++++++++---------- test/test__make_handler.ml | 27 ++++++++++++++++++++------- 2 files changed, 35 insertions(+), 17 deletions(-) diff --git a/test/test__introspection.ml b/test/test__introspection.ml index eb0ce96..73f84c3 100644 --- a/test/test__introspection.ml +++ b/test/test__introspection.ml @@ -23,6 +23,8 @@ let print_implements (Provider.T { t = _; handler }) = : bool) ; int_printer = (implements Interface.Int_printer.Provider_interface.Int_printer : bool) + ; float_printer = + (implements Interface.Float_printer.Provider_interface.Float_printer : bool) } }] ;; @@ -35,9 +37,10 @@ let%expect_test "introspection" = implements ( (file_reader false) (directory_reader false) - (int_printer false)))) + (int_printer false) + (float_printer false)))) |}]; - let unix_reader = Providers.Unix_reader.make () in + let int_printer = Providers.Int_printer.make () in let num_printer = Providers.Num_printer.make () in print_implements num_printer; [%expect @@ -46,16 +49,18 @@ let%expect_test "introspection" = implements ( (file_reader false) (directory_reader false) - (int_printer true)))) + (int_printer true) + (float_printer true)))) |}]; - print_implements unix_reader; + print_implements int_printer; [%expect {| (( implements ( (file_reader false) - (directory_reader true) - (int_printer false)))) + (directory_reader false) + (int_printer true) + (float_printer false)))) |}]; let id_mapping = Hashtbl.create (module Int) in let next_id = ref 0 in @@ -72,20 +77,20 @@ let%expect_test "introspection" = Sexp.Atom (Int.to_string id) in Ref.set_temporarily Provider.Trait.Info.sexp_of_id sexp_of_id ~f:(fun () -> - print_implemented_traits unix_reader; + print_implemented_traits int_printer; [%expect {| (( (id 0) - (name - Provider_test__Interface__Directory_reader.Provider_interface.Directory_reader))) |}]; + (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) + |}]; print_implemented_traits num_printer; [%expect {| (((id 1) (name Provider_test__Interface__Float_printer.Provider_interface.Float_printer)) - ((id 2) + ((id 0) (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) |}]; ()); diff --git a/test/test__make_handler.ml b/test/test__make_handler.ml index d55c565..55410fe 100644 --- a/test/test__make_handler.ml +++ b/test/test__make_handler.ml @@ -4,26 +4,39 @@ equivalent interfaces. This ensures consistency across different methods of interface creation. *) +let%expect_test "int-printer" = + let printer = Providers.Int_printer.make () in + Interface.Int_printer.print printer 123_456_789; + [%expect {| 123456789 |}]; + () +;; + let%expect_test "make interface" = - let trait1 = + let binding1 = Provider.Trait.implement Interface.Int_printer.Provider_interface.Int_printer ~impl:(module Providers.Num_printer.Impl) in + Interface.Int_printer.print + (Provider.T { t = (); handler = Provider.Handler.make [ binding1 ] }) + 1234; + [%expect {| 1234 |}]; let num1 = Interface.Int_printer.Provider_interface.make (module Providers.Num_printer.Impl) in - (match trait1, List.hd_exn (Provider.Handler.bindings num1) with + Interface.Int_printer.print (Provider.T { t = (); handler = num1 }) 5678; + [%expect {| 5678 |}]; + (match binding1, List.hd_exn (Provider.Handler.bindings num1) with | T t, T t' -> require [%here] (Provider.Trait.same t.trait t'.trait); [%expect {||}]; ()); - let trait2 = + let binding2 = Provider.Trait.implement Interface.Float_printer.Provider_interface.Float_printer ~impl:(module Providers.Num_printer.Impl) in - (match trait1, trait2 with + (match binding1, binding2 with | T t1, T t2 -> print_s [%sexp @@ -49,17 +62,17 @@ let%expect_test "make interface" = [%here] (module Provider.Trait.Uid) (Provider.Binding.uid c1) - (Provider.Binding.uid trait1); + (Provider.Binding.uid binding1); [%expect {||}] | _ -> assert false); let empty = Provider.Handler.make [] in require [%here] (Provider.Handler.is_empty empty); require [%here] (List.is_empty (Provider.Handler.bindings empty)); - let num2 = Provider.Handler.make [ trait2 ] in + let num2 = Provider.Handler.make [ binding2 ] in require [%here] (not (Provider.Handler.is_empty num2)); require [%here] (not (Provider.Private.Handler.same_trait_uids empty num2)); [%expect {||}]; - let num3 = Provider.Handler.make [ trait1; trait2 ] in + let num3 = Provider.Handler.make [ binding1; binding2 ] in let num4 = Provider.Handler.extend num1 ~with_:(Provider.Handler.bindings num2) in require [%here] (Provider.Private.Handler.same_trait_uids num3 num4); [%expect {||}]; From 1ed4d7c85cb69a758ece99a5a69c9b5e34c6ed4d Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 18:15:54 +0100 Subject: [PATCH 06/12] Reorganize test directory structure to prepare for split --- test/dune | 4 +- test/test__cache.ml | 22 +++++------ test/test__introspection.ml | 30 +++++++-------- test/test__invalid_tags.ml | 10 ++--- test/test__make_handler.ml | 25 ++++++------- test/test__override.ml | 28 +++++++------- test/test__reader.ml | 20 +++++----- .../directory_reader.ml | 0 .../directory_reader.mli | 0 test/test_interfaces/dune | 36 ++++++++++++++++++ .../file_reader.ml | 0 .../file_reader.mli | 0 .../float_printer.ml | 0 .../float_printer.mli | 0 .../int_printer.ml | 0 .../int_printer.mli | 0 test/test_providers/dune | 37 +++++++++++++++++++ .../eio_reader.ml | 4 +- .../eio_reader.mli | 6 +-- .../int_printer.ml | 2 +- .../int_printer.mli | 8 ++-- .../num_printer.ml | 4 +- .../num_printer.mli | 16 +++++--- .../unix_reader.ml | 4 +- .../unix_reader.mli | 8 ++-- 25 files changed, 170 insertions(+), 94 deletions(-) rename test/{interface => test_interfaces}/directory_reader.ml (100%) rename test/{interface => test_interfaces}/directory_reader.mli (100%) create mode 100644 test/test_interfaces/dune rename test/{interface => test_interfaces}/file_reader.ml (100%) rename test/{interface => test_interfaces}/file_reader.mli (100%) rename test/{interface => test_interfaces}/float_printer.ml (100%) rename test/{interface => test_interfaces}/float_printer.mli (100%) rename test/{interface => test_interfaces}/int_printer.ml (100%) rename test/{interface => test_interfaces}/int_printer.mli (100%) create mode 100644 test/test_providers/dune rename test/{providers => test_providers}/eio_reader.ml (78%) rename test/{providers => test_providers}/eio_reader.mli (83%) rename test/{providers => test_providers}/int_printer.ml (81%) rename test/{providers => test_providers}/int_printer.mli (51%) rename test/{providers => test_providers}/num_printer.ml (74%) rename test/{providers => test_providers}/num_printer.mli (62%) rename test/{providers => test_providers}/unix_reader.ml (68%) rename test/{providers => test_providers}/unix_reader.mli (58%) diff --git a/test/dune b/test/dune index 2316370..e561aff 100644 --- a/test/dune +++ b/test/dune @@ -18,6 +18,8 @@ eio_main expect_test_helpers_core.expect_test_helpers_base provider + test_interfaces + test_providers unix) (instrumentation (backend bisect_ppx)) @@ -34,5 +36,3 @@ ppx_let ppx_sexp_conv ppx_sexp_value))) - -(include_subdirs qualified) diff --git a/test/test__cache.ml b/test/test__cache.ml index c183ea2..b4cd71e 100644 --- a/test/test__cache.ml +++ b/test/test__cache.ml @@ -13,15 +13,15 @@ module Cache_state = struct end let%expect_test "override" = - let num_printer = Providers.Num_printer.make () in + let num_printer = Test_providers.Num_printer.make () in let cache_state_of_uid uid = if Provider.Trait.Uid.equal uid - (Interface.Int_printer.Provider_interface.Int_printer |> Provider.Trait.uid) + (Test_interfaces.Int_printer.Provider_interface.Int_printer |> Provider.Trait.uid) then Cache_state.Int_printer else if Provider.Trait.Uid.equal uid - (Interface.Float_printer.Provider_interface.Float_printer + (Test_interfaces.Float_printer.Provider_interface.Float_printer |> Provider.Trait.uid) then Cache_state.Float_printer else assert false [@coverage off] @@ -45,8 +45,8 @@ let%expect_test "override" = ignore (Provider.Handler.lookup handler - ~trait:Interface.Int_printer.Provider_interface.Int_printer - : (module Interface.Int_printer.Provider_interface.S with type t = a))) + ~trait:Test_interfaces.Int_printer.Provider_interface.Int_printer + : (module Test_interfaces.Int_printer.Provider_interface.S with type t = a))) handler; require_equal [%here] @@ -59,8 +59,8 @@ let%expect_test "override" = ignore (Provider.Handler.lookup handler - ~trait:Interface.Float_printer.Provider_interface.Float_printer - : (module Interface.Float_printer.Provider_interface.S with type t = a))) + ~trait:Test_interfaces.Float_printer.Provider_interface.Float_printer + : (module Test_interfaces.Float_printer.Provider_interface.S with type t = a))) handler; require_equal [%here] @@ -74,7 +74,7 @@ let%expect_test "override" = (Option.is_some (Provider.Handler.lookup_opt handler - ~trait:Interface.Int_printer.Provider_interface.Int_printer)); + ~trait:Test_interfaces.Int_printer.Provider_interface.Int_printer)); require_equal [%here] (module Cache_state) @@ -87,7 +87,7 @@ let%expect_test "override" = (Option.is_some (Provider.Handler.lookup_opt handler - ~trait:Interface.Float_printer.Provider_interface.Float_printer)); + ~trait:Test_interfaces.Float_printer.Provider_interface.Float_printer)); require_equal [%here] (module Cache_state) @@ -100,7 +100,7 @@ let%expect_test "override" = [%here] (Provider.Handler.implements handler - ~trait:Interface.Int_printer.Provider_interface.Int_printer); + ~trait:Test_interfaces.Int_printer.Provider_interface.Int_printer); let post_cache_state = cache_state handler in require_equal [%here] (module Cache_state) pre_cache_state post_cache_state in @@ -110,7 +110,7 @@ let%expect_test "override" = [%here] (Provider.Handler.implements handler - ~trait:Interface.Float_printer.Provider_interface.Float_printer); + ~trait:Test_interfaces.Float_printer.Provider_interface.Float_printer); let post_cache_state = cache_state handler in require_equal [%here] (module Cache_state) pre_cache_state post_cache_state in diff --git a/test/test__introspection.ml b/test/test__introspection.ml index 73f84c3..5019eb4 100644 --- a/test/test__introspection.ml +++ b/test/test__introspection.ml @@ -17,14 +17,18 @@ let print_implements (Provider.T { t = _; handler }) = [%sexp { implements = { file_reader = - (implements Interface.File_reader.Provider_interface.File_reader : bool) + (implements Test_interfaces.File_reader.Provider_interface.File_reader + : bool) ; directory_reader = - (implements Interface.Directory_reader.Provider_interface.Directory_reader + (implements + Test_interfaces.Directory_reader.Provider_interface.Directory_reader : bool) ; int_printer = - (implements Interface.Int_printer.Provider_interface.Int_printer : bool) + (implements Test_interfaces.Int_printer.Provider_interface.Int_printer + : bool) ; float_printer = - (implements Interface.Float_printer.Provider_interface.Float_printer : bool) + (implements Test_interfaces.Float_printer.Provider_interface.Float_printer + : bool) } }] ;; @@ -40,8 +44,8 @@ let%expect_test "introspection" = (int_printer false) (float_printer false)))) |}]; - let int_printer = Providers.Int_printer.make () in - let num_printer = Providers.Num_printer.make () in + let int_printer = Test_providers.Int_printer.make () in + let num_printer = Test_providers.Num_printer.make () in print_implements num_printer; [%expect {| @@ -79,19 +83,13 @@ let%expect_test "introspection" = Ref.set_temporarily Provider.Trait.Info.sexp_of_id sexp_of_id ~f:(fun () -> print_implemented_traits int_printer; [%expect - {| - (( - (id 0) - (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) - |}]; + {| (((id 0) (name Test_interfaces.Int_printer.Provider_interface.Int_printer))) |}]; print_implemented_traits num_printer; [%expect {| - (((id 1) - (name - Provider_test__Interface__Float_printer.Provider_interface.Float_printer)) - ((id 0) - (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) + (((id 0) (name Test_interfaces.Int_printer.Provider_interface.Int_printer)) + ((id 1) + (name Test_interfaces.Float_printer.Provider_interface.Float_printer))) |}]; ()); () diff --git a/test/test__invalid_tags.ml b/test/test__invalid_tags.ml index 7ed4a24..3ac6832 100644 --- a/test/test__invalid_tags.ml +++ b/test/test__invalid_tags.ml @@ -3,9 +3,9 @@ runtime. *) let%expect_test "invalid tags" = - (* [Providers.Num_printer] was correctly built. *) - let print_42 printer = Interface.Int_printer.print printer 42 in - print_42 (Providers.Num_printer.make ()); + (* [Test_providers.Num_printer] was correctly built. *) + let print_42 printer = Test_interfaces.Int_printer.print printer 42 in + print_42 (Test_providers.Num_printer.make ()); [%expect {| 42 |}]; (* Now let's build a provider with an empty interface, that claims however to implement the [Int_printer] interface. *) @@ -21,7 +21,7 @@ let%expect_test "invalid tags" = ("Trait not implemented" (( trait_info ( (id #id) - (name - Provider_test__Interface__Int_printer.Provider_interface.Int_printer))))) |}]; + (name Test_interfaces.Int_printer.Provider_interface.Int_printer))))) + |}]; () ;; diff --git a/test/test__make_handler.ml b/test/test__make_handler.ml index 55410fe..e12f2d5 100644 --- a/test/test__make_handler.ml +++ b/test/test__make_handler.ml @@ -5,8 +5,8 @@ interface creation. *) let%expect_test "int-printer" = - let printer = Providers.Int_printer.make () in - Interface.Int_printer.print printer 123_456_789; + let printer = Test_providers.Int_printer.make () in + Test_interfaces.Int_printer.print printer 123_456_789; [%expect {| 123456789 |}]; () ;; @@ -14,17 +14,18 @@ let%expect_test "int-printer" = let%expect_test "make interface" = let binding1 = Provider.Trait.implement - Interface.Int_printer.Provider_interface.Int_printer - ~impl:(module Providers.Num_printer.Impl) + Test_interfaces.Int_printer.Provider_interface.Int_printer + ~impl:(module Test_providers.Num_printer.Impl) in - Interface.Int_printer.print + Test_interfaces.Int_printer.print (Provider.T { t = (); handler = Provider.Handler.make [ binding1 ] }) 1234; [%expect {| 1234 |}]; let num1 = - Interface.Int_printer.Provider_interface.make (module Providers.Num_printer.Impl) + Test_interfaces.Int_printer.Provider_interface.make + (module Test_providers.Num_printer.Impl) in - Interface.Int_printer.print (Provider.T { t = (); handler = num1 }) 5678; + Test_interfaces.Int_printer.print (Provider.T { t = (); handler = num1 }) 5678; [%expect {| 5678 |}]; (match binding1, List.hd_exn (Provider.Handler.bindings num1) with | T t, T t' -> @@ -33,8 +34,8 @@ let%expect_test "make interface" = ()); let binding2 = Provider.Trait.implement - Interface.Float_printer.Provider_interface.Float_printer - ~impl:(module Providers.Num_printer.Impl) + Test_interfaces.Float_printer.Provider_interface.Float_printer + ~impl:(module Test_providers.Num_printer.Impl) in (match binding1, binding2 with | T t1, T t2 -> @@ -46,12 +47,10 @@ let%expect_test "make interface" = [%expect {| ((trait1 ( - (id #id) - (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) + (id #id) (name Test_interfaces.Int_printer.Provider_interface.Int_printer))) (trait2 ( (id #id) - (name - Provider_test__Interface__Float_printer.Provider_interface.Float_printer)))) + (name Test_interfaces.Float_printer.Provider_interface.Float_printer)))) |}]; require [%here] (not (Provider.Trait.same t1.trait t2.trait)); [%expect {||}]; diff --git a/test/test__override.ml b/test/test__override.ml index 981cbdd..3e7c3e5 100644 --- a/test/test__override.ml +++ b/test/test__override.ml @@ -12,10 +12,10 @@ module Int_hum_printer = struct { t = () ; handler = Provider.Handler.extend - Providers.Num_printer.handler + Test_providers.Num_printer.handler ~with_: [ Provider.Trait.implement - Interface.Int_printer.Provider_interface.Int_printer + Test_interfaces.Int_printer.Provider_interface.Int_printer ~impl:(module Impl) ] } @@ -31,18 +31,17 @@ let%expect_test "override" = print_s [%sexp (info : Sexp.t list)] in let test printer = - Interface.Int_printer.print printer 1234; - Interface.Float_printer.print printer 1234.5678 + Test_interfaces.Int_printer.print printer 1234; + Test_interfaces.Float_printer.print printer 1234.5678 in - let num_printer = Providers.Num_printer.make () in + let num_printer = Test_providers.Num_printer.make () in print_implemented_traits num_printer; [%expect {| - (((id #id) - (name - Provider_test__Interface__Float_printer.Provider_interface.Float_printer)) - ((id #id) - (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) |}]; + (((id #id) (name Test_interfaces.Int_printer.Provider_interface.Int_printer)) + ((id #id) + (name Test_interfaces.Float_printer.Provider_interface.Float_printer))) + |}]; test num_printer; [%expect {| 1234 @@ -51,11 +50,10 @@ let%expect_test "override" = print_implemented_traits hum_printer; [%expect {| - (((id #id) - (name - Provider_test__Interface__Float_printer.Provider_interface.Float_printer)) - ((id #id) - (name Provider_test__Interface__Int_printer.Provider_interface.Int_printer))) |}]; + (((id #id) (name Test_interfaces.Int_printer.Provider_interface.Int_printer)) + ((id #id) + (name Test_interfaces.Float_printer.Provider_interface.Float_printer))) + |}]; test hum_printer; (* Now there's an additional underscore separator in '1_234'. *) [%expect {| diff --git a/test/test__reader.ml b/test/test__reader.ml index 702f58d..3a1bc22 100644 --- a/test/test__reader.ml +++ b/test/test__reader.ml @@ -25,7 +25,7 @@ let with_temp_dir ~env ~path ~f = let print_all_text_files t ~path = print_s [%sexp - (Interface.Directory_reader.find_files_with_extension t ~path ~ext:".txt" + (Test_interfaces.Directory_reader.find_files_with_extension t ~path ~ext:".txt" : string list)] ;; @@ -33,10 +33,10 @@ let print_all_text_files t ~path = capabilities. *) let print_all_text_files_with_lines t ~path = List.iter - (Interface.Directory_reader.find_files_with_extension t ~path ~ext:".txt") + (Test_interfaces.Directory_reader.find_files_with_extension t ~path ~ext:".txt") ~f:(fun file -> let lines = - let contents = Interface.File_reader.load t ~path:(path ^ "/" ^ file) in + let contents = Test_interfaces.File_reader.load t ~path:(path ^ "/" ^ file) in List.sum (module Int) (String.split_lines contents) ~f:(Fn.const 1) in print_s [%sexp { file : string; lines : int }]) @@ -47,14 +47,14 @@ let print_all_text_files_with_lines t ~path = requiring it. *) let print_all_text_files_with_lines_if_available t ~path = List.iter - (Interface.Directory_reader.find_files_with_extension t ~path ~ext:".txt") + (Test_interfaces.Directory_reader.find_files_with_extension t ~path ~ext:".txt") ~f:(fun file -> let lines = let (Provider.T { t; handler }) = t in match Provider.Handler.lookup_opt handler - ~trait:Interface.File_reader.Provider_interface.File_reader + ~trait:Test_interfaces.File_reader.Provider_interface.File_reader with | None -> "not-available" | Some (module File_reader) -> @@ -67,16 +67,18 @@ let print_all_text_files_with_lines_if_available t ~path = (* Now let's put it all together in a test. *) let%expect_test "test" = - let unix_reader = Providers.Unix_reader.make () in + let unix_reader = Test_providers.Unix_reader.make () in Eio_main.run @@ fun env -> - let eio_reader = Providers.Eio_reader.make ~env in + let eio_reader = Test_providers.Eio_reader.make ~env in with_temp_dir ~env ~path:"test" ~f:(fun dir -> print_s - [%sexp (Interface.Directory_reader.readdir unix_reader ~path:dir : string list)]; + [%sexp + (Test_interfaces.Directory_reader.readdir unix_reader ~path:dir : string list)]; [%expect {| () |}]; print_s - [%sexp (Interface.Directory_reader.readdir eio_reader ~path:dir : string list)]; + [%sexp + (Test_interfaces.Directory_reader.readdir eio_reader ~path:dir : string list)]; [%expect {| () |}]; print_all_text_files unix_reader ~path:dir; [%expect {| () |}]; diff --git a/test/interface/directory_reader.ml b/test/test_interfaces/directory_reader.ml similarity index 100% rename from test/interface/directory_reader.ml rename to test/test_interfaces/directory_reader.ml diff --git a/test/interface/directory_reader.mli b/test/test_interfaces/directory_reader.mli similarity index 100% rename from test/interface/directory_reader.mli rename to test/test_interfaces/directory_reader.mli diff --git a/test/test_interfaces/dune b/test/test_interfaces/dune new file mode 100644 index 0000000..1c0eb8d --- /dev/null +++ b/test/test_interfaces/dune @@ -0,0 +1,36 @@ +(library + (name test_interfaces) + (public_name provider-tests.test_interfaces) + (inline_tests) + (flags + :standard + -w + +a-4-40-41-42-44-45-48-66 + -warn-error + +a + -open + Base + -open + Expect_test_helpers_base) + (libraries + base + eio + eio_main + expect_test_helpers_core.expect_test_helpers_base + provider + unix) + (instrumentation + (backend bisect_ppx)) + (lint + (pps ppx_js_style -check-doc-comments)) + (preprocess + (pps + -unused-code-warnings=force + ppx_compare + ppx_enumerate + ppx_expect + ppx_hash + ppx_here + ppx_let + ppx_sexp_conv + ppx_sexp_value))) diff --git a/test/interface/file_reader.ml b/test/test_interfaces/file_reader.ml similarity index 100% rename from test/interface/file_reader.ml rename to test/test_interfaces/file_reader.ml diff --git a/test/interface/file_reader.mli b/test/test_interfaces/file_reader.mli similarity index 100% rename from test/interface/file_reader.mli rename to test/test_interfaces/file_reader.mli diff --git a/test/interface/float_printer.ml b/test/test_interfaces/float_printer.ml similarity index 100% rename from test/interface/float_printer.ml rename to test/test_interfaces/float_printer.ml diff --git a/test/interface/float_printer.mli b/test/test_interfaces/float_printer.mli similarity index 100% rename from test/interface/float_printer.mli rename to test/test_interfaces/float_printer.mli diff --git a/test/interface/int_printer.ml b/test/test_interfaces/int_printer.ml similarity index 100% rename from test/interface/int_printer.ml rename to test/test_interfaces/int_printer.ml diff --git a/test/interface/int_printer.mli b/test/test_interfaces/int_printer.mli similarity index 100% rename from test/interface/int_printer.mli rename to test/test_interfaces/int_printer.mli diff --git a/test/test_providers/dune b/test/test_providers/dune new file mode 100644 index 0000000..f1de9ca --- /dev/null +++ b/test/test_providers/dune @@ -0,0 +1,37 @@ +(library + (name test_providers) + (public_name provider-tests.test_providers) + (inline_tests) + (flags + :standard + -w + +a-4-40-41-42-44-45-48-66 + -warn-error + +a + -open + Base + -open + Expect_test_helpers_base) + (libraries + base + eio + eio_main + expect_test_helpers_core.expect_test_helpers_base + test_interfaces + provider + unix) + (instrumentation + (backend bisect_ppx)) + (lint + (pps ppx_js_style -check-doc-comments)) + (preprocess + (pps + -unused-code-warnings=force + ppx_compare + ppx_enumerate + ppx_expect + ppx_hash + ppx_here + ppx_let + ppx_sexp_conv + ppx_sexp_value))) diff --git a/test/providers/eio_reader.ml b/test/test_providers/eio_reader.ml similarity index 78% rename from test/providers/eio_reader.ml rename to test/test_providers/eio_reader.ml index 9bf28ac..869941c 100644 --- a/test/providers/eio_reader.ml +++ b/test/test_providers/eio_reader.ml @@ -17,10 +17,10 @@ let make ~env : [ `Directory_reader | `File_reader ] Provider.t = ; handler = Provider.Handler.make [ Provider.Trait.implement - Interface.Directory_reader.Provider_interface.Directory_reader + Test_interfaces.Directory_reader.Provider_interface.Directory_reader ~impl:(module Impl) ; Provider.Trait.implement - Interface.File_reader.Provider_interface.File_reader + Test_interfaces.File_reader.Provider_interface.File_reader ~impl:(module Impl) ] } diff --git a/test/providers/eio_reader.mli b/test/test_providers/eio_reader.mli similarity index 83% rename from test/providers/eio_reader.mli rename to test/test_providers/eio_reader.mli index 4c8052e..81688ca 100644 --- a/test/providers/eio_reader.mli +++ b/test/test_providers/eio_reader.mli @@ -18,7 +18,7 @@ type t {!module:Interface.File_reader}. *) val make : env:< fs : _ Eio.Path.t ; .. > - -> [ Interface.Directory_reader.tag | Interface.File_reader.tag ] Provider.t + -> [ Test_interfaces.Directory_reader.tag | Test_interfaces.File_reader.tag ] Provider.t (** In this specific example, we chose to expose the signature of the provider's implementation. This is not something that is usually required, since @@ -28,6 +28,6 @@ val make module Impl : sig type nonrec t = t - include Interface.Directory_reader.Provider_interface.S with type t := t - include Interface.File_reader.Provider_interface.S with type t := t + include Test_interfaces.Directory_reader.Provider_interface.S with type t := t + include Test_interfaces.File_reader.Provider_interface.S with type t := t end diff --git a/test/providers/int_printer.ml b/test/test_providers/int_printer.ml similarity index 81% rename from test/providers/int_printer.ml rename to test/test_providers/int_printer.ml index 60642c6..a805ea6 100644 --- a/test/providers/int_printer.ml +++ b/test/test_providers/int_printer.ml @@ -9,7 +9,7 @@ include Impl let handler : (unit, [ `Int_printer ]) Provider.Handler.t = Provider.Handler.make (List.concat - [ Interface.Int_printer.Provider_interface.make (module Impl) + [ Test_interfaces.Int_printer.Provider_interface.make (module Impl) |> Provider.Handler.bindings ]) ;; diff --git a/test/providers/int_printer.mli b/test/test_providers/int_printer.mli similarity index 51% rename from test/providers/int_printer.mli rename to test/test_providers/int_printer.mli index 531ec86..10b66c2 100644 --- a/test/providers/int_printer.mli +++ b/test/test_providers/int_printer.mli @@ -1,11 +1,11 @@ -(** [Int_printer] is a provider for the {!module:Interface.Int_printer} interface. +(** [Int_printer] is a provider for {!module:Test_interfaces.Int_printer}. The structure of this file is very similar to the [Eio_reader] module, thus is not documented in details. Refer to {!Eio_reader} for more. - We use it as an alternate to [Num_printer], which is able to print both ints and floats - to demonstrate cases involving subtyping. *) + We use it as an alternate to [Num_printer], which is able to print both + integers and floats to demonstrate cases involving sub typing. *) type t = unit -val make : t -> Interface.Int_printer.tag Provider.t +val make : t -> Test_interfaces.Int_printer.tag Provider.t diff --git a/test/providers/num_printer.ml b/test/test_providers/num_printer.ml similarity index 74% rename from test/providers/num_printer.ml rename to test/test_providers/num_printer.ml index 9e447e9..1996392 100644 --- a/test/providers/num_printer.ml +++ b/test/test_providers/num_printer.ml @@ -10,9 +10,9 @@ include Impl let handler : (unit, [ `Int_printer | `Float_printer ]) Provider.Handler.t = Provider.Handler.make (List.concat - [ Interface.Int_printer.Provider_interface.make (module Impl) + [ Test_interfaces.Int_printer.Provider_interface.make (module Impl) |> Provider.Handler.bindings - ; Interface.Float_printer.Provider_interface.make (module Impl) + ; Test_interfaces.Float_printer.Provider_interface.make (module Impl) |> Provider.Handler.bindings ]) ;; diff --git a/test/providers/num_printer.mli b/test/test_providers/num_printer.mli similarity index 62% rename from test/providers/num_printer.mli rename to test/test_providers/num_printer.mli index 9d72669..1b5df1c 100644 --- a/test/providers/num_printer.mli +++ b/test/test_providers/num_printer.mli @@ -1,5 +1,5 @@ -(** [Num_printer] is a provider for the {!module:Interface.Int_printer} and - {!module:Interface.Float_printer} interfaces. +(** [Num_printer] is a provider for the {!module:Test_interfaces.Int_printer} + and {!module:Test_interfaces.Float_printer} interfaces. The structure of this file is very similar to the [Eio_reader] module, thus is not documented in details. Refer to {!Eio_reader} for more. *) @@ -9,10 +9,14 @@ type t = unit val handler - : (t, [ Interface.Int_printer.tag | Interface.Float_printer.tag ]) Provider.Handler.t + : ( t + , [ Test_interfaces.Int_printer.tag | Test_interfaces.Float_printer.tag ] ) + Provider.Handler.t (** If you simply wish to use this provider without overrides, use [make ()]. *) -val make : t -> [ Interface.Int_printer.tag | Interface.Float_printer.tag ] Provider.t +val make + : t + -> [ Test_interfaces.Int_printer.tag | Test_interfaces.Float_printer.tag ] Provider.t (** In this specific example, we chose to expose the signature of the provider's implementation. This is not something that is usually required, since @@ -22,6 +26,6 @@ val make : t -> [ Interface.Int_printer.tag | Interface.Float_printer.tag ] Prov module Impl : sig type nonrec t = t - include Interface.Int_printer.Provider_interface.S with type t := t - include Interface.Float_printer.Provider_interface.S with type t := t + include Test_interfaces.Int_printer.Provider_interface.S with type t := t + include Test_interfaces.Float_printer.Provider_interface.S with type t := t end diff --git a/test/providers/unix_reader.ml b/test/test_providers/unix_reader.ml similarity index 68% rename from test/providers/unix_reader.ml rename to test/test_providers/unix_reader.ml index 685d720..be9d21e 100644 --- a/test/providers/unix_reader.ml +++ b/test/test_providers/unix_reader.ml @@ -10,5 +10,7 @@ include Impl let make () : [ `Directory_reader ] Provider.t = Provider.T - { t = (); handler = Interface.Directory_reader.Provider_interface.make (module Impl) } + { t = () + ; handler = Test_interfaces.Directory_reader.Provider_interface.make (module Impl) + } ;; diff --git a/test/providers/unix_reader.mli b/test/test_providers/unix_reader.mli similarity index 58% rename from test/providers/unix_reader.mli rename to test/test_providers/unix_reader.mli index 8006b10..bbb693b 100644 --- a/test/providers/unix_reader.mli +++ b/test/test_providers/unix_reader.mli @@ -1,13 +1,13 @@ -(** [Unix_reader] is a provider for the {!module:Interface.Directory_reader} - interface based on [Unix]. +(** [Unix_reader] is a provider for {!module:Test_interfaces.Directory_reader} + based on [Unix]. It is meant to demonstrate how to illustrate how multiple providers may be implemented the same interfaces. {!module:Eio_reader} is another provider - for the {!module:Interface.Directory_reader} interface. + for the {!module:Test_interfaces.Directory_reader} interface. The structure of this file is very similar to the [Eio_reader] module, thus is not documented in details. Refer to {!Eio_reader} for more. *) type t = unit -val make : t -> Interface.Directory_reader.tag Provider.t +val make : t -> Test_interfaces.Directory_reader.tag Provider.t From e7622e82a6b997d6ff13768e05b262b68fdf3566 Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 18:24:06 +0100 Subject: [PATCH 07/12] Extract eio base tests into standalone directory --- test/dune | 2 - test/eio/dune | 39 ++++++++++++++++++++ test/{ => eio}/test__reader.ml | 2 +- test/{ => eio}/test__reader.mli | 0 test/eio/test_providers/dune | 36 ++++++++++++++++++ test/{ => eio}/test_providers/eio_reader.ml | 0 test/{ => eio}/test_providers/eio_reader.mli | 0 test/test_interfaces/dune | 8 +--- test/test_providers/dune | 2 - 9 files changed, 77 insertions(+), 12 deletions(-) create mode 100644 test/eio/dune rename test/{ => eio}/test__reader.ml (98%) rename test/{ => eio}/test__reader.mli (100%) create mode 100644 test/eio/test_providers/dune rename test/{ => eio}/test_providers/eio_reader.ml (100%) rename test/{ => eio}/test_providers/eio_reader.mli (100%) diff --git a/test/dune b/test/dune index e561aff..150fb43 100644 --- a/test/dune +++ b/test/dune @@ -14,8 +14,6 @@ Expect_test_helpers_base) (libraries base - eio - eio_main expect_test_helpers_core.expect_test_helpers_base provider test_interfaces diff --git a/test/eio/dune b/test/eio/dune new file mode 100644 index 0000000..16dea84 --- /dev/null +++ b/test/eio/dune @@ -0,0 +1,39 @@ +(library + (name provider_test_eio) + (public_name provider-tests.provider_test_eio) + (inline_tests) + (flags + :standard + -w + +a-4-40-41-42-44-45-48-66 + -warn-error + +a + -open + Base + -open + Expect_test_helpers_base) + (libraries + base + eio + eio_main + eio_test_providers + expect_test_helpers_core.expect_test_helpers_base + provider + test_interfaces + test_providers + unix) + (instrumentation + (backend bisect_ppx)) + (lint + (pps ppx_js_style -check-doc-comments)) + (preprocess + (pps + -unused-code-warnings=force + ppx_compare + ppx_enumerate + ppx_expect + ppx_hash + ppx_here + ppx_let + ppx_sexp_conv + ppx_sexp_value))) diff --git a/test/test__reader.ml b/test/eio/test__reader.ml similarity index 98% rename from test/test__reader.ml rename to test/eio/test__reader.ml index 3a1bc22..55caab9 100644 --- a/test/test__reader.ml +++ b/test/eio/test__reader.ml @@ -70,7 +70,7 @@ let%expect_test "test" = let unix_reader = Test_providers.Unix_reader.make () in Eio_main.run @@ fun env -> - let eio_reader = Test_providers.Eio_reader.make ~env in + let eio_reader = Eio_test_providers.Eio_reader.make ~env in with_temp_dir ~env ~path:"test" ~f:(fun dir -> print_s [%sexp diff --git a/test/test__reader.mli b/test/eio/test__reader.mli similarity index 100% rename from test/test__reader.mli rename to test/eio/test__reader.mli diff --git a/test/eio/test_providers/dune b/test/eio/test_providers/dune new file mode 100644 index 0000000..2e32620 --- /dev/null +++ b/test/eio/test_providers/dune @@ -0,0 +1,36 @@ +(library + (name eio_test_providers) + (public_name provider-tests.eio_test_providers) + (inline_tests) + (flags + :standard + -w + +a-4-40-41-42-44-45-48-66 + -warn-error + +a + -open + Base + -open + Expect_test_helpers_base) + (libraries + base + eio + expect_test_helpers_core.expect_test_helpers_base + test_interfaces + provider + unix) + (instrumentation + (backend bisect_ppx)) + (lint + (pps ppx_js_style -check-doc-comments)) + (preprocess + (pps + -unused-code-warnings=force + ppx_compare + ppx_enumerate + ppx_expect + ppx_hash + ppx_here + ppx_let + ppx_sexp_conv + ppx_sexp_value))) diff --git a/test/test_providers/eio_reader.ml b/test/eio/test_providers/eio_reader.ml similarity index 100% rename from test/test_providers/eio_reader.ml rename to test/eio/test_providers/eio_reader.ml diff --git a/test/test_providers/eio_reader.mli b/test/eio/test_providers/eio_reader.mli similarity index 100% rename from test/test_providers/eio_reader.mli rename to test/eio/test_providers/eio_reader.mli diff --git a/test/test_interfaces/dune b/test/test_interfaces/dune index 1c0eb8d..070bfc7 100644 --- a/test/test_interfaces/dune +++ b/test/test_interfaces/dune @@ -12,13 +12,7 @@ Base -open Expect_test_helpers_base) - (libraries - base - eio - eio_main - expect_test_helpers_core.expect_test_helpers_base - provider - unix) + (libraries base expect_test_helpers_core.expect_test_helpers_base provider) (instrumentation (backend bisect_ppx)) (lint diff --git a/test/test_providers/dune b/test/test_providers/dune index f1de9ca..182efd2 100644 --- a/test/test_providers/dune +++ b/test/test_providers/dune @@ -14,8 +14,6 @@ Expect_test_helpers_base) (libraries base - eio - eio_main expect_test_helpers_core.expect_test_helpers_base test_interfaces provider From 4808dc5ebb427b26a3f36f3fabcc056d384c2c73 Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 18:29:11 +0100 Subject: [PATCH 08/12] Move some test and doc targets to a new package --- doc/docs/reference/dune | 2 +- doc/docs/tutorials/getting-started/dune | 2 +- doc/docs/tutorials/handler-explicit/dune | 2 +- dune-project | 54 ++++++++++++++++++++++++ provider-dev.opam | 51 ++++++++++++++++++++++ provider-tests.opam | 8 ---- test/eio/dune | 2 +- test/eio/test_providers/dune | 2 +- 8 files changed, 110 insertions(+), 13 deletions(-) create mode 100644 provider-dev.opam diff --git a/doc/docs/reference/dune b/doc/docs/reference/dune index 611baea..698f949 100644 --- a/doc/docs/reference/dune +++ b/doc/docs/reference/dune @@ -1,5 +1,5 @@ (mdx - (package provider-tests) + (package provider-dev) (deps (package provider) (glob_files *.txt)) diff --git a/doc/docs/tutorials/getting-started/dune b/doc/docs/tutorials/getting-started/dune index 611baea..698f949 100644 --- a/doc/docs/tutorials/getting-started/dune +++ b/doc/docs/tutorials/getting-started/dune @@ -1,5 +1,5 @@ (mdx - (package provider-tests) + (package provider-dev) (deps (package provider) (glob_files *.txt)) diff --git a/doc/docs/tutorials/handler-explicit/dune b/doc/docs/tutorials/handler-explicit/dune index 611baea..698f949 100644 --- a/doc/docs/tutorials/handler-explicit/dune +++ b/doc/docs/tutorials/handler-explicit/dune @@ -1,5 +1,5 @@ (mdx - (package provider-tests) + (package provider-dev) (deps (package provider) (glob_files *.txt)) diff --git a/dune-project b/dune-project index cb39510..e1a4296 100644 --- a/dune-project +++ b/dune-project @@ -31,6 +31,58 @@ (package (name provider-tests) (synopsis "Tests for provider") + (depends + (ocaml + (>= 5.2)) + (base + (and + (>= v0.17) + (< v0.18))) + (expect_test_helpers_core + (and + (>= v0.17) + (< v0.18))) + (ppx_compare + (and + (>= v0.17) + (< v0.18))) + (ppx_enumerate + (and + (>= v0.17) + (< v0.18))) + (ppx_expect + (and + (>= v0.17) + (< v0.18))) + (ppx_hash + (and + (>= v0.17) + (< v0.18))) + (ppx_here + (and + (>= v0.17) + (< v0.18))) + (ppx_let + (and + (>= v0.17) + (< v0.18))) + (ppx_sexp_conv + (and + (>= v0.17) + (< v0.18))) + (ppx_sexp_value + (and + (>= v0.17) + (< v0.18))) + (ppxlib + (>= 0.33)) + (provider + (= :version)))) + +(package + (name provider-dev) + (synopsis + "Package to regroup dev targets for the provider project, documentation, etc.") (depends (ocaml (>= 5.2)) @@ -101,6 +153,8 @@ (>= 0.33)) (provider (= :version)) + (provider-tests + (= :version)) (sherlodoc (and :with-doc diff --git a/provider-dev.opam b/provider-dev.opam new file mode 100644 index 0000000..007cf33 --- /dev/null +++ b/provider-dev.opam @@ -0,0 +1,51 @@ +# This file is generated by dune, edit dune-project instead +opam-version: "2.0" +synopsis: + "Package to regroup dev targets for the provider project, documentation, etc." +maintainer: ["Mathieu Barbin "] +authors: ["Mathieu Barbin"] +license: "ISC" +homepage: "https://github.com/mbarbin/provider" +doc: "https://mbarbin.github.io/provider/" +bug-reports: "https://github.com/mbarbin/provider/issues" +depends: [ + "dune" {>= "3.16"} + "ocaml" {>= "5.2"} + "ocamlformat" {with-dev-setup & = "0.26.2"} + "base" {>= "v0.17" & < "v0.18"} + "bisect_ppx" {with-dev-setup & >= "2.8.3"} + "eio" {>= "1.0"} + "eio_main" {>= "1.0"} + "expect_test_helpers_core" {>= "v0.17" & < "v0.18"} + "higher_kinded" {>= "v0.17" & < "v0.18"} + "mdx" {>= "2.4"} + "ppx_compare" {>= "v0.17" & < "v0.18"} + "ppx_enumerate" {>= "v0.17" & < "v0.18"} + "ppx_expect" {>= "v0.17" & < "v0.18"} + "ppx_hash" {>= "v0.17" & < "v0.18"} + "ppx_here" {>= "v0.17" & < "v0.18"} + "ppx_js_style" {with-dev-setup & >= "v0.17" & < "v0.18"} + "ppx_let" {>= "v0.17" & < "v0.18"} + "ppx_sexp_conv" {>= "v0.17" & < "v0.18"} + "ppx_sexp_value" {>= "v0.17" & < "v0.18"} + "ppxlib" {>= "0.33"} + "provider" {= version} + "provider-tests" {= version} + "sherlodoc" {with-doc & >= "0.2"} + "odoc" {with-doc} +] +build: [ + ["dune" "subst"] {dev} + [ + "dune" + "build" + "-p" + name + "-j" + jobs + "@install" + "@runtest" {with-test} + "@doc" {with-doc} + ] +] +dev-repo: "git+https://github.com/mbarbin/provider.git" diff --git a/provider-tests.opam b/provider-tests.opam index 63ddc83..b400881 100644 --- a/provider-tests.opam +++ b/provider-tests.opam @@ -10,26 +10,18 @@ bug-reports: "https://github.com/mbarbin/provider/issues" depends: [ "dune" {>= "3.16"} "ocaml" {>= "5.2"} - "ocamlformat" {with-dev-setup & = "0.26.2"} "base" {>= "v0.17" & < "v0.18"} - "bisect_ppx" {with-dev-setup & >= "2.8.3"} - "eio" {>= "1.0"} - "eio_main" {>= "1.0"} "expect_test_helpers_core" {>= "v0.17" & < "v0.18"} - "higher_kinded" {>= "v0.17" & < "v0.18"} - "mdx" {>= "2.4"} "ppx_compare" {>= "v0.17" & < "v0.18"} "ppx_enumerate" {>= "v0.17" & < "v0.18"} "ppx_expect" {>= "v0.17" & < "v0.18"} "ppx_hash" {>= "v0.17" & < "v0.18"} "ppx_here" {>= "v0.17" & < "v0.18"} - "ppx_js_style" {with-dev-setup & >= "v0.17" & < "v0.18"} "ppx_let" {>= "v0.17" & < "v0.18"} "ppx_sexp_conv" {>= "v0.17" & < "v0.18"} "ppx_sexp_value" {>= "v0.17" & < "v0.18"} "ppxlib" {>= "0.33"} "provider" {= version} - "sherlodoc" {with-doc & >= "0.2"} "odoc" {with-doc} ] build: [ diff --git a/test/eio/dune b/test/eio/dune index 16dea84..28a4f02 100644 --- a/test/eio/dune +++ b/test/eio/dune @@ -1,6 +1,6 @@ (library (name provider_test_eio) - (public_name provider-tests.provider_test_eio) + (public_name provider-dev.provider_test_eio) (inline_tests) (flags :standard diff --git a/test/eio/test_providers/dune b/test/eio/test_providers/dune index 2e32620..3073290 100644 --- a/test/eio/test_providers/dune +++ b/test/eio/test_providers/dune @@ -1,6 +1,6 @@ (library (name eio_test_providers) - (public_name provider-tests.eio_test_providers) + (public_name provider-dev.eio_test_providers) (inline_tests) (flags :standard From 80429513a453934df677770dd6516dd6f5e08962 Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 18:36:00 +0100 Subject: [PATCH 09/12] Relax lower bound for JS packages (targeting 4.14 compatibility) --- dune-project | 24 ++++++++++++------------ provider-tests.opam | 22 +++++++++++----------- provider.opam | 2 +- 3 files changed, 24 insertions(+), 24 deletions(-) diff --git a/dune-project b/dune-project index e1a4296..b4c8716 100644 --- a/dune-project +++ b/dune-project @@ -25,7 +25,7 @@ (>= 4.14)) (sexplib0 (and - (>= v0.17) + (>= v0.16) (< v0.18))))) (package @@ -33,46 +33,46 @@ (synopsis "Tests for provider") (depends (ocaml - (>= 5.2)) + (>= 4.14)) (base (and - (>= v0.17) + (>= v0.16) (< v0.18))) (expect_test_helpers_core (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppx_compare (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppx_enumerate (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppx_expect (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppx_hash (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppx_here (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppx_let (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppx_sexp_conv (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppx_sexp_value (and - (>= v0.17) + (>= v0.16) (< v0.18))) (ppxlib (>= 0.33)) diff --git a/provider-tests.opam b/provider-tests.opam index b400881..02f13d6 100644 --- a/provider-tests.opam +++ b/provider-tests.opam @@ -9,17 +9,17 @@ doc: "https://mbarbin.github.io/provider/" bug-reports: "https://github.com/mbarbin/provider/issues" depends: [ "dune" {>= "3.16"} - "ocaml" {>= "5.2"} - "base" {>= "v0.17" & < "v0.18"} - "expect_test_helpers_core" {>= "v0.17" & < "v0.18"} - "ppx_compare" {>= "v0.17" & < "v0.18"} - "ppx_enumerate" {>= "v0.17" & < "v0.18"} - "ppx_expect" {>= "v0.17" & < "v0.18"} - "ppx_hash" {>= "v0.17" & < "v0.18"} - "ppx_here" {>= "v0.17" & < "v0.18"} - "ppx_let" {>= "v0.17" & < "v0.18"} - "ppx_sexp_conv" {>= "v0.17" & < "v0.18"} - "ppx_sexp_value" {>= "v0.17" & < "v0.18"} + "ocaml" {>= "4.14"} + "base" {>= "v0.16" & < "v0.18"} + "expect_test_helpers_core" {>= "v0.16" & < "v0.18"} + "ppx_compare" {>= "v0.16" & < "v0.18"} + "ppx_enumerate" {>= "v0.16" & < "v0.18"} + "ppx_expect" {>= "v0.16" & < "v0.18"} + "ppx_hash" {>= "v0.16" & < "v0.18"} + "ppx_here" {>= "v0.16" & < "v0.18"} + "ppx_let" {>= "v0.16" & < "v0.18"} + "ppx_sexp_conv" {>= "v0.16" & < "v0.18"} + "ppx_sexp_value" {>= "v0.16" & < "v0.18"} "ppxlib" {>= "0.33"} "provider" {= version} "odoc" {with-doc} diff --git a/provider.opam b/provider.opam index 75d2d81..5932e0c 100644 --- a/provider.opam +++ b/provider.opam @@ -10,7 +10,7 @@ bug-reports: "https://github.com/mbarbin/provider/issues" depends: [ "dune" {>= "3.16"} "ocaml" {>= "4.14"} - "sexplib0" {>= "v0.17" & < "v0.18"} + "sexplib0" {>= "v0.16" & < "v0.18"} "odoc" {with-doc} ] build: [ From ff1b5b6b144423f1d1c3592d1bf57d2bd27835fa Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 18:36:14 +0100 Subject: [PATCH 10/12] Attempt to enable tests in more-ci --- .github/workflows/more-ci.yml | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/.github/workflows/more-ci.yml b/.github/workflows/more-ci.yml index 25d8fb1..ab97ea2 100644 --- a/.github/workflows/more-ci.yml +++ b/.github/workflows/more-ci.yml @@ -53,15 +53,10 @@ jobs: # janestreet-bleeding-external: https://github.com/janestreet/opam-repository.git#external-packages - name: Install dependencies - run: opam install ./provider.opam --deps-only --with-test + run: opam install ./provider.opam ./provider-tests.opam --deps-only --with-test - - name: Build - run: opam exec -- dune build @all -p provider - - # For now, we only run tests for the `provider` package. Effectively, this - # runs nothing because the tests are in the `provider-test` package. We - # configured this in preparation for running the tests for specific - # packages only in the future, once we have a dedicated test suite that - # can run on every matrix combination configured here. - - name: Run tests - run: opam exec -- dune build @runtest -p provider + # We build and run tests for a subset of packages. More tests are run in + # the development workflow and as part of the main CI job. These are the + # tests that are checked for every combination of os and ocaml-compiler. + - name: Build & Run tests + run: opam exec -- dune build @all @runtest -p provider,provider-tests From 7291c9de72ba3bc14b0a416f4a7ab47769d40632 Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 19:01:41 +0100 Subject: [PATCH 11/12] Move comment --- .github/workflows/more-ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/more-ci.yml b/.github/workflows/more-ci.yml index ab97ea2..6f8789e 100644 --- a/.github/workflows/more-ci.yml +++ b/.github/workflows/more-ci.yml @@ -52,11 +52,11 @@ jobs: # janestreet-bleeding: https://github.com/janestreet/opam-repository.git # janestreet-bleeding-external: https://github.com/janestreet/opam-repository.git#external-packages - - name: Install dependencies - run: opam install ./provider.opam ./provider-tests.opam --deps-only --with-test - # We build and run tests for a subset of packages. More tests are run in # the development workflow and as part of the main CI job. These are the # tests that are checked for every combination of os and ocaml-compiler. + - name: Install dependencies + run: opam install ./provider.opam ./provider-tests.opam --deps-only --with-test + - name: Build & Run tests run: opam exec -- dune build @all @runtest -p provider,provider-tests From ff5c57cb2bc76486fe626aafe778ad149b4d4b7a Mon Sep 17 00:00:00 2001 From: Mathieu Barbin Date: Sun, 27 Oct 2024 19:02:01 +0100 Subject: [PATCH 12/12] Disable failing windows-4.14 tests (cannot install core) --- .github/workflows/more-ci.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/more-ci.yml b/.github/workflows/more-ci.yml index 6f8789e..5e8549b 100644 --- a/.github/workflows/more-ci.yml +++ b/.github/workflows/more-ci.yml @@ -35,6 +35,9 @@ jobs: # We exclude the combination already tested in the 'ci' workflow. - os: ubuntu-latest ocaml-compiler: 5.2.x + # We exclude windows-4.14 - this fails when building core. + - os: windows-latest + ocaml-compiler: 4.14.x runs-on: ${{ matrix.os }}