aboutsummaryrefslogtreecommitdiff
path: root/stdlib/source/test/aedifex
diff options
context:
space:
mode:
authorEduardo Julian2020-11-07 00:29:40 -0400
committerEduardo Julian2020-11-07 00:29:40 -0400
commit2e5852abb1ac0ae5abdd8709238aca447f62520e (patch)
tree1b73a24205217c9e00f7f17d5972f67735a7cc69 /stdlib/source/test/aedifex
parentef78c1f92ab29c4370193591b170535dd9e743f7 (diff)
Pure-Lux implementation for biggest and smallest Frac values.
Diffstat (limited to 'stdlib/source/test/aedifex')
-rw-r--r--stdlib/source/test/aedifex/cli.lux2
-rw-r--r--stdlib/source/test/aedifex/command/deploy.lux129
-rw-r--r--stdlib/source/test/aedifex/repository.lux6
3 files changed, 133 insertions, 4 deletions
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)