blob: b2999b74d8120797bad67d2391fa38a279ffddcc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
|
(.module:
[library
[lux "*"
["_" test {"+" [Test]}]
[abstract
[monad {"+" [do]}]]
[control
[pipe {"+" [do>]}]
["." io {"+" [IO]}]
["." try]
["." function]]
[data
["." binary]
["." product]
["." text
["%" format {"+" [format]}]
[encoding
["." utf8]]]
[collection
["." dictionary]]]
[math
["." random {"+" [Random]}]
[number
["." nat]]]]]
[\\library
["." /
["/#" //
["#." status]]]])
(def: .public test
Test
(<| (_.covering /._)
(_.for [/.Client])
(do [! random.monad]
[on_post random.nat
on_get random.nat
on_put random.nat
on_patch random.nat
on_delete random.nat
on_head random.nat
on_connect random.nat
on_options random.nat
on_trace random.nat
num_headers (\ ! each (nat.% 10) random.nat)
headers (random.dictionary text.hash num_headers (random.ascii/lower 3) (random.ascii/lower 3))
.let [mock (: (/.Client IO)
(implementation
(def: (request method url headers data)
(io.io (let [value (case method
#//.Post on_post
#//.Get on_get
#//.Put on_put
#//.Patch on_patch
#//.Delete on_delete
#//.Head on_head
#//.Connect on_connect
#//.Options on_options
#//.Trace on_trace)
data (|> value
(\ nat.decimal encoded)
(\ utf8.codec encoded))]
(#try.Success [//status.ok
[#//.headers headers
#//.body (function (_ ?wanted_bytes)
(io.io (#try.Success [(binary.size data)
data])))]]))))))]]
(`` ($_ _.and
(~~ (template [<definition> <expected>]
[(_.cover [<definition>]
(|> (<definition> "" //.empty #.None mock)
(do> try.monad
[io.run!]
[product.right (value@ #//.body) (function.on #.None) io.run!]
[product.right (\ utf8.codec decoded)]
[(\ nat.decimal decoded)]
[(nat.= <expected>) in])
(try.else false)))]
[/.post on_post]
[/.get on_get]
[/.put on_put]
[/.patch on_patch]
[/.delete on_delete]
[/.head on_head]
[/.connect on_connect]
[/.options on_options]
[/.trace on_trace]
))
(_.cover [/.headers]
(nat.= (dictionary.size headers)
(|> headers
dictionary.entries
/.headers
dictionary.size)))
)))))
|