Mercurial > urweb
diff tests/tryRpc.ur @ 1848:e15234fbb163
Basis.tryRpc
author | Adam Chlipala <adam@chlipala.net> |
---|---|
date | Tue, 16 Apr 2013 10:55:48 -0400 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tests/tryRpc.ur Tue Apr 16 10:55:48 2013 -0400 @@ -0,0 +1,46 @@ +fun isBeppo (s : string) : transaction string = + case s of + "Beppo" => return "Yup, that's him!" + | "Mephisto" => error <xml>Great googely moogely!</xml> + | _ => return "Who's that?" + +fun listOf (n : int) = + if n < 0 then + error <xml>Negative!</xml> + else if n = 0 then + return [] + else + ls <- listOf (n - 1); + return (n :: ls) + +fun length ls = + case ls of + [] => 0 + | _ :: ls' => 1 + length ls' + +fun main () : transaction page = + s <- source ""; + ns <- source ""; + return <xml><body> + <ctextbox source={s}/> + <button value="rpc" onclick={fn _ => v <- get s; + r <- rpc (isBeppo v); + alert r}/> + <button value="tryRpc" onclick={fn _ => v <- get s; + r <- tryRpc (isBeppo v); + case r of + None => alert "Faaaaaailure." + | Some r => alert ("Success: " ^ r)}/> + + <hr/> + + <ctextbox source={ns}/> + <button value="rpc" onclick={fn _ => v <- get ns; + r <- rpc (listOf (readError v)); + alert (show (length r))}/> + <button value="tryRpc" onclick={fn _ => v <- get ns; + r <- tryRpc (listOf (readError v)); + case r of + None => alert "Faaaaaailure." + | Some r => alert ("Success: " ^ show (length r))}/> + </body></xml>