context('attaching')
# File name starts with `z` so that the test is executed last.
test_mod_envname = 'mod:mod/a'
test_that('‘box’ cannot be attached', {
skip_on_cran()
detach('package:box')
# Temporarily unset environment indicating that we’re inside testing mode:
envs = c('_R_CHECK_PACKAGE_NAME_', 'R_TESTS')
old_env = Sys.getenv(envs)
on.exit({
do.call('Sys.setenv', as.list(old_env))
Sys.unsetenv('R_BOX_TEST_ALLOW_DEVTOOLS')
})
Sys.unsetenv(envs)
Sys.setenv(R_BOX_TEST_ALLOW_DEVTOOLS = 'TRUE')
expect_error(attachNamespace('box'), 'Please consult the user guide at `vignette\\("box", package = "box"\\)`')
})
test_that('attach works locally inside module', {
box::use(mod/no_exports)
# `no_exports` attaches `a`. So check that `a` is *not* attached here.
expect_not_in(test_mod_envname, search())
expect_false(exists('modname'))
})
test_that('attach works locally inside function', {
f = function () {
box::use(mod/a[...])
expect_true(exists('modname'))
}
f()
expect_false(exists('modname'))
})
test_that('module can be attached to global environment', {
.GlobalEnv$searchlen = length(search())
in_globalenv({
box::use(a = mod/a[...])
mod_path = box:::path(a)
expect_length(search(), searchlen + 1L)
expect_true(mod_path %in% names(box:::loaded_mods))
expect_equal(search()[2L], environmentName(a))
})
rm(searchlen, envir = .GlobalEnv)
})
test_that('module can be detached', {
expect_equal(search()[2L], test_mod_envname)
parent = as.environment(3L)
detach(test_mod_envname, character.only = TRUE)
expect_identical(as.environment(2L), parent)
})
test_that('hidden names can be attached', {
expect_false(exists('.hidden'))
box::use(mod/a[...])
expect_true(exists('.hidden'))
})
test_that('unloading a module detaches it', {
parent = as.environment(2L)
local(box::use(a = mod/a[...]), .GlobalEnv)
expect_equal(search()[2L], test_mod_envname)
expect_not_identical(as.environment(2L), parent)
in_globalenv(box::unload(a))
expect_identical(as.environment(2L), parent)
})
test_that('unloading a local module detaches it', {
local({
old_parent = parent.env(environment())
box::use(a = mod/a[...])
new_parent = parent.env(environment())
expect_not_identical(old_parent, new_parent)
expect_identical(old_parent, parent.env(new_parent))
box::reload(a)
expect_not_identical(old_parent, parent.env(environment()))
expect_not_identical(new_parent, parent.env(environment()))
expect_identical(old_parent, parent.env(parent.env(environment())))
})
})
test_that('reloading a module reattaches it', {
parent = as.environment(2L)
local(box::use(a = mod/a[...]), .GlobalEnv)
expect_equal(search()[2L], test_mod_envname)
expect_not_identical(as.environment(2L), parent, 'Precondition')
expect_identical(as.environment(3L), parent, 'Precondition')
in_globalenv(box::reload(a))
expect_not_identical(as.environment(2L), parent)
expect_identical(as.environment(3L), parent)
in_globalenv(box::unload(a))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.