57 lines
2.5 KiB
Rust
57 lines
2.5 KiB
Rust
use super::*;
|
|
|
|
#[test]
|
|
fn websocket_original_contract_effects_and_resource_rules() {
|
|
let source = "route(request: dever.http.Request, reply: dever.system.HttpReply) () { socket = dever.websocket.accept(reply, dever.websocket.defaultLimits())\ndever.websocket.send(socket, dever.websocket.Message.Text(request.target))\ndever.websocket.close(socket, 1000, \"\") }\nmain(listener: dever.system.Listener) () { dever.http.serveLive(route, listener, dever.http.defaultLimits(), dever.http.defaultLiveLimits()) }";
|
|
let program = linked(source).unwrap();
|
|
let main = program
|
|
.functions
|
|
.iter()
|
|
.find(|function| function.signature.name == "main")
|
|
.unwrap();
|
|
assert!(
|
|
main.signature.effects.network
|
|
&& main.signature.effects.suspend
|
|
&& main.signature.effects.schedule
|
|
);
|
|
for (source, code) in [
|
|
(
|
|
"main(socket: dever.system.WebSocket) (same: Bool) { same = socket == socket }",
|
|
"C005",
|
|
),
|
|
(
|
|
"main(socket: dever.system.WebSocket) () { dever.system.wsReceive(socket) }",
|
|
"C006",
|
|
),
|
|
(
|
|
"main(socket: dever.system.WebSocket) () { lost = result(dever.websocket.receive(socket)) }",
|
|
"C012",
|
|
),
|
|
(
|
|
"main() () { lost = result(dever.websocket.connect(\"127.0.0.1\", 80, \"/\", dever.websocket.defaultLimits())) }",
|
|
"C012",
|
|
),
|
|
(
|
|
"main(socket: dever.system.WebSocket) (value: dever.websocket.Message) { value = first(dever.websocket.messages(socket)) }",
|
|
"C005",
|
|
),
|
|
] {
|
|
let error = linked(source).unwrap_err();
|
|
assert!(error.contains(code), "{source}\n{error}");
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn websocket_messages_are_lazy_and_keep_terminal_failure_obligations() {
|
|
let source = "main(socket: dever.system.WebSocket) (stream: AsyncStream<dever.websocket.MessageEvent>) { stream = dever.websocket.messages(socket) }";
|
|
let program = linked(source).unwrap();
|
|
let main = program
|
|
.functions
|
|
.iter()
|
|
.find(|function| function.signature.name == "main")
|
|
.unwrap();
|
|
assert!(!main.signature.effects.suspend);
|
|
let source = "read(event: dever.websocket.MessageEvent.Read(message)) () {}\nread(event: dever.websocket.MessageEvent.Failed(message)) () { fail(dever.websocket.MessageEvent.Failed(message)) }\nmain(socket: dever.system.WebSocket) () { each(read, dever.websocket.messages(socket)) }";
|
|
linked(source).unwrap();
|
|
}
|