test_that("deprecate_soft() warns when called from global env", { withr::local_envvar(TESTTHAT_PKG = "testpackage") fn <- function(id) { deprecate_soft("1.0.0", "foo()", id = id) } expect_no_warning(fn("called from local env")) local_bindings(.env = global_env(), fn = fn) env_bind_lazy( current_env(), do = fn("called from global env"), .eval_env = global_env() ) expect_deprecated(do, "foo") }) test_that("deprecate_soft() warns when called from package being tested", { old <- Sys.getenv("NOT_CRAN") on.exit(Sys.setenv("NOT_CRAN" = old)) Sys.setenv("NOT_CRAN" = "true") retired <- function() deprecate_soft("1.0.0", "foo()") expect_warning(retired(), "was deprecated") }) test_that("deprecate_soft() warns when option is set", { retired <- function(id) deprecate_soft("1.0.0", "foo()", id = id) with_options(lifecycle_verbosity = "warning", { expect_warning(retired("rlang_test5"), "was deprecated") }) }) test_that("deprecate_warn() repeats warnings when option is set", { local_options(lifecycle_verbosity = "warning") retired1 <- function() deprecate_soft("1.0.0", "foo()", id = "signal repeat") retired2 <- function() deprecate_warn("1.0.0", "foo()", id = "warn repeat") expect_warning(retired1(), "was deprecated") expect_warning(retired2(), "was deprecated") expect_warning(retired1(), "was deprecated") expect_warning(retired2(), "was deprecated") }) test_that("can promote lifecycle warnings to errors", { local_options(lifecycle_verbosity = "error") expect_lifecycle_defunct(deprecate_soft("1.0.0", "foo()"), "was deprecated") expect_lifecycle_defunct(deprecate_warn("1.0.0", "foo()"), "was deprecated") }) test_that("soft-deprecation warnings are issued when called from child of global env as well", { fn <- function() deprecate_soft("1.0.0", "foo()", id = "child of global env") expect_warning(eval_bare(call2(fn), env(global_env())), "was deprecated") }) test_that("deprecation warnings are not displayed again", { local_options(lifecycle_verbosity = NULL) local_interactive() wrn <- catch_cnd( deprecate_warn("1.0.0", "foo()", id = "once-every-8-hours-note"), classes = "warning" ) footer <- cnd_footer(wrn) expect_true(is_character(footer) && any(grepl("once every 8 hours", footer))) local_options(lifecycle_verbosity = "warning") wrn <- catch_cnd(deprecate_warn("1.0.0", "foo()", id = "once-every-8-hours-no-note")) expect_false(grepl("once every 8 hours", wrn$message)) }) test_that("the topenv of the empty env is not the global env", { local_options(lifecycle_verbosity = NULL) expect_silent(deprecate_soft("1.0.0", "foo()", env = empty_env(), id = "topenv of empty env")) }) test_that("expect_deprecated() matches regexp", { expect_deprecated( deprecate_warn("1.0", "fn()", details = "foo.["), "foo.[", fixed = TRUE ) fn <- function() { deprecate_soft("1.0.0", "fn()") } expect_deprecated(fn(), "fn") expect_deprecated(expect_failure( expect_deprecated(fn(), "foo") )) })