app <- new_app()$use(mw_log())$get("/txt", function(req, res) {
  res$set_type("text/plain")$send("textual")
})$get("/html", function(req, res) {
  res$set_type("text/html")$send("<html><head></head><body>hello</body></html>")
})$get("/raw", function(req, res) {
  res$set_type("applicartion/octet-stream")$send(charToRaw("raw"))
})
web <- local_app_process(app, callr_opts = list(stdout = "|"))

test_that("text/plain response", {
  url <- web$url("/txt")
  resp <- curl::curl_fetch_memory(url)
  plr <- web$.process$poll_io(1000)
  expect_equal(plr[["output"]], "ready")
  log <- web$.process$read_output_lines()
  expect_match(log, "GET http://127\\.0\\.0\\.1:[0-9]*/txt 200 [0-9]+ ms - 7")
})

test_that("text/html response", {
  url <- web$url("/html")
  resp <- curl::curl_fetch_memory(url)
  plr <- web$.process$poll_io(1000)
  expect_equal(plr[["output"]], "ready")
  log <- web$.process$read_output_lines()
  expect_match(log, "GET http://127\\.0\\.0\\.1:[0-9]+/html 200 [0-9]+ ms - 44")
})

test_that("application/octet-stream response", {
  url <- web$url("/raw")
  resp <- curl::curl_fetch_memory(url)
  plr <- web$.process$poll_io(1000)
  expect_equal(plr[["output"]], "ready")
  log <- web$.process$read_output_lines()
  expect_match(log, "GET http://127\\.0\\.0\\.1:[0-9]+/raw 200 [0-9]+ ms - 3")
})
