From 2e5852abb1ac0ae5abdd8709238aca447f62520e Mon Sep 17 00:00:00 2001 From: Eduardo Julian Date: Sat, 7 Nov 2020 00:29:40 -0400 Subject: Pure-Lux implementation for biggest and smallest Frac values. --- stdlib/source/test/aedifex/cli.lux | 2 +- stdlib/source/test/aedifex/command/deploy.lux | 129 ++++++++++++++++++++++++++ stdlib/source/test/aedifex/repository.lux | 6 +- 3 files changed, 133 insertions(+), 4 deletions(-) create mode 100644 stdlib/source/test/aedifex/command/deploy.lux (limited to 'stdlib/source/test/aedifex') diff --git a/stdlib/source/test/aedifex/cli.lux b/stdlib/source/test/aedifex/cli.lux index 1edfb381f..b7be4e8bf 100644 --- a/stdlib/source/test/aedifex/cli.lux +++ b/stdlib/source/test/aedifex/cli.lux @@ -60,7 +60,7 @@ #/.POM (list "pom") #/.Dependencies (list "deps") #/.Install (list "install") - (#/.Deploy repository user password) (list "deploy" repository user password) + (#/.Deploy repository [user password]) (list "deploy" repository user password) (#/.Compilation compilation) (..format-compilation compilation) (#/.Auto compilation) (list& "auto" (..format-compilation compilation)))) diff --git a/stdlib/source/test/aedifex/command/deploy.lux b/stdlib/source/test/aedifex/command/deploy.lux new file mode 100644 index 000000000..20718f915 --- /dev/null +++ b/stdlib/source/test/aedifex/command/deploy.lux @@ -0,0 +1,129 @@ +(.module: + [lux #* + ["_" test (#+ Test)] + [abstract + ["." monad (#+ do)]] + [control + ["." try (#+ Try) ("#@." functor)] + ["." exception] + [concurrency + ["." promise (#+ Promise)]] + [security + ["!" capability]]] + [data + ["." maybe] + ["." binary] + ["." text ("#@." equivalence) + ["%" format (#+ format)] + ["." encoding]] + ["." format #_ + ["#" binary] + ["." tar] + ["." xml]] + [collection + ["." set (#+ Set)] + ["." dictionary (#+ Dictionary)]]] + [math + ["." random (#+ Random)]] + [world + ["." file (#+ Path File)]]] + [program + [compositor + ["." export]]] + [/// + ["@." profile] + ["@." repository]] + {#program + ["." / + ["//#" /// #_ + ["#" profile] + ["#." action] + ["#." pom] + ["#." local] + ["#." hash] + ["#." repository (#+ Identity Repository)] + ["#." artifact (#+ Artifact) + ["#/." extension]]]]}) + +(def: (make-sources! fs sources) + (-> (file.System Promise) (Set Path) (Promise (Try Any))) + (loop [sources (set.to-list sources)] + (case sources + #.Nil + (|> [] + (:: try.monad wrap) + (:: promise.monad wrap)) + + (#.Cons head tail) + (do (try.with promise.monad) + [_ (: (Promise (Try Path)) + (file.make-directories promise.monad fs head)) + _ (: (Promise (Try (File Promise))) + (file.get-file promise.monad fs (format head (:: fs separator) head ".lux")))] + (recur tail))))) + +(def: (execute! repository fs identity artifact profile) + (-> (Repository Promise) (file.System Promise) + Identity Artifact ///.Profile + (Promise (Try Any))) + (do ///action.monad + [_ (..make-sources! fs (get@ #///.sources profile)) + _ (: (Promise (Try Path)) + (file.make-directories promise.monad fs (///local.repository fs)))] + (/.do! repository fs identity artifact profile))) + +(def: #export test + Test + (<| (_.covering /._) + (do {! random.monad} + [[artifact expected-pom profile] + (random.one (function (_ profile) + (do maybe.monad + [artifact (get@ #///.identity profile) + expected-pom (try.to-maybe (///pom.write profile))] + (wrap [artifact expected-pom profile]))) + @profile.random) + + identity @repository.identity + #let [repository (///repository.mock (@repository.simulation identity) + @repository.empty) + fs (file.mock (:: file.default separator))]] + (wrap (do {! promise.monad} + [verdict (do {! ///action.monad} + [_ (..execute! repository fs identity artifact profile) + expected-library (|> profile + (get@ #///.sources) + set.to-list + (export.library fs) + (:: ! map (format.run tar.writer))) + + actual-pom (:: repository download artifact ///artifact/extension.pom) + actual-library (:: repository download artifact ///artifact/extension.lux-library) + actual-sha-1 (:: repository download artifact ///artifact/extension.sha-1) + actual-md5 (:: repository download artifact ///artifact/extension.md5) + + #let [deployed-library! + (:: binary.equivalence = + expected-library + actual-library) + + deployed-pom! + (:: binary.equivalence = + (|> expected-pom (:: xml.codec encode) encoding.to-utf8) + actual-pom) + + deployed-sha-1! + (:: binary.equivalence = + (///hash.data (///hash.sha-1 expected-library)) + actual-sha-1) + + deployed-md5! + (:: binary.equivalence = + (///hash.data (///hash.md5 expected-library)) + actual-md5)]] + (wrap (and deployed-library! + deployed-pom! + deployed-sha-1! + deployed-md5!)))] + (_.claim [/.do!] + (try.default false verdict))))))) diff --git a/stdlib/source/test/aedifex/repository.lux b/stdlib/source/test/aedifex/repository.lux index 4f96d9329..5f05d342e 100644 --- a/stdlib/source/test/aedifex/repository.lux +++ b/stdlib/source/test/aedifex/repository.lux @@ -27,7 +27,7 @@ ["#." artifact (#+ Version Artifact) ["#/." extension (#+ Extension)]]]]}) -(def: identity +(def: #export identity (Random Identity) (random.and (random.ascii/alpha 10) (random.ascii/alpha 10))) @@ -59,11 +59,11 @@ (type: Store (Dictionary [Artifact Extension] Binary)) -(def: empty +(def: #export empty Store (dictionary.new ..item-hash)) -(structure: (simulation identity) +(structure: #export (simulation identity) (-> Identity (/.Simulation Store)) (def: (on-download artifact extension state) -- cgit v1.2.3