testing.tri (1535B)
1 !import base as B 2 !import handlers as H 3 !export expect 4 !export run 5 6 -- Scripts match exact named requests and payloads, supplying ordinary replies. 7 -- Return [execution-Result chronological-trace unused-script]. A success with 8 -- leftover expectations is an error. A failure retains its trace and remainder. 9 expect service operation argument reply = [[service operation argument] reply] 10 run script action = let rec 11 walk current remaining reversed = let 12 finish outcome = [outcome (B.reverse reversed) remaining] 13 rejected event problem = [(B.err problem t) (B.reverse (B.pair event reversed)) remaining] 14 consume event{[service operation argument]} labels next [[wanted reply] | rest] = B.lazyBool 15 (_ : walk (next reply) rest (B.pair event reversed)) 16 (_ : rejected event (H.diagnostic "script-mismatch" service operation [wanted event] labels)) 17 (B.equal? wanted event) 18 consume event{[service operation argument]} labels _ [] = rejected event 19 (H.diagnostic "script-exhausted" service operation argument labels) 20 consume event labels _ _ = rejected event (H.diagnostic "invalid-script" t t t labels) 21 in case current of 22 (100, value) = case remaining of 23 [] = finish (B.ok value t) 24 _ = finish (B.err (H.diagnostic "script-unused" t t remaining []) t) 25 (103, problem) = finish (B.err problem t) 26 (106, [event labels next]) = consume event labels next remaining 27 _ = finish (B.err (H.diagnostic "invalid-view" t t t []) t) 28 in walk (H.view action) script []