Skip to content

Commit

Permalink
Merge pull request #106 from m-muecke/mocks
Browse files Browse the repository at this point in the history
tests: migrate to testthat mocking
  • Loading branch information
gaborcsardi authored Oct 6, 2024
2 parents bc05e08 + 5d054ba commit 37c81af
Show file tree
Hide file tree
Showing 8 changed files with 48 additions and 80 deletions.
3 changes: 1 addition & 2 deletions DESCRIPTION
Original file line number Diff line number Diff line change
Expand Up @@ -29,10 +29,9 @@ Suggests:
callr,
covr,
gh,
mockery,
reticulate,
rmarkdown,
testthat,
testthat (>= 3.2.0),
withr
Config/Needs/website:
pkgdown,
Expand Down
6 changes: 6 additions & 0 deletions R/mocks.r
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Sys.which <- NULL
getNamespaceInfo <- NULL
getNamespaceVersion <- NULL
loadedNamespaces <- NULL
search <- NULL
system <- NULL
32 changes: 7 additions & 25 deletions tests/testthat/test-dependent-packages.R
Original file line number Diff line number Diff line change
Expand Up @@ -4,33 +4,15 @@ test_that("dependent_packages", {
dep <- readRDS("fixtures/devtools-deps.rda")
alldsc <- readRDS("fixtures/descs.rda")

mockery::stub(dependent_packages, 'utils::installed.packages', ins)
mockery::stub(
dependent_packages,
'pkg_desc',
function(x) alldsc[[x]]
)
mockery::stub(
dependent_packages,
'loadedNamespaces',
function() ins
)
local_mocked_bindings(installed.packages = function() ins, .package = "utils")
local_mocked_bindings(pkg_desc = function(x) alldsc[[x]])
local_mocked_bindings(loadedNamespaces = function() ins)

mockery::stub(
dependent_packages,
'getNamespaceVersion',
function(x) alldsc[[x]]$Version
)
mockery::stub(
dependent_packages,
'search',
function() paste0("package:", dep$package[dep$attached])
)
mockery::stub(
dependent_packages,
'getNamespaceInfo',
function(x, ...) alldsc[[x]]$Version
local_mocked_bindings(getNamespaceVersion = function(x) alldsc[[x]]$Version)
local_mocked_bindings(
search = function() paste0("package:", dep$package[dep$attached])
)
local_mocked_bindings(getNamespaceInfo = function(x, ...) alldsc[[x]]$Version)

exp <- dep[, setdiff(colnames(dep), c("path", "loadedpath"))]
tec <- dependent_packages("devtools", NA)
Expand Down
55 changes: 21 additions & 34 deletions tests/testthat/test-diff.R
Original file line number Diff line number Diff line change
Expand Up @@ -30,45 +30,35 @@ test_that("print.session_diff", {
test_that("get_session_info 1", {
arg <- NULL
abort <- function(...) stop("test failure")
mockery::stub(get_session_info, "get_session_info_local", abort)
mockery::stub(get_session_info, "get_session_info_clipboard", abort)
mockery::stub(get_session_info, "get_session_info_url", abort)
mockery::stub(get_session_info, "get_session_info_literal", abort)

mockery::stub(
get_session_info,
"get_session_info_local",
function(...) arg <<- list(...)
local_mocked_bindings(get_session_info_local = function() abort)
local_mocked_bindings(get_session_info_clipboard = function() abort)
local_mocked_bindings(get_session_info_url = function() abort)
local_mocked_bindings(get_session_info_literal = function() abort)

local_mocked_bindings(
get_session_info_local = function(...) arg <<- list(...)
)
get_session_info("local", pkgs = "foo")
expect_equal(arg, list(pkgs = "foo"))

arg <- NULL
mockery::stub(get_session_info, "get_session_info_local", abort)
mockery::stub(
get_session_info,
"get_session_info_clipboard",
function(...) arg <<- list(...)
local_mocked_bindings(get_session_info_local = function() abort)
local_mocked_bindings(
get_session_info_clipboard = function(...) arg <<- list(...)
)
get_session_info("clipboard", pkgs = "foo")
expect_equal(arg, list())

arg <- NULL
mockery::stub(get_session_info, "get_session_info_clipboard", abort)
mockery::stub(
get_session_info,
"get_session_info_url",
function(...) arg <<- list(...)
)
local_mocked_bindings(get_session_info_clipboard = function() abort)
local_mocked_bindings(get_session_info_url = function(...) arg <<- list(...))
get_session_info("https://acme.com", pkgs = "foo")
expect_equal(arg, list("https://acme.com"))

arg <- NULL
mockery::stub(get_session_info, "get_session_info_url", abort)
mockery::stub(
get_session_info,
"get_session_info_literal",
function(...) arg <<- list(...)
local_mocked_bindings(get_session_info_url = function() abort)
local_mocked_bindings(
get_session_info_literal = function(...) arg <<- list(...)
)
get_session_info(c("foo", "bar"), pkgs = "foo")
expect_equal(arg, list(c("foo", "bar")))
Expand All @@ -83,15 +73,15 @@ test_that("get_session_info_local", {

test_that("get_session_info_clipboard", {
lines <- readLines(test_path("fixtures", "lines1.txt"))
mockery::stub(get_session_info_clipboard, "clipboard_read", lines)
local_mocked_bindings(clipboard_read = function() lines)
clp <- get_session_info_clipboard()
expect_equal(clp$arg, "<clipboard>")
expect_equal(
clp$text,
get_session_info_literal(lines)$text
)

mockery::stub(get_session_info_clipboard, "clipboard_read", "clipboard")
local_mocked_bindings(clipboard_read = function() "clipboard")
expect_equal(get_session_info_clipboard()$text, "clipboard")
})

Expand All @@ -102,12 +92,9 @@ test_that("get_session_info_url", {
)
close(gz)

mockery::stub(
get_session_info_url,
"utils::download.file",
function(url, destfile, ...) {
writeLines(html, destfile)
}
local_mocked_bindings(
download.file = function(url, destfile, ...) writeLines(html, destfile),
.package = "utils"
)

url <- "https://github.com/r-lib/sessioninfo/issues/6"
Expand Down Expand Up @@ -243,7 +230,7 @@ test_that("session_diff_text", {
expect_snapshot(print(session_diff_text(x, y)))

# if matching packages fails, we still have meaningful output
mockery::stub(session_diff_text, "expand_diff_text", function(...) stop())
local_mocked_bindings(expand_diff_text = function(...) stop())
expect_snapshot(print(session_diff_text(x, y)))
})

Expand Down
4 changes: 3 additions & 1 deletion tests/testthat/test-os-name.R
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@

test_that("unknown os name", {
mockery::stub(os_name, "utils::sessionInfo", list(running = NULL))
local_mocked_bindings(
sessionInfo = function(...) list(running = NULL), .package = "utils"
)
expect_equal(os_name(), NA_character_)
})
20 changes: 6 additions & 14 deletions tests/testthat/test-package-info.R
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,9 @@ test_that("package_info, loaded", {
alldsc <- readRDS("fixtures/descs.rda")
exp <- readRDS(paste0("fixtures/devtools-info-", .Platform$OS.type, ".rda"))

mockery::stub(package_info, "loaded_packages", descs)
mockery::stub(
package_info,
"pkg_desc",
function(x, ...) alldsc[[x]]
)
mockery::stub(package_info, "pkg_lib_paths", levels(exp$library))
local_mocked_bindings(loaded_packages = function() descs)
local_mocked_bindings(pkg_desc = function(x, ...) alldsc[[x]])
local_mocked_bindings(pkg_lib_paths = function() levels(exp$library))

pi <- package_info()
expect_identical(pi, exp)
Expand All @@ -23,13 +19,9 @@ test_that("package_info, dependent", {
alldsc <- readRDS("fixtures/descs.rda")
exp <- readRDS(paste0("fixtures/devtools-info-", .Platform$OS.type, ".rda"))

mockery::stub(package_info, "dependent_packages", descs)
mockery::stub(
package_info,
"pkg_desc",
function(x, ...) alldsc[[x]]
)
mockery::stub(package_info, "pkg_lib_paths", levels(exp$library))
local_mocked_bindings(dependent_packages = function(...) descs)
local_mocked_bindings(pkg_desc = function(x, ...) alldsc[[x]])
local_mocked_bindings(pkg_lib_paths = function() levels(exp$library))

pi <- package_info("devtools")
expect_identical(pi, exp)
Expand Down
6 changes: 3 additions & 3 deletions tests/testthat/test-platform-info.R
Original file line number Diff line number Diff line change
Expand Up @@ -31,10 +31,10 @@ test_that("print.platform_info ignores max.print", {
})

test_that("get_quarto_version", {
mockery::stub(get_quarto_version, "Sys.which", "")
local_mocked_bindings(Sys.which = function(...) "")
expect_snapshot(get_quarto_version())

mockery::stub(get_quarto_version, "Sys.which", "/path/to/quarto")
mockery::stub(get_quarto_version, "system", "1.3.450")
local_mocked_bindings(Sys.which = function(...) "/path/to/quarto")
local_mocked_bindings(system = function(...) "1.3.450")
expect_snapshot(get_quarto_version())
})
2 changes: 1 addition & 1 deletion tests/testthat/test-session-info.R
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@

test_that("session_info", {
info <- readRDS(paste0("fixtures/devtools-info-", .Platform$OS.type, ".rda"))
mockery::stub(session_info, "package_info", pi)
local_mocked_bindings(package_info = function(...) pi)

si <- session_info()
expect_equal(si$platform, platform_info())
Expand Down

0 comments on commit 37c81af

Please # to comment.