
EventsTest.pudu
Pudu26 lines1.8 KB
1/** @Test.Events.Suite — events described, listeners added, and events written as JSON */2module PuduLangHttpClient.EventsTest34import Std.Io as Io5import Std.Json as Json6import Std.Test as Test7import PuduLangHttpClient.Events as Events8910fn main() -> Int {11 let none = Events.listeners()12 let some = none.onRequestStarted(|_event: Events.RequestStarted| ()).onRequestCompleted(|_event: Events.RequestCompleted| ()).onRequestFailed(|_event: Events.RequestFailed| ()).onPipelineChanged(|_event: Events.PipelineChanged| ())13 let checks = Test.suite("Events", &[14 Test.equals("listeners are added per kind", &(some.started.length(), some.completed.length(), some.failed.length(), some.changed.length()), &(1, 1, 1, 1)),15 Test.not("no listeners hear no requests", Events.hearsRequests(&none)),16 Test.not("a pipeline listener hears no requests", Events.hearsRequests(&none.onPipelineChanged(|_event: Events.PipelineChanged| ()))),17 Test.that("any request listener hears requests", Events.hearsRequests(&none.onRequestStarted(|_event: Events.RequestStarted| ())) && Events.hearsRequests(&none.onRequestCompleted(|_event: Events.RequestCompleted| ())) && Events.hearsRequests(&none.onRequestFailed(|_event: Events.RequestFailed| ()))),18 Test.equals("events write themselves as JSON", &(Json.encode(&Events.RequestCompleted{client: "api", method: "GET", uri: "http://a/", status: 200, elapsed: 3}.encode()), Json.encode(&Events.PipelineChanged{client: "api", generation: 2, stage: Events.Expired}.encode())), &("\{\"client\":\"api\",\"method\":\"GET\",\"uri\":\"http://a/\",\"status\":200,\"elapsed\":3\}", "\{\"client\":\"api\",\"generation\":2,\"stage\":\{\"Expired\":[]\}\}"))19 ])20 let ran = Test.run(&checks)21 for failure in Test.failuresOf(&ran) {22 let _reported = Io.writeErrorLine(failure)23 }24 Test.report(&ran)25}26