(.module: [lux #* ["_" test (#+ Test)] [abstract [monad (#+ do)]] [control ["." try (#+ Try) ("#\." functor)] [concurrency ["." promise (#+ Promise)]]] [data ["." binary] ["." text ("#\." equivalence) [encoding ["." utf8]]] [format ["." xml]]] [math ["." random (#+ Random)]] [world ["." file (#+ File)]]] [// ["@." version] [// ["@." profile]]] {#program ["." / ["/#" // #_ ["#." clean] ["/#" // #_ ["#" profile] ["#." action] ["#." pom]]]]}) (def: #export test Test (<| (_.covering /._) (do random.monad [sample @profile.random #let [fs (file.mock (\ file.default separator))]] (wrap (do {! promise.monad} [#let [console (@version.echo "")] outcome (/.do! console fs sample)] (case outcome (#try.Success path) (do ! [verdict (do ///action.monad [expected (|> (///pom.write sample) (try\map (|>> (\ xml.codec encode) (\ utf8.codec encode))) (\ ! wrap)) file (: (Promise (Try (File Promise))) (file.get_file promise.monad fs path)) actual (\ file content []) logging! (\ ///action.monad map (text\= /.success) (\ console read_line [])) #let [expected_path! (text\= ///pom.file path) expected_content! (\ binary.equivalence = expected actual)]] (wrap (and logging! expected_path! expected_content!)))] (_.cover' [/.do! /.success] (try.default false verdict))) (#try.Failure error) (_.cover' [/.do!] (case (get@ #///.identity sample) (#.Some _) false #.None true))))))))