(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)] ["." predicate]] [control ["." try] [concurrency ["." promise]] [security ["!" capability]] [parser ["." environment]]] [data ["." text ("#\." equivalence) ["%" format (#+ format)]] [collection ["." dictionary] ["." set]]] [math ["." random (#+ Random)]] [world ["." program] ["." file]]] ["." // #_ ["@." version] ["$/#" // #_ ["#." package] ["#." artifact] ["#." dependency #_ ["#/." resolution]]]] {#program ["." / ["/#" // #_ ["#." clean] ["/#" // #_ ["#" profile] ["#." action] ["#." pom] ["#." package] ["#." cache] ["#." artifact ["#/." type]] ["#." dependency ["#/." resolution] ["#/." status]] ["#." repository ["#/." origin]]]]]}) (def: #export test Test (<| (_.covering /._) (do random.monad [home (random.ascii/alpha 5) working_directory (random.ascii/alpha 5) dependee_artifact $///artifact.random depender_artifact (random.filter (predicate.complement (\ ///artifact.equivalence = dependee_artifact)) $///artifact.random) [_ dependee_package] $///package.random [_ depender_package] $///package.random #let [dependee {#///dependency.artifact dependee_artifact #///dependency.type ///artifact/type.lux_library} depender {#///dependency.artifact depender_artifact #///dependency.type ///artifact/type.lux_library} dependee_pom (|> (\ ///.monoid identity) (set@ #///.identity (#.Some dependee_artifact)) ///pom.write try.assume) depender_pom (|> (\ ///.monoid identity) (set@ #///.identity (#.Some depender_artifact)) (set@ #///.dependencies (set.from_list ///dependency.hash (list dependee))) ///pom.write try.assume) dependee_package (|> dependee_package (set@ #///package.origin (#///repository/origin.Remote "")) (set@ #///package.pom [dependee_pom #///dependency/status.Unverified])) depender_package (|> depender_package (set@ #///package.origin (#///repository/origin.Remote "")) (set@ #///package.pom [depender_pom #///dependency/status.Unverified])) fs (file.mock (\ file.default separator)) program (program.async (program.mock environment.empty home working_directory))]] (wrap (do promise.monad [verdict (do ///action.monad [#let [console (@version.echo "")] pre (|> ///dependency/resolution.empty (dictionary.put dependee dependee_package) (///cache.write_all program fs)) post (|> (\ ///.monoid identity) (set@ #///.dependencies (set.from_list ///dependency.hash (list dependee depender))) (/.do! program console fs (list (///repository.mock ($///dependency/resolution.single depender_artifact depender_package) [])))) logging! (\ ///action.monad map (text\= //clean.success) (!.use (\ console read_line) []))] (wrap (and logging! (and (set.member? pre dependee_artifact) (not (set.member? pre depender_artifact))) (and (dictionary.key? post dependee) (dictionary.key? post depender)))))] (_.cover' [/.do!] (try.default false verdict)))))))