(.module: [library [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)]] [control ["." try (#+ Try)] [concurrency ["." async (#+ Async)]]] [data [text ["%" format] [encoding ["." utf8]]] [collection ["." set (#+ Set)]]] [math ["." random]] [world ["." file]]]] [// ["$." profile]] [\\program ["." / ["/#" // #_ ["#" profile (#+ Profile)] ["#." project] ["#." action] ["#." format] [repository [remote (#+ Address)]]]]]) (def: (with_default_source sources) (-> (Set //.Source) (Set //.Source)) (if (set.empty? sources) (set.has //.default_source sources) sources)) (def: with_default_repository (-> (Set Address) (Set Address)) (set.has //.default_repository)) (def: .public test Test (<| (_.covering /._) (do {! random.monad} [expected (\ ! map (with@ #//.parents (list)) $profile.random) .let [fs (: (file.System Async) (file.mock (\ file.default separator)))]] (in (do async.monad [verdict (do //action.monad [.let [profile (|> expected //format.profile %.code (\ utf8.codec encode))] _ (\ fs write profile //project.file) actual (: (Async (Try Profile)) (/.read async.monad fs //.default))] (in (\ //.equivalence = (|> expected (revised@ #//.sources ..with_default_source) (revised@ #//.repositories ..with_default_repository)) actual)))] (_.cover' [/.read] (try.else false verdict)))))))