Nothing
if (!is.null(packageDescription("stats")[["ExperimentalWindowsRuntime"]])) {
if (!identical(Sys.getenv("NOT_CRAN"), "true")) return()
}
test_that("lot of text", {
px <- get_tool("px")
txt <- strrep("x", 100000)
cat(txt, file = tmp <- tempfile())
p <- process$new(px, c("cat", tmp), stdout = "|")
on.exit(p$kill(), add = TRUE)
out <- p$read_all_output_lines()
expect_equal(txt, out)
})
test_that("UTF-8", {
px <- get_tool("px")
txt <- charToRaw(strrep("\xc2\xa0\xe2\x86\x92\xf0\x90\x84\x82", 20000))
writeBin(txt, con = tmp <- tempfile())
p <- process$new(px, c("cat", tmp), stdout = "|", encoding = "UTF-8")
on.exit(p$kill(), add = TRUE)
out <- p$read_all_output_lines()
expect_equal(txt, charToRaw(out))
})
test_that("UTF-8 multibyte character cut in half", {
px <- get_tool("px")
rtxt <- charToRaw("a\xc2\xa0a")
writeBin(rtxt[1:2], tmp1 <- tempfile())
writeBin(rtxt[3:4], tmp2 <- tempfile())
p1 <- process$new(px, c("cat", tmp1, "cat", tmp2), stdout = "|",
encoding = "UTF-8")
on.exit(p1$kill(), add = TRUE)
out <- p1$read_all_output_lines()
expect_equal(rtxt, charToRaw(out))
cmd <- paste("(cat", shQuote(tmp1), ";sleep 1;cat", shQuote(tmp2), ")")
p2 <- process$new(px, c("cat", tmp1, "sleep", "1", "cat", tmp2),
stdout = "|", stderr = "|", encoding = "UTF-8")
on.exit(p2$kill(), add = TRUE)
out <- p2$read_all_output_lines()
expect_equal(rtxt, charToRaw(out))
})
test_that("UTF-8 multibyte character cut in half at the end of the file", {
px <- get_tool("px")
rtxt <- charToRaw("a\xc2\xa0a")
writeBin(c(rtxt, rtxt[1:2]), tmp1 <- tempfile())
p <- process$new(px, c("cat", tmp1), stdout = "|", encoding = "UTF-8")
on.exit(p$kill(), add = TRUE)
expect_warning(
out <- p$read_all_output_lines(),
"Invalid multi-byte character at end of stream ignored"
)
expect_equal(charToRaw(out), c(rtxt, rtxt[1]))
})
test_that("Invalid UTF-8 characters in the middle of the string", {
px <- get_tool("px")
half <- charToRaw("\xc2\xa0")[1]
rtxt <- sample(rep(c(half, charToRaw("a")), 100))
writeBin(rtxt, tmp1 <- tempfile())
p <- process$new(px, c("cat", tmp1), stdout = "|", encoding = "UTF-8")
on.exit(p$kill(), add = TRUE)
suppressWarnings(out <- p$read_all_output_lines())
expect_equal(out, strrep("a", 100))
})
test_that("Convert from another encoding to UTF-8", {
px <- get_tool("px")
latin1 <- "\xe1\xe9\xed";
writeBin(charToRaw(latin1), tmp1 <- tempfile())
p <- process$new(px, c("cat", tmp1), stdout = "|", encoding = "latin1")
on.exit(p$kill(), add = TRUE)
suppressWarnings(out <- p$read_all_output_lines())
expect_equal(charToRaw(out), charToRaw("\xc3\xa1\xc3\xa9\xc3\xad"))
})
test_that("Passing connection to stdout", {
# file first
tmp <- tempfile()
con <- conn_create_file(tmp, write = TRUE)
on.exit(try(close(con), silent = TRUE), add = TRUE)
cmd <- c(get_tool("px"), c("outln", "hello", "outln", "world"))
p <- process$new(cmd[1], cmd[-1], stdout = con)
on.exit(p$kill(), add = TRUE)
p$wait(3000)
expect_false(p$is_alive())
# Need to close here, otherwise Windows cannot read it
close(con)
out <- readLines(tmp)
expect_equal(out, c("hello", "world"))
# pass a pipe to write to
pipe <- conn_create_pipepair()
on.exit(close(pipe[[1]]), add = TRUE)
on.exit(close(pipe[[2]]), add = TRUE)
p2 <- process$new(cmd[1], cmd[-1], stdout = pipe[[2]])
on.exit(p2$kill(), add = TRUE)
ready <- poll(list(pipe[[1]]), 3000)
expect_equal(ready[[1]], "ready")
lines <- conn_read_lines(pipe[[1]])
# sometimes it takes more tried to read everything.
deadline <- Sys.time() + as.difftime(3, units = "secs")
while (Sys.time() < deadline && length(lines) < 2) {
poll(list(pipe[[1]]), 1000)
lines <- c(lines, conn_read_lines(pipe[[1]]))
}
expect_equal(lines, c("hello", "world"))
p2$wait(3000)
expect_false(p2$is_alive())
})
test_that("Passing connection to stderr", {
# file first
tmp <- tempfile()
con <- conn_create_file(tmp, write = TRUE)
cmd <- c(get_tool("px"), c("errln", "hello", "errln", "world"))
p <- process$new(cmd[1], cmd[-1], stderr = con)
on.exit(p$kill(), add = TRUE)
close(con)
p$wait(3000)
expect_false(p$is_alive())
err <- readLines(tmp)
expect_equal(err, c("hello", "world"))
# pass a pipe to write to
pipe <- conn_create_pipepair()
on.exit(close(pipe[[1]]), add = TRUE)
on.exit(close(pipe[[2]]), add = TRUE)
p2 <- process$new(cmd[1], cmd[-1], stderr = pipe[[2]])
on.exit(p2$kill(), add = TRUE)
close(pipe[[2]])
ready <- poll(list(pipe[[1]]), 3000)
expect_equal(ready[[1]], "ready")
lines <- conn_read_lines(pipe[[1]])
# sometimes it takes more tried to read everything.
deadline <- Sys.time() + as.difftime(3, units = "secs")
while (Sys.time() < deadline && length(lines) < 2) {
poll(list(pipe[[1]]), 1000)
lines <- c(lines, conn_read_lines(pipe[[1]]))
}
expect_equal(lines, c("hello", "world"))
p2$wait(3000)
expect_false(p2$is_alive())
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.