tests/testthat/test-r.R

test_that("we can use R CMD build to build a package", {
  skip_on_cran()
  if (renv_platform_windows()) {
    zip <- Sys.which("zip")
    if (!nzchar(zip))
      skip("test requires 'zip'")
  }

  testdir <- renv_scope_tempfile("renv-r-tests-")
  ensure_directory(testdir)
  # R CMD install creates file in working directory
  renv_scope_wd(testdir)

  package <- "sample.package"
  pkgdir <- file.path(testdir, package)
  ensure_directory(pkgdir)

  data <- list(Package = package, Type = "Package", Version = "0.1.0")
  renv_dcf_write(data, file = file.path(pkgdir, "DESCRIPTION"))
  expect_equal(renv_project_type(pkgdir), "package")

  tarball <- r_cmd_build(package, pkgdir)
  ensure_existing_path(tarball)
  ensure_existing_file(tarball)
  expect_true(file.exists(tarball))
  files <- renv_archive_list(tarball)
  expect_true(all(c("DESCRIPTION", "NAMESPACE", "MD5") %in% basename(files)))

  # NOTE: R 3.6 seems to check the permissions of the target library,
  # even when you just want to build a binary?
  before <- list.files(testdir)
  args <- c(
    "CMD", "INSTALL",
    "-l", renv_shell_path(tempdir()),
    "--no-multiarch",
    "--build", package
  )
  output <- r(args, stdout = TRUE, stderr = TRUE)
  after <- list.files(testdir)
  binball <- renv_vector_diff(after, c("NULL", before))

  expect_true(length(binball) == 1L)
  expect_equal(renv_package_type(binball), "binary")
})

test_that("we can supply custom options to R CMD INSTALL", {
  skip_on_cran()
  renv_tests_scope()

  # work in new renv context (don't re-use cache)
  renv_scope_envvars(RENV_PATHS_ROOT = renv_scope_tempfile())

  # make install 'fail' with bad option
  renv_scope_options(install.opts = list(oatmeal = "--version"))
  expect_error(install("oatmeal"))
})

Try the renv package in your browser

Any scripts or data that you put into this service are public.

renv documentation built on Sept. 19, 2023, 9:06 a.m.