Skip to content

Commit

Permalink
Freshen up the tests around crashing
Browse files Browse the repository at this point in the history
  • Loading branch information
jennybc committed Jul 5, 2024
1 parent 7319e0d commit 5c6707e
Show file tree
Hide file tree
Showing 2 changed files with 29 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
cli::cat_line(out[seq_len(min(grep("Traceback", out)))])
Output
This reprex appears to crash R.
See standard output and standard error for more details.
#### Standard output and error
``` sh
*** caught segfault ***
address 0x1, cause 'invalid permissions'
Traceback:

16 changes: 11 additions & 5 deletions tests/testthat/test-reprex.R
Original file line number Diff line number Diff line change
Expand Up @@ -61,19 +61,25 @@ 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)

# I don't want to snapshot the whole traceback, but everything above
# the traceback should be stable I think/hope
expect_snapshot(cli::cat_line(
out[seq_len(min(grep("Traceback", out)))]
))
})

0 comments on commit 5c6707e

Please sign in to comment.