(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)] ["." predicate]] [control ["." try] [concurrency ["." promise]] [security ["!" capability]]] [data ["." text ("#\." equivalence) ["%" format (#+ format)]] [collection ["." dictionary] ["." set]]] [math ["." random (#+ Random)]] [world ["." file]]] ["." // #_ ["@." version] ["$/#" // #_ ["#." package] ["#." artifact] ["#." dependency #_ ["#/." resolution]]]] {#program ["." / ["/#" // #_ ["#." clean] ["/#" // #_ ["#" profile] ["#." action] ["#." pom] ["#." package] ["#." cache] ["#." repository] ["#." artifact ["#/." type]] ["#." dependency ["#/." resolution]]]]]}) (def: #export test Test (<| (_.covering /._) (do random.monad [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 #///package.Remote) (set@ #///package.pom dependee-pom)) depender-package (|> depender-package (set@ #///package.origin #///package.Remote) (set@ #///package.pom depender-pom)) fs (file.mock (\ file.default separator))]] (wrap (do promise.monad [verdict (do ///action.monad [#let [console (@version.echo "")] pre (|> ///dependency/resolution.empty (dictionary.put dependee dependee-package) (///cache.write-all fs)) post (|> (\ ///.monoid identity) (set@ #///.dependencies (set.from-list ///dependency.hash (list dependee depender))) (/.do! 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)))))))