Nothing
# att_amend_desc ----
# Copy package in a temporary directory
tmpdir <- tempfile("dummyamend")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# browseURL(dummypackage)
user_warn <- getOption("warn")
att_amend_desc(path = dummypackage)
test_that("att_amend_desc add dev/ in .Rbuildignore if needed", {
rbuildignore_file <- readLines(file.path(tmpdir, "dummypackage", ".Rbuildignore"))
expect_true(any(grepl("\\^dev\\$",rbuildignore_file)))
})
test_that("att_amend_desc does not change warn level", {
new_warn <- getOption("warn")
expect_equal(new_warn, user_warn)
})
desc_file <- readLines(file.path(tmpdir, "dummypackage", "DESCRIPTION"))
namespace_file <- readLines(file.path(tmpdir, "dummypackage", "NAMESPACE"))
test_that("att_amend_desc updates namespace", {
expect_length(namespace_file, 4)
})
test_that("att_amend_desc updates description", {
# person() can be 1 or 4 lines depending on {desc} version
w.depends <- grep("Depends:", desc_file)
expect_length(w.depends, 1)
expect_equal(desc_file[w.depends + 1], " R (>= 3.5.0)")
expect_equal(desc_file[w.depends + 2], "Imports: ")
expect_equal(desc_file[w.depends + 3], " magrittr,")
expect_equal(desc_file[w.depends + 4], " stats")
expect_equal(desc_file[w.depends + 5], "Suggests: ")
expect_equal(desc_file[w.depends + 6], " glue,")
expect_equal(desc_file[w.depends + 7], " knitr,")
expect_equal(desc_file[w.depends + 8], " rmarkdown,")
expect_equal(desc_file[w.depends + 9], " testthat")
expect_equal(desc_file[w.depends + 10], "LinkingTo:" )
expect_equal(desc_file[w.depends + 11], " Rcpp")
# base does not appear
expect_false(all(grepl("base", desc_file)))
# utils is removed
expect_false(all(grepl("utils", desc_file)))
})
unlink(dummypackage, recursive = TRUE)
# Remotes stays here if exists ----
tmpdir <- tempfile("dummyremotes")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
path.d <- file.path(dummypackage, "DESCRIPTION")
cat(
"Remotes:
thinkr-open/fusen,
tidyverse/magrittr,
rstudio/rmarkdown@branch,
git::https://github.com/yihui/knitr@main
", append = TRUE,
file = path.d)
test_that("Remotes stays here if exists and package in imports/suggests", {
suppressMessages(
expect_error(att_amend_desc(path = dummypackage), regexp = NA))
desc_file <- readLines(file.path(dummypackage, "DESCRIPTION"))
expect_false(any(grepl("thinkr-open/fusen", desc_file))) # not in deps
w.remotes <- grep('Remotes:', desc_file)
expect_length(w.remotes, 1)
expect_equal(desc_file[w.remotes + 1], " git::https://github.com/yihui/knitr@main,") #imports
expect_equal(desc_file[w.remotes + 2], " rstudio/rmarkdown@branch,") #suggest
expect_equal(desc_file[w.remotes + 3], " tidyverse/magrittr") #imports
})
unlink(dummypackage, recursive = TRUE)
# pkg_ignore and extra.suggests are used ----
tmpdir <- tempfile("dummyextra")
dir.create(tmpdir)
file.copy(system.file("dummypackage", package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
test_that("pkg_ignore and extra.suggests are used", {
suppressMessages(
expect_error(
att_amend_desc(path = dummypackage,
pkg_ignore = "glue",
extra.suggests = "roxygen2"),
regexp = NA)
)
desc_file <- readLines(file.path(dummypackage, "DESCRIPTION"))
expect_false(any(grepl("glue", desc_file))) # ignored totally
w.suggests <- grep('Suggests:', desc_file)
expect_length(w.suggests, 1)
expect_equal(desc_file[w.suggests + 3], " roxygen2,") #suggest
})
unlink(dummypackage, recursive = TRUE)
# Test fails if dir.t do not exists
tmpdir <- tempfile("dummydirt")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
test_that("fails if dir.t do not exists", {
expect_message(
att_amend_desc(path = dummypackage,
dir.r = c("R", "rara")),
regexp = "There is no directory named: rara")
expect_error(
att_amend_desc(path = dummypackage,
dir.r = "rara", # do not exist, nothing fails
use.config = FALSE),
regexp = NA)
expect_message(
att_amend_desc(path = dummypackage,
dir.v = c("vignettes", "vava"),
use.config = FALSE),
regexp = "There is no directory named: vava")
expect_error(
att_amend_desc(path = dummypackage,
dir.v = "vava",
update.config = TRUE), # do not exist, nothing fails
regexp = NA)
expect_message(
att_amend_desc(path = dummypackage,
dir.t = c("tests", "tata"),
update.config = TRUE),
regexp = "There is no directory named: tata")
expect_error(
att_amend_desc(path = dummypackage,
dir.t = "tata",
update.config = TRUE), # do not exist, nothing fails
regexp = NA)
})
unlink(dummypackage, recursive = TRUE)
# Test Deprecated att_to_description ----
# suppressWarnings()
# Copy package in a temporary directory
tmpdir <- tempfile(pattern = "deprecated")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# browseURL(dummypackage)
suppressWarnings(att_to_description(path = dummypackage))
desc_file <- readLines(file.path(tmpdir, "dummypackage", "DESCRIPTION"))
namespace_file <- readLines(file.path(tmpdir, "dummypackage", "NAMESPACE"))
test_that("att_to_description still updates namespace", {
expect_length(namespace_file, 4)
})
unlink(tmpdir, recursive = TRUE)
# att_to_desc_from_is ----
# Copy package in a temporary directory
tmpdir <- tempfile(pattern = "pkg")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# browseURL(dummypackage)
att_to_desc_from_is(path.d = file.path(dummypackage, "DESCRIPTION"),
imports = c("magrittr", "attachment"), suggests = c("knitr"))
desc_file <- readLines(file.path(tmpdir, "dummypackage", "DESCRIPTION"))
test_that("att_to_desc_from_is updates description", {
# person() can be 1 or 4 lines depending on {desc} version
w.depends <- grep("Depends:", desc_file)
expect_length(w.depends, 1)
expect_equal(desc_file[w.depends], "Depends: ")
expect_equal(desc_file[w.depends + 1], " R (>= 3.5.0)")
expect_equal(desc_file[w.depends + 2], "Imports: ")
expect_equal(desc_file[w.depends + 3], " attachment,")
expect_equal(desc_file[w.depends + 4], " magrittr")
expect_equal(desc_file[w.depends + 5], "Suggests: ")
expect_equal(desc_file[w.depends + 6], " knitr")
expect_equal(desc_file[w.depends + 7], "LinkingTo:" )
expect_equal(desc_file[w.depends + 8], " Rcpp")
})
unlink(tmpdir, recursive = TRUE)
# Test missing DESCRIPTION works ----
# Copy package in a temporary directory
tmpdir <- tempfile("dummydesc")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# browseURL(dummypackage)
file.remove(file.path(dummypackage, "DESCRIPTION"))
test_that("Works with missing DESCRIPTION", {
expect_false(file.exists(file.path(dummypackage, "DESCRIPTION")))
expect_message(att_amend_desc(path = dummypackage), "use_description")
expect_true(file.exists(file.path(dummypackage, "DESCRIPTION")))
desc_file <- readLines(file.path(tmpdir, "dummypackage", "DESCRIPTION"))
expect_true(grepl("dummypackage", desc_file[1]))
expect_false(any(grepl("dummypackage", desc_file[-1])))
file.remove(file.path(dummypackage, "DESCRIPTION"))
expect_false(file.exists(file.path(dummypackage, "DESCRIPTION")))
expect_message(att_to_desc_from_is(path = file.path(dummypackage, "DESCRIPTION"),
imports = c("magrittr")), "use_description")
expect_true(file.exists(file.path(dummypackage, "DESCRIPTION")))
desc_file <- readLines(file.path(tmpdir, "dummypackage", "DESCRIPTION"))
expect_true(grepl("dummypackage", desc_file[1]))
expect_false(any(grepl("dummypackage", desc_file[-1])))
})
unlink(tmpdir, recursive = TRUE)
# Test missing NAMESPACE works ----
# Copy package in a temporary directory
tmpdir <- tempfile("dummyname")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# browseURL(dummypackage)
file.remove(file.path(dummypackage, "NAMESPACE"))
test_that("Works with missing DESCRIPTION", {
expect_false(file.exists(file.path(dummypackage, "NAMESPACE")))
expect_error(att_from_namespace(file.path(dummypackage, "NAMESPACE")), "attachment::att_amend_desc()")
expect_message(att_amend_desc(path = dummypackage, document = FALSE),
"no directory named: NAMESPACE")
expect_false(file.exists(file.path(dummypackage, "NAMESPACE")))
expect_message(att_amend_desc(path = dummypackage, document = TRUE, update.config = TRUE), "new path.n")
expect_true(file.exists(file.path(dummypackage, "NAMESPACE")))
})
unlink(tmpdir, recursive = TRUE)
# Note: glue is necessary for {attachment}, ggplot2 is not even in suggests.
# missing pkg in R is not installed ----
test_that("missing pkg is not installed", {
# Copy package in a temporary directory
tmpdir <- tempfile("dummymissing")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# browseURL(dummypackage)
cat("
#' Function
#' @importFrom ggplot ggplot
#' @export
my_fun <- function() {
data %>%
filter(col == 3) %>%
mutate(new_col = 1) %>%
ggplot() +
aes(x, y, colour = new_col) +
geom_point()
}
", file = file.path(dummypackage, "R", "function.R"))
expect_error(attachment::att_amend_desc(path = dummypackage))#,
# "The package ggplot is missing or misspelled.")
# Clean after
unlink(dummypackage, recursive = TRUE)
})
# missing pkgS are not installed ----
test_that("missing pkgS are not installed", {
# Copy package in a temporary directory
tmpdir <- tempfile("dummypkgs")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
cat("
#' Function
#' @importFrom ggplot ggplot
#' @importFrom ggplot3 ggplot
# @importFrom ggplot4 ggplot # Only comment, not used
#' @export
my_fun <- function() {
data %>%
filter(col == 3) %>%
mutate(new_col = 1) %>%
ggplot() +
aes(x, y, colour = new_col) +
geom_point()
}
", file = file.path(dummypackage, "R", "function.R"))
expect_error(attachment::att_amend_desc(path = dummypackage))#,
# "Packages ggplot & ggplot3 are missing or misspelled.")
# Clean after
unlink(dummypackage, recursive = TRUE)
})
# missing pkg in vignette (Suggests) is not installed ----
test_that("missing pkg is not installed", {
# Copy package in a temporary directory
tmpdir <- tempfile("dummysuggestinstal")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# browseURL(dummypackage)
cat("
## The vignette
```{r}
library(glue)
library(ggplot3)
```
", file = file.path(dummypackage, "vignettes", "vignette.Rmd"))
expect_error(attachment::att_amend_desc(path = dummypackage,check_if_suggests_is_installed = TRUE),
"The package ggplot3 is missing or misspelled.")
# Clean after
unlink(dummypackage, recursive = TRUE)
})
# Test update desc when missing packages for books ----
tmpdir <- tempfile("miss")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"),
tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
test_that("att_to_desc_from_is can update DESCRIPTION w/o uninstalled packages", {
imports <- unique(
c("fakeinstalled", # Not exists
"bookdown", "knitr",
"pagedown", # Not installed on CI usually
att_from_rmds(file.path(dummypackage, "vignettes"), recursive = FALSE))
)
# Default to error
expect_error(att_to_desc_from_is(
path.d = file.path(dummypackage, "DESCRIPTION"),
imports = imports
), regexp = "missing or misspelled")
# must.exist = FALSE
expect_warning(
att_to_desc_from_is(
path.d = file.path(dummypackage, "DESCRIPTION"),
imports = imports,
must.exist = NA # then warning
),
regexp = "missing or misspelled")
expect_warning(
expect_error(
att_to_desc_from_is(
path.d = file.path(dummypackage, "DESCRIPTION"),
imports = imports,
must.exist = FALSE # then no error, no warning
), regexp = NA),
regexp = NA)
desc <- readLines(file.path(file.path(dummypackage, "DESCRIPTION")))
expect_true(any(grepl("fakeinstalled", desc)))
expect_true(any(grepl("bookdown", desc)))
expect_true(any(grepl("knitr", desc)))
expect_true(any(grepl("pagedown", desc)))
})
unlink(tmpdir, recursive = TRUE)
# Test manual
if (interactive()) {
skip_if_not(requireNamespace("rstudioapi"))
skip_if_not(rstudioapi::isAvailable())
# This requires a manual test in another session
# dummypackage <- tempfile('dummypackage')
# suppressMessages(
# usethis::create_package(
# path = dummypackage,
# open = FALSE,
# )
# )
answer <- rstudioapi::showQuestion(
"Run interactive test?",
paste("Do you want to open a new RStudio session for the test?\n",
"If yes, you will have to run: source('dev/test_to_run.R')"),
cancel = "no", ok = "yes")
if (isTRUE(answer)) {
tmpdir <- tempfile("manual")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"),
tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# Add a dummy function using an external dependency
# namely the {magrittr} pipe %>%
r_file <- file.path(dummypackage, "R", "fun_manual.R")
file.create(r_file)
#> [1] TRUE
writeLines(
text = "#' @importFrom magrittr %>%
#' @export
my_length <- function(x) {
x %>% length()
}",
con = r_file
)
dir.create(file.path(dummypackage, "dev"))
writeLines(
text = paste0(
"pkgload::load_all('", getwd(), "')\n",
"att_amend_desc()
# This should work without error
my_length(1)
"),
con = file.path(dummypackage, "dev", "test_to_run.R")
)
rstudioapi::openProject(path = dummypackage, newSession = TRUE)
answer2 <- rstudioapi::showQuestion(
"Did the code in 'dev/test_to_run.R' worked correctly ?",
paste("Did the code in 'dev/test_to_run.R' worked correctly ?",
"\n\n(You can close the RStudio session opened, the project will be deleted)"),
cancel = "no", ok = "yes")
test_that("if check_if_suggests_is_installed = FALSE no test is done on Suggests packages", {
expect_true(answer2)
})
unlink(tmpdir, recursive = TRUE)
}
}
# missing pkg in vignette (Suggests) is not installed but we dont check it ----
test_that("if check_if_suggests_is_installed = FALSE no test is done on Suggests packages", {
# Copy package in a temporary directory
tmpdir <- tempfile("dummysuggestcheck")
dir.create(tmpdir)
file.copy(system.file("dummypackage",package = "attachment"), tmpdir, recursive = TRUE)
dummypackage <- file.path(tmpdir, "dummypackage")
# browseURL(dummypackage)
cat("
## The vignette
```{r}
library(glue)
library(ggplot3)
```
", file = file.path(dummypackage, "vignettes", "vignette.Rmd"))
attachment::att_amend_desc(path = dummypackage,check_if_suggests_is_installed = FALSE)
desc_file <- readLines(file.path(dummypackage, "DESCRIPTION"))
w.depends <- grep("Depends:", desc_file)
expect_length(w.depends, 1)
expect_equal(desc_file[w.depends + 1], " R (>= 3.5.0)")
expect_equal(desc_file[w.depends + 2], "Imports: ")
expect_equal(desc_file[w.depends + 3], " magrittr,")
expect_equal(desc_file[w.depends + 4], " stats")
expect_equal(desc_file[w.depends + 5], "Suggests: ")
expect_equal(desc_file[w.depends + 6], " ggplot3,")
expect_equal(desc_file[w.depends + 7], " glue,")
expect_equal(desc_file[w.depends + 8], " knitr,")
expect_equal(desc_file[w.depends + 9], " rmarkdown,")
expect_equal(desc_file[w.depends + 10], " testthat")
expect_equal(desc_file[w.depends + 11], "LinkingTo:" )
expect_equal(desc_file[w.depends + 12], " Rcpp")
# Clean after
unlink(dummypackage, recursive = TRUE)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.