Skip to content

Commit

Permalink
Freshen up the tests around crashing (#464)
Browse files Browse the repository at this point in the history
  • Loading branch information
jennybc authored Jul 5, 2024
1 parent 7319e0d commit baf6b58
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 6 deletions.
19 changes: 18 additions & 1 deletion tests/testthat/_snaps/reprex.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,26 @@
# reprex() errors for an R crash, by default

Code
code <- "utils::getFromNamespace(\"crash\", \"callr\")()\n"
code <- "rlang::node_car(0)\n"
reprex(input = code)
Condition
Error in `reprex_render()`:
! This reprex appears to crash R. Call `reprex()` again with `std_out_err = TRUE` to get more info.

# reprex() copes with an R crash, when `std_out_err = TRUE`

Code
out
Output
[1] "This reprex appears to crash R."
[2] "See standard output and standard error for more details."
[3] ""
[4] "#### Standard output and error"
[5] ""
[6] "``` sh"
[7] ""
[8] " *** caught segfault ***"
[9] "address ADDRESS, cause 'CAUSE'"
[10] ""
[11] "Traceback:"

25 changes: 20 additions & 5 deletions tests/testthat/test-reprex.R
Original file line number Diff line number Diff line change
Expand Up @@ -61,19 +61,34 @@ test_that("reprex() works even if user uses fancy quotes", {
})

test_that("reprex() errors for an R crash, by default", {
skip_on_cran()
expect_snapshot(error = TRUE, {
code <- 'utils::getFromNamespace("crash", "callr")()\n'
code <- 'rlang::node_car(0)\n'
reprex(input = code)
})
})

test_that("reprex() copes with an R crash, when `std_out_err = TRUE`", {
code <- 'utils::getFromNamespace("crash", "callr")()\n'
skip_on_cran()
code <- 'rlang::node_car(0)\n'
expect_no_error(
out <- reprex(input = code, std_out_err = TRUE)
)

skip_on_os("windows")
expect_match(out, "crash", all = FALSE)
expect_match(out, "segfault", all = FALSE)
expect_match(out, "Traceback", all = FALSE)

scrubber <- function(x) {
# I don't want to snapshot the actual traceback
out <- x[seq_len(min(grep("Traceback", x)))]
# on macOS and windows, cause is 'invalid permissions'
# on ubuntu, cause is 'memory not mapped'
out <- sub(
"address 0x[0-9a-fA-F]+, cause '.*'",
"address ADDRESS, cause 'CAUSE'",
out
)
trimws(out)
}

expect_snapshot(out, transform = scrubber)
})

0 comments on commit baf6b58

Please sign in to comment.