File: test-poll.R

package info (click to toggle)
r-cran-processx 3.8.6-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,068 kB
  • sloc: ansic: 6,485; sh: 13; makefile: 2
file content (94 lines) | stat: -rw-r--r-- 2,829 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94

test_that("polling for output available", {

  px <- get_tool("px")
  p <- process$new(px, c("sleep", "1", "outln", "foobar"), stdout = "|")

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

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

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

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

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

test_that("polling for stderr", {

  px <- get_tool("px")
  p <- process$new(px, c("sleep", "1", "errln", "foobar"), stderr = "|")

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

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

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

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

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

test_that("polling for both stdout and stderr", {

  px <- get_tool("px")
  p <- process$new(px, c("sleep", "1", "errln", "foo", "outln", "bar"),
                   stdout = "|", stderr = "|")

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

  p$wait()
  expect_true("ready" %in% p$poll_io(-1))

  p$read_error_lines()
  expect_true("ready" %in% p$poll_io(-1))

  p$kill(close_connections = FALSE)
  expect_true("ready" %in% p$poll_io(-1))

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

test_that("multiple polls", {

  px <- get_tool("px")
  p <- process$new(
    px, c("sleep", "1", "outln", "foo", "sleep", "1", "outln", "bar"),
    stdout = "|", stderr = "|")
  on.exit(p$kill(), add = TRUE)

  out <- character()
  while (p$is_alive()) {
    p$poll_io(2000)
    out <- c(out, p$read_output_lines())
  }

  expect_identical(out, c("foo", "bar"))
})