Pudu programming language
Menu
Package

@chrismichaelps / pudu-lang-httpclient

Named HTTP clients for Pudu: a client factory, delegating handlers, pooled keep-alive connections, handler lifetimes, logging, and resilience

0.1.1Apache-2.01

InstallClose

EventsTest.pudu

Pudu26 lines1.8 KB

GitHub ↗
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 Events89/// Runs the suite.10fn 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