test_that("rscript", {
out <- rscript("fixtures/script.R", show = FALSE)
expect_equal(out$status, 0L)
expect_equal(
out$stdout,
if (os_platform() == "windows") "stdout\r\n" else "stdout\n")
expect_equal(
out$stderr,
if (os_platform() == "windows") "stderr\r\n" else "stderr\n")
gc()
})
test_that("rscript_process", {
px <- rscript_process$new(
rscript_process_options(script = "fixtures/script.R"))
on.exit(try(px$kill(), silent = TRUE), add = TRUE)
px$wait(5000)
expect_equal(px$get_exit_status(), 0)
expect_equal(px$read_output_lines(), "stdout")
expect_equal(px$read_error_lines(), "stderr")
rm(px); gc()
})
test_that("stderr -> stdout", {
out <- rscript("fixtures/script2.R", show = FALSE, stderr = "2>&1")
exp <- if (os_platform() == "windows") {
"out1err1out2err2\r\n"
} else {
"out1err1out2err2\n"
}
expect_equal(out$stdout, exp)
expect_null(out$stderr)
out2 <- test_temp_file(create = FALSE)
rscript("fixtures/script2.R", show = FALSE, stdout = out2, stderr = out2)
expect_equal(readLines(out2), "out1err1out2err2")
gc()
})
test_that("cleans up temporary files", {
skip_on_cran()
rsc <- function() {
library(callr)
scriptfile <- tempfile(fileext = ".R")
cat("cat('foobar')\n", file = scriptfile)
old <- dir(tempdir(), pattern = "^callr-")
result <- callr::rscript(scriptfile)
new <- setdiff(dir(tempdir(), "^callr-"), old)
list(result = result, new = new)
}
out <- r(rsc)
expect_identical(out$result$stdout, "foobar")
expect_identical(out$new, character())
})
test_that("bg process cleans up temporary files", {
skip_on_cran()
rsc <- function() {
library(callr)
scriptfile <- tempfile(fileext = ".R")
cat("cat('foobar')\n", file = scriptfile)
old <- dir(tempdir(), pattern = "^callr-")
opts <- rscript_process_options(script = scriptfile)
rp <- rscript_process$new(opts)
on.exit(tryCatch(rp$kill, error = function(e) NULL), add = TRUE)
rp$wait(5000)
result <- rp$read_output()
rp$kill()
rm(rp)
gc()
gc()
new <- setdiff(dir(tempdir(), "^callr-"), old)
list(result = result, new = new)
}
out <- r(rsc)
expect_identical(out$result, "foobar")
expect_identical(out$new, character())
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.