test_that("new_pkg_installation_plan", {
setup_fake_apps()
pkgcache::pkg_cache_delete_files()
lib <- withr::local_tempdir()
lockfile <- tempfile()
on.exit(unlink(lockfile), add = TRUE)
config <- list(library = lib)
prop <- pst(new_pkg_installation_proposal("pkg3", config = config))
pst(prop$solve())
prop$create_lockfile(lockfile)
plan <- new_pkg_installation_plan(lockfile, config = config)
expect_snapshot(plan)
plan$update()
expect_error(plan$resolve())
expect_error(plan$async_resolve())
expect_equal(plan$get_solve_policy(), NA_character_)
expect_error(plan$set_solve_policy())
expect_error(plan$solve())
})
test_that("install package from GH, in subdir", {
setup_fake_apps()
setup_fake_gh_app()
pkgcache::pkg_cache_delete_files()
lib <- withr::local_tempdir()
config <- list(library = lib)
pkg <- new_pkg_installation_proposal("wesm/feather/R", config = config)
suppressMessages(pkg$solve())
lock <- file.path(withr::local_tempdir(), "pkg.lock")
suppressMessages(pkg$create_lockfile(lock))
plan <- new_pkg_installation_plan(lock, config = config)
suppressMessages(plan$download())
suppressMessages(plan$install())
expect_true(file.exists(file.path(lib, "feather")))
# check cache state, must have a tree, a source and a binary package
check_cache <- function() {
cache <- pkgcache::pkg_cache_list()
expect_equal(nrow(cache), 3L)
expect_true(any(cache$package == "feather" & !cache$built))
expect_true(any(
cache$package == "feather" & cache$built & cache$platform == "source"
))
expect_true(any(
cache$package == "feather" & cache$built & cache$platform != "source"
))
}
check_cache()
# install from cache, binary is selected
remove.packages("feather", lib = lib)
plan <- new_pkg_installation_plan(lock, config = config)
suppressMessages(plan$download())
expect_equal(
plan$get_downloads()$download_status,
paste("Had", current_r_platform())
)
suppressMessages(plan$install())
expect_true(file.exists(file.path(lib, "feather")))
# cache is updated with the binary
check_cache()
# install from cache, no binary, source package is selected
remove.packages("feather", lib = lib)
pkgcache::pkg_cache_delete_files(
built = TRUE, platform = current_r_platform()
)
plan <- new_pkg_installation_plan(lock, config = config)
suppressMessages(plan$download())
expect_equal(plan$get_downloads()$download_status, "Had")
suppressMessages(plan$install())
expect_true(file.exists(file.path(lib, "feather")))
# install from cache, no binary, no source, tree is selected
remove.packages("feather", lib = lib)
pkgcache::pkg_cache_delete_files(built = TRUE)
plan <- new_pkg_installation_plan(lock, config = config)
suppressMessages(plan$download())
expect_equal(plan$get_downloads()$download_status, "Had")
suppressMessages(plan$install())
expect_true(file.exists(file.path(lib, "feather")))
# cache is updated with the source and binary
check_cache()
})
test_that("sysreqs", {
# Not the best test, because there are no system requirements to update...
setup_fake_apps()
pkgcache::pkg_cache_delete_files()
lib <- withr::local_tempdir()
lockfile <- tempfile()
on.exit(unlink(lockfile), add = TRUE)
config <- list(library = lib)
prop <- pst(new_pkg_installation_proposal("pkg3", config = config))
pst(prop$solve())
prop$create_lockfile(lockfile)
plan <- new_pkg_installation_plan(lockfile, config = config)
expect_snapshot(plan)
plan$update()
plan$update_sysreqs()
expect_error(plan$resolve())
expect_error(plan$async_resolve())
expect_equal(plan$get_solve_policy(), NA_character_)
expect_error(plan$set_solve_policy())
expect_error(plan$solve())
})
test_that("install_sysreqs", {
setup_fake_apps()
dir.create(lib <- tempfile())
on.exit(unlink(lib, recursive = TRUE), add = TRUE)
config <- list(
library = lib,
sysreqs = TRUE,
sysreqs_platform = "aarch64-unknown-linux-gnu-ubuntu-22.04",
sysreqs_lookup_system = FALSE,
sysreqs_dry_run = TRUE,
sysreqs_sudo = FALSE
)
prop <- new_pkg_installation_proposal("curl", config = config)
suppressMessages(prop$solve())
lock <- tempfile(fileext = ".lock")
on.exit(unlink(lock), add = TRUE)
prop$create_lockfile(path = lock)
plan <- new_pkg_installation_plan(lock)
expect_snapshot({
plan$show_solution()
plan$show_sysreqs()
}, transform = transform_bytes)
})
test_that("update_sysreqs", {
setup_fake_apps()
dir.create(lib <- tempfile())
on.exit(unlink(lib, recursive = TRUE), add = TRUE)
config <- list(
library = lib,
sysreqs = TRUE,
sysreqs_platform = "aarch64-unknown-linux-gnu-ubuntu-22.04",
sysreqs_lookup_system = FALSE,
sysreqs_dry_run = TRUE,
sysreqs_sudo = FALSE
)
prop <- new_pkg_installation_proposal("curl", config = config)
suppressMessages(prop$solve())
lock <- tempfile(fileext = ".lock")
on.exit(unlink(lock), add = TRUE)
prop$create_lockfile(path = lock)
plan <- new_pkg_installation_plan(lock, config = config)
iplan <- get_private(plan)$plan
# inject system package data
fake <- data_frame(
status = "ii",
package = c("libssl-dev", "libssl3"),
version = "3.0.2-0ubuntu1.10",
provides = list(list())
)
old <- iplan$.__enclos_env__$private$solution$result$data$sysreqs_packages
new <- sysreqs_update_state(old, fake)
iplan$.__enclos_env__$private$solution$result$data$sysreqs_packages <- new
expect_snapshot({
plan$show_sysreqs()
})
})
test_that("update_sysreqs with old lock file", {
setup_fake_apps()
dir.create(lib <- tempfile())
on.exit(unlink(lib, recursive = TRUE), add = TRUE)
# does nothing if no sysreqs_packages
config <- list(
library = lib,
sysreqs = FALSE,
sysreqs_platform = "unknown",
sysreqs_lookup_system = FALSE
)
prop <- new_pkg_installation_proposal("curl", config = config)
suppressMessages(prop$solve())
lock <- tempfile(fileext = ".lock")
on.exit(unlink(lock), add = TRUE)
prop$create_lockfile(path = lock)
config$sysreqs <- TRUE
plan <- new_pkg_installation_plan(lock, config = config)
iplan <- get_private(plan)$plan
pkgplan_update_sysreqs(iplan, get_private(iplan))
expect_snapshot({
plan$show_sysreqs()
})
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.