Skip to content

Commit

Permalink
Display how many deferred expressions were run (#248)
Browse files Browse the repository at this point in the history
  • Loading branch information
lionel- committed Jan 12, 2024
1 parent f3def71 commit 6e24844
Show file tree
Hide file tree
Showing 5 changed files with 66 additions and 1 deletion.
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# withr (development version)

* `deferred_run()` now reports the number of executed expressions with
a message.

,* `local_tempfile()` now writes `lines` in UTF-8 (#210) and always uses
`\n` for newlines (#216).

Expand Down
13 changes: 13 additions & 0 deletions R/defer.R
Original file line number Diff line number Diff line change
Expand Up @@ -88,8 +88,21 @@ deferred_run <- function(envir = parent.frame()) {
}
deferred_clear(envir)

n <- length(handlers)
i <- 0L

if (!n) {
message("No deferred expressions to run")
return(invisible(NULL))
}

defer(message(
sprintf("Ran %s/%s deferred expressions", i, n)
))

for (expr in handlers) {
eval(expr, envir)
i <- i + 1L
}
}

Expand Down
30 changes: 30 additions & 0 deletions tests/testthat/_snaps/defer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# deferred_run() displays how many expressions were run

Code
deferred_run()
Message
No deferred expressions to run

---

Code
local({
local_tempfile()
local_tempfile()
deferred_run()
})
Message
Ran 2/2 deferred expressions

---

Code
expect_error(local({
local_tempfile()
defer(stop("foo"))
local_tempfile()
deferred_run()
}))
Message
Ran 1/3 deferred expressions

17 changes: 17 additions & 0 deletions tests/testthat/test-defer.R
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,20 @@ test_that("`frame_exits()` and `frame_clear_exits()`", {
frame_clear_exits()
expect_equal(frame_exits(), list())
})

test_that("deferred_run() displays how many expressions were run", {
expect_snapshot(deferred_run())

expect_snapshot(local({
local_tempfile()
local_tempfile()
deferred_run()
}))

expect_snapshot(expect_error(local({
local_tempfile()
defer(stop("foo"))
local_tempfile()
deferred_run()
})))
})
4 changes: 3 additions & 1 deletion tests/testthat/test-standalone-defer.R
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ test_that("defer()'s global env facilities work", {
expect_length(h, 2)
expect_equal(Sys.getenv("abcdefg"), "tuvwxyz")

expect_output(deferred_run(globalenv()), "howdy")
suppressMessages(
expect_output(deferred_run(globalenv()), "howdy")
)
expect_equal(Sys.getenv("abcdefg"), "abcdefg")

expect_message(defer(print("never going to happen"), envir = globalenv()))
Expand Down

0 comments on commit 6e24844

Please sign in to comment.