diff --git a/otherlibs/dune-site/test/opam-uninstall.t b/otherlibs/dune-site/test/opam-uninstall.t new file mode 100644 index 000000000000..f75b0fb971a2 --- /dev/null +++ b/otherlibs/dune-site/test/opam-uninstall.t @@ -0,0 +1,97 @@ +Test an approximation of an OPAM install / uninstall of a plugin package + +This takes the sites-plugin.t blackbox test extracted from the manual and +changes its end to cover: +- dune install of both the application and its plugin, +- dune uninstall of the plugin, leaving an empty directory as OPAM would. + + $ cat > dune-project < (lang dune 3.8) + > (using dune_site 0.1) + > (name app) + > + > (package + > (name app) + > (sites (lib plugins))) + > EOF + + $ cat > dune < (executable + > (public_name app) + > (modules sites app) + > (libraries app.register dune-site dune-site.plugins)) + > + > (library + > (public_name app.register) + > (name registration) + > (modules registration)) + > + > (generate_sites_module + > (module sites) + > (plugins (app plugins))) + > EOF + + $ cat > registration.ml < let todo : (unit -> unit) Queue.t = Queue.create () + > EOF + + $ cat > app.ml < (* load all the available plugins *) + > let () = Sites.Plugins.Plugins.load_all () + > + > let () = print_endline "Main app starts..." + > (* Execute the code registered by the plugins *) + > let () = Queue.iter (fun f -> f ()) Registration.todo + > EOF + + + $ mkdir plugin + $ cat > plugin/dune-project < (lang dune 3.8) + > (using dune_site 0.1) + > + > (generate_opam_files true) + > + > (package + > (name plugin1)) + > EOF + + $ cat > plugin/dune < (library + > (public_name plugin1.plugin1_impl) + > (name plugin1_impl) + > (modules plugin1_impl) + > (libraries app.register)) + > + > (plugin + > (name plugin1) + > (libraries plugin1.plugin1_impl) + > (site (app plugins))) + > EOF + + $ cat > plugin/plugin1_impl.ml < let () = + > print_endline "Registration of Plugin1"; + > Queue.add (fun () -> print_endline "Plugin1 is doing something...") Registration.todo + > EOF + + $ dune build @install + $ dune install --prefix _install + + $ OCAMLPATH=_install/lib:$OCAMLPATH _install/bin/app + Registration of Plugin1 + Main app starts... + Plugin1 is doing something... + + $ dune uninstall --prefix _install plugin1 + +Unfortunately, the fact that the `lib/app/plugins/plugin1` directory should be +removed along with plugin1 is lost in the OPAM metadata, so we simulate this +issue by recreating this empty directory. + + $ mkdir -p _install/lib/app/plugins/plugin1 + + $ OCAMLPATH=_install/lib:$OCAMLPATH _install/bin/app + Fatal error: exception The plugin "plugin1" can't be found in the search paths "$TESTCASE_ROOT/_install/lib/app/plugins". + [2] +