Skip to content

Commit

Permalink
Fix for dev testthat
Browse files Browse the repository at this point in the history
You really should not be using internal functions since their interface can change without warning. I have made the expedient fix, but I'd recommend not using internal functions in the future.
  • Loading branch information
hadley committed Nov 7, 2024
1 parent 39f80b9 commit dc0a559
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions tests/testthat/helper-test_that_for_all.R
Original file line number Diff line number Diff line change
Expand Up @@ -2,28 +2,28 @@
# function that makes the testing of the same expectation for multiple expressions easier
test_that_for_all <- function(X, desc, code, envir = parent.frame()){
stopifnot(is.character(X))

# capture name of the first argument
name_x <- as.character(substitute(X)) %>% stringr::str_replace("s$", "")
# capture testing code

# capture testing code
code <- substitute(code)
# for each element in x replace ".name_xs" with element and call testinf function

# for each element in x replace ".name_xs" with element and call testinf function
purrr::map(X, function(x){
code_x <- substitute_q(code, list(.fun = as.symbol(x)) %>% purrr::set_names(paste0(".", name_x)))

# copy source code refernce to new expression
attr(code_x, "srcref") <- attr(code, "srcref")

# call test_code function avoiding ::: operator
do.call(get("test_code", envir = asNamespace("testthat")), list(test = paste(desc, "for", name_x, x), code = code_x, env = envir), envir = envir)
do.call(get("test_code", envir = asNamespace("testthat")), list(test = paste(desc, "for", name_x, x), code = code_x, env = envir, reporter = testthat::get_reporter()), envir = envir)
})
}


# adapted from the pryr package
substitute_q <- function (x, env)
substitute_q <- function (x, env)
{
stopifnot(is.language(x))
call <- substitute(substitute(x, env), list(x = x))
Expand Down

0 comments on commit dc0a559

Please sign in to comment.