tests/testthat/test-poll3.R

test_that("poll connection", {
  px <- get_tool("px")
  p <- process$new(px, c("sleep", ".5", "outln", "foobar"))
  on.exit(p$kill())

  ## Timeout
  expect_equal(
    p$poll_io(0),
    c(output = "nopipe", error = "nopipe", process = "timeout")
  )

  p$wait()
  expect_equal(
    p$poll_io(-1),
    c(output = "nopipe", error = "nopipe", process = "ready")
  )

  p$kill(close_connections = FALSE)
  expect_equal(
    p$poll_io(-1),
    c(output = "nopipe", error = "nopipe", process = "ready")
  )

  close(p$get_poll_connection())
  expect_equal(
    p$poll_io(-1),
    c(output = "nopipe", error = "nopipe", process = "closed")
  )
})

test_that("poll connection + stdout", {
  px <- get_tool("px")
  p1 <- process$new(px, c("outln", "foobar"), stdout = "|")
  on.exit(p1$kill(), add = TRUE)

  expect_false(p1$has_poll_connection())

  p2 <- process$new(
    px,
    c("sleep", "0.5", "outln", "foobar"),
    stdout = "|",
    poll_connection = TRUE
  )
  on.exit(p2$kill(), add = TRUE)

  expect_equal(
    p2$poll_io(0),
    c(output = "timeout", error = "nopipe", process = "timeout")
  )

  pr <- p2$poll_io(-1)
  expect_true("ready" %in% pr)
})

test_that("poll connection + stderr", {
  px <- get_tool("px")
  p1 <- process$new(px, c("errln", "foobar"), stderr = "|")
  on.exit(p1$kill(), add = TRUE)

  expect_false(p1$has_poll_connection())

  p2 <- process$new(
    px,
    c("sleep", "0.5", "errln", "foobar"),
    stderr = "|",
    poll_connection = TRUE
  )
  on.exit(p2$kill(), add = TRUE)

  expect_equal(
    p2$poll_io(0),
    c(output = "nopipe", error = "timeout", process = "timeout")
  )
})

Try the processx package in your browser

Any scripts or data that you put into this service are public.

processx documentation built on April 1, 2026, 5:06 p.m.