test_that("r() does not load anything", {
  skip_in_covr()
  skip_if_not_installed("withr")
  pkgs <- withr::with_envvar(
    clean_envvars(),
    r(without_env(function() loadedNamespaces()))
  )
  if (length(pkgs) > 1) {
    print(pkgs)
  }
  ## Some R versions still load compiler...
  expect_true(all(pkgs %in% c("base", "compiler")))
})

test_that("r_bg() does not load anything", {
  skip_in_covr()
  skip_if_not_installed("withr")
  p <- withr::with_envvar(
    clean_envvars(),
    r_bg(without_env(function() loadedNamespaces()))
  )
  on.exit(p$kill(), add = TRUE)
  p$wait(3000)
  pkgs <- p$get_result()
  if (length(pkgs) > 1) {
    print(pkgs)
  }
  ## Some R versions still load compiler...
  expect_true(all(pkgs %in% c("base", "compiler")))
})

test_that("r_session does not load anything", {
  skip_in_covr()
  skip_if_not_installed("withr")
  rs <- withr::with_envvar(clean_envvars(), r_session$new())
  on.exit(rs$close(), add = TRUE)
  pkgs <- rs$run(without_env(function() loadedNamespaces()))
  if (length(pkgs) > 1) {
    print(pkgs)
  }
  ## Some R versions still load compiler...
  expect_true(all(pkgs %in% c("base", "compiler")))
  gc()
})

test_that("r() does not create objects in global env", {
  vars <- r(function() ls(.GlobalEnv))
  expect_identical(vars, character())
})

test_that("r_bg() does not create objects in global env", {
  p <- r_bg(function() ls(.GlobalEnv))
  on.exit(p$kill(), add = TRUE)
  p$wait(3000)
  vars <- p$get_result()
  expect_identical(vars, character())
})

test_that("r_session does not create objects in global env", {
  rs <- r_session$new()
  on.exit(rs$close(), add = TRUE)
  vars <- rs$run(function() ls(.GlobalEnv))
  expect_identical(vars, character())
  rs$close()
  gc()
})
