test_that("migrate_albersdown updates vignette params and theme call", {
skip_if_not_installed("yaml")
pkg <- file.path(tempdir(), paste0("albersdown-migrate-", Sys.getpid()))
dir.create(pkg, recursive = TRUE, showWarnings = FALSE)
writeLines(c(
"Package: demo",
"Version: 0.0.0.9000",
"Title: Demo",
"Authors@R: person(\"Demo\", \"User\", email = \"demo@example.com\", role = c(\"aut\", \"cre\"))",
"Description: Demo package.",
"License: MIT"
), file.path(pkg, "DESCRIPTION"))
writeLines("# Demo", file.path(pkg, "README.md"))
dir.create(file.path(pkg, "vignettes"), showWarnings = FALSE)
writeLines(c(
"---",
"title: \"Demo\"",
"output: rmarkdown::html_vignette",
"params:",
" family: red",
"vignette: >",
" %\\VignetteIndexEntry{Demo}",
" %\\VignetteEngine{knitr::rmarkdown}",
" %\\VignetteEncoding{UTF-8}",
"---",
"",
"```{r setup, include=FALSE}",
"library(ggplot2)",
"if (requireNamespace(\"albersdown\", quietly = TRUE)) {",
" ggplot2::theme_set(albersdown::theme_albers(",
" family = params$family,",
" base_size = 13",
" ))",
"}",
"```",
"",
"Demo text."
), file.path(pkg, "vignettes", "demo.Rmd"))
migrate_albersdown(path = pkg, family = "teal", preset = "midnight", dry_run = FALSE)
migrated <- readLines(file.path(pkg, "vignettes", "demo.Rmd"), warn = FALSE)
expect_true(any(grepl("^\\s+preset:\\s+midnight\\s*$", migrated)))
expect_true(any(grepl("^\\s+family:\\s+teal\\s*$", migrated)))
expect_true(any(grepl("^\\s+css:\\s+albers\\.css\\s*$", migrated)))
expect_true(any(grepl("^\\s+in_header:\\s+albers-header\\.html\\s*$", migrated)))
expect_true(any(grepl("^-\\s+albers-header\\.html\\s*$", migrated)))
expect_true(any(grepl(
"theme_set\\(albersdown::theme_albers\\(family = params\\$family, preset = params\\$preset\\)\\)",
migrated,
perl = TRUE
)))
expect_equal(sum(grepl("^```\\{r albers-classes, echo=FALSE, results='asis'\\}\\s*$", migrated)), 1)
expect_false(any(grepl("^\\s*base_size\\s*=\\s*13\\s*$", migrated)))
expect_equal(tools::vignetteInfo(file.path(pkg, "vignettes", "demo.Rmd"))$engine, "knitr::rmarkdown")
})
test_that("migrate_albersdown patches all adjoin-shaped vignettes", {
skip_if_not_installed("yaml")
pkg <- file.path(tempdir(), paste0("albersdown-adjoin-shaped-", Sys.getpid()))
dir.create(pkg, recursive = TRUE, showWarnings = FALSE)
writeLines(c(
"Package: demo",
"Version: 0.0.0.9000",
"Title: Demo",
"Authors@R: person(\"Demo\", \"User\", email = \"demo@example.com\", role = c(\"aut\", \"cre\"))",
"Description: Demo package.",
"License: MIT"
), file.path(pkg, "DESCRIPTION"))
writeLines("# Demo", file.path(pkg, "README.md"))
dir.create(file.path(pkg, "vignettes"), showWarnings = FALSE)
writeLines("/* css */", file.path(pkg, "vignettes", "albers.css"))
writeLines("// js", file.path(pkg, "vignettes", "albers.js"))
writeLines("", file.path(pkg, "vignettes", "albers-header.html"))
writeLines(c(
"---",
"title: Getting Started with demo",
"output:",
" rmarkdown::html_vignette:",
" toc: yes",
" toc_depth: 2",
" css: albers.css",
" includes:",
" in_header: albers-header.html",
"params:",
" family: teal",
" preset: homage",
"resource_files:",
"- albers.css",
"- albers.js",
"- albers-header.html",
"vignette: >",
" %\\VignetteIndexEntry{Getting Started with demo}",
" %\\VignetteEngine{knitr::rmarkdown}",
" %\\VignetteEncoding{UTF-8}",
"---",
"",
"```{r setup, include=FALSE}",
"knitr::opts_chunk$set(collapse = TRUE)",
"```",
"",
"Demo text."
), file.path(pkg, "vignettes", "demo.Rmd"))
writeLines(c(
"---",
"title: \"Spatial Neighbor Graphs\"",
"output: rmarkdown::html_vignette",
"vignette: >",
" %\\VignetteIndexEntry{Spatial Neighbor Graphs}",
" %\\VignetteEngine{knitr::rmarkdown}",
" %\\VignetteEncoding{UTF-8}",
"---",
"",
"```{r setup, include=FALSE}",
"knitr::opts_chunk$set(collapse = TRUE)",
"```",
"",
"Spatial text."
), file.path(pkg, "vignettes", "spatial-neighbors.Rmd"))
migrate_albersdown(path = pkg, family = "teal", preset = "homage", dry_run = FALSE)
second <- file.path(pkg, "vignettes", "spatial-neighbors.Rmd")
second_yaml <- .inspect_vignette_theme_yaml(second)
expect_true(second_yaml$nested_css)
expect_true(second_yaml$nested_header)
expect_true(second_yaml$resources)
expect_false(second_yaml$legacy_css)
expect_false(second_yaml$legacy_header)
second_lines <- readLines(second, warn = FALSE)
expect_equal(tools::vignetteInfo(second)$engine, "knitr::rmarkdown")
expect_equal(sum(grepl("^\\s*%\\\\Vignette", second_lines)), 3)
expect_equal(sum(grepl("^```\\{r albers-classes, echo=FALSE, results='asis'\\}\\s*$", second_lines)), 1)
})
test_that("use_albersdown writes renderable html_vignette hooks for non-red families", {
skip_if_not_installed("yaml")
skip_if_not_installed("rmarkdown")
pkg <- file.path(tempdir(), paste0("albersdown-render-", Sys.getpid()))
dir.create(pkg, recursive = TRUE, showWarnings = FALSE)
writeLines(c(
"Package: demo",
"Version: 0.0.0.9000",
"Title: Demo",
"Authors@R: person(\"Demo\", \"User\", email = \"demo@example.com\", role = c(\"aut\", \"cre\"))",
"Description: Demo package.",
"License: MIT"
), file.path(pkg, "DESCRIPTION"))
writeLines("# Demo", file.path(pkg, "README.md"))
dir.create(file.path(pkg, "vignettes"), showWarnings = FALSE)
writeLines(c(
"---",
"title: \"Demo\"",
"output: rmarkdown::html_vignette",
"vignette: >",
" %\\VignetteIndexEntry{Demo}",
" %\\VignetteEngine{knitr::rmarkdown}",
" %\\VignetteEncoding{UTF-8}",
"---",
"",
"```{r setup, include=FALSE}",
"library(ggplot2)",
"if (requireNamespace(\"systemfonts\", quietly = TRUE)) albersdown::albers_register_fonts()",
"```",
"",
"Demo text."
), file.path(pkg, "vignettes", "demo.Rmd"))
use_albersdown(path = pkg, family = "teal", preset = "midnight", apply_to = "all", dry_run = FALSE)
migrated <- readLines(file.path(pkg, "vignettes", "demo.Rmd"), warn = FALSE)
expect_true(any(grepl("^vignette:\\s+\\|\\s*$", migrated)))
expect_false(any(grepl("^vignette:\\s*'", migrated)))
expect_true(file.exists(file.path(pkg, "pkgdown", "extra.css")))
expect_true(file.exists(file.path(pkg, "pkgdown", "extra.js")))
expect_true(any(grepl("@import url\\(\"albers\\.css\"\\);", readLines(file.path(pkg, "pkgdown", "extra.css"), warn = FALSE))))
extra_js <- readLines(file.path(pkg, "pkgdown", "extra.js"), warn = FALSE)
expect_true(any(grepl("palette-teal", extra_js, fixed = TRUE)))
expect_true(any(grepl("preset-midnight", extra_js, fixed = TRUE)))
old <- setwd(pkg)
on.exit(setwd(old), add = TRUE)
old_opt <- options(rmarkdown.html_vignette.check_title = FALSE)
on.exit(options(old_opt), add = TRUE)
rmarkdown::render(file.path("vignettes", "demo.Rmd"), output_file = file.path(pkg, "demo.html"), quiet = TRUE)
html <- readLines(file.path(pkg, "demo.html"), warn = FALSE)
expect_true(any(grepl("FAMILY_CLASSES|navigator\\.clipboard|data-bs-theme", html)))
expect_true(any(grepl("palette-teal", html)))
expect_true(any(grepl("preset-midnight", html)))
expect_true(any(grepl("albers\\.css|0D4A4A|0d4a4a", html)))
})
test_that("use_albersdown accepts interaction as a current visual direction", {
skip_if_not_installed("yaml")
pkg <- file.path(tempdir(), paste0("albersdown-interaction-", Sys.getpid()))
dir.create(pkg, recursive = TRUE, showWarnings = FALSE)
writeLines(c(
"Package: demo",
"Version: 0.0.0.9000",
"Title: Demo",
"Authors@R: person(\"Demo\", \"User\", email = \"demo@example.com\", role = c(\"aut\", \"cre\"))",
"Description: Demo package.",
"License: MIT"
), file.path(pkg, "DESCRIPTION"))
writeLines("# Demo", file.path(pkg, "README.md"))
dir.create(file.path(pkg, "vignettes"), showWarnings = FALSE)
writeLines(c(
"---",
"title: \"Demo\"",
"output: rmarkdown::html_vignette",
"vignette: >",
" %\\VignetteIndexEntry{Demo}",
" %\\VignetteEngine{knitr::rmarkdown}",
" %\\VignetteEncoding{UTF-8}",
"---",
"",
"```{r setup, include=FALSE}",
"library(ggplot2)",
"```",
"",
"Demo text."
), file.path(pkg, "vignettes", "demo.Rmd"))
use_albersdown(path = pkg, family = "lapis", preset = "interaction", apply_to = "all", dry_run = FALSE)
migrated <- readLines(file.path(pkg, "vignettes", "demo.Rmd"), warn = FALSE)
extra_js <- readLines(file.path(pkg, "pkgdown", "extra.js"), warn = FALSE)
expect_true(any(grepl("^\\s+preset:\\s+interaction\\s*$", migrated)))
expect_true(any(grepl("preset-interaction", migrated, fixed = TRUE)))
expect_true(any(grepl("preset-interaction", extra_js, fixed = TRUE)))
})
test_that("use_albersdown migrates legacy CRAN-shaped top-level vignette hooks", {
skip_if_not_installed("yaml")
skip_if_not_installed("rmarkdown")
pkg <- file.path(tempdir(), paste0("albersdown-legacy-render-", Sys.getpid()))
dir.create(pkg, recursive = TRUE, showWarnings = FALSE)
writeLines(c(
"Package: demo",
"Version: 0.0.0.9000",
"Title: Demo",
"Authors@R: person(\"Demo\", \"User\", email = \"demo@example.com\", role = c(\"aut\", \"cre\"))",
"Description: Demo package.",
"License: MIT"
), file.path(pkg, "DESCRIPTION"))
writeLines("# Demo", file.path(pkg, "README.md"))
dir.create(file.path(pkg, "vignettes"), showWarnings = FALSE)
writeLines(c(
"---",
"title: \"Demo\"",
"output:",
" rmarkdown::html_vignette:",
" toc: yes",
" toc_depth: 2",
"params:",
" family: red",
" preset: study",
"vignette: |",
" %\\VignetteIndexEntry{Demo}",
" %\\VignetteEngine{knitr::rmarkdown}",
" %\\VignetteEncoding{UTF-8}",
"css: albers.css",
"resource_files:",
"- albers.css",
"- albers.js",
"includes:",
" in_header: |-",
" ",
"---",
"",
"```{r setup, include=FALSE}",
"library(ggplot2)",
"```",
"",
"Demo text."
), file.path(pkg, "vignettes", "demo.Rmd"))
before <- .inspect_vignette_theme_yaml(file.path(pkg, "vignettes", "demo.Rmd"))
expect_true(before$legacy_css)
expect_true(before$legacy_header)
expect_false(before$nested_css)
expect_false(before$nested_header)
use_albersdown(path = pkg, family = "teal", preset = "midnight", apply_to = "all", dry_run = FALSE)
migrated <- readLines(file.path(pkg, "vignettes", "demo.Rmd"), warn = FALSE)
fence <- which(migrated == "---")
y <- yaml::yaml.load(paste(migrated[(fence[1] + 1):(fence[2] - 1)], collapse = "\n"))
html_vignette <- y$output[["rmarkdown::html_vignette"]]
after <- .inspect_vignette_theme_yaml(file.path(pkg, "vignettes", "demo.Rmd"))
expect_null(y$css)
expect_null(y$includes)
expect_equal(html_vignette$css, "albers.css")
expect_equal(html_vignette$includes$in_header, "albers-header.html")
expect_true(all(c("albers.css", "albers.js", "albers-header.html") %in% y$resource_files))
expect_false(after$legacy_css)
expect_false(after$legacy_header)
expect_true(after$nested_css)
expect_true(after$nested_header)
old <- setwd(pkg)
on.exit(setwd(old), add = TRUE)
old_opt <- options(rmarkdown.html_vignette.check_title = FALSE)
on.exit(options(old_opt), add = TRUE)
rmarkdown::render(file.path("vignettes", "demo.Rmd"), output_file = file.path(pkg, "demo.html"), quiet = TRUE)
html <- readLines(file.path(pkg, "demo.html"), warn = FALSE)
expect_true(any(grepl("--A900", html, fixed = TRUE)))
expect_true(any(grepl("FAMILY_CLASSES|navigator\\.clipboard|data-bs-theme", html)))
expect_true(any(grepl("palette-teal", html, fixed = TRUE)))
expect_true(any(grepl("preset-midnight", html, fixed = TRUE)))
})
test_that("use_albers_vignettes defaults to the current package path", {
skip_if_not_installed("yaml")
pkg <- file.path(tempdir(), paste0("albersdown-wrapper-", Sys.getpid()))
dir.create(pkg, recursive = TRUE, showWarnings = FALSE)
writeLines(c(
"Package: demo",
"Version: 0.0.0.9000",
"Title: Demo",
"Authors@R: person(\"Demo\", \"User\", email = \"demo@example.com\", role = c(\"aut\", \"cre\"))",
"Description: Demo package.",
"License: MIT"
), file.path(pkg, "DESCRIPTION"))
writeLines("# Demo", file.path(pkg, "README.md"))
old <- setwd(pkg)
on.exit(setwd(old), add = TRUE)
expect_true(use_albers_vignettes())
expect_true(file.exists(file.path(pkg, "vignettes", "albers.css")))
expect_true(file.exists(file.path(pkg, "vignettes", "albers.js")))
expect_true(file.exists(file.path(pkg, "vignettes", "albers-header.html")))
expect_true(file.exists(file.path(pkg, "_pkgdown.yml")))
})
test_that("migrate_albersdown is idempotent for README note and class hook", {
skip_if_not_installed("yaml")
pkg <- file.path(tempdir(), paste0("albersdown-idempotent-", Sys.getpid()))
dir.create(pkg, recursive = TRUE, showWarnings = FALSE)
writeLines(c(
"Package: demo",
"Version: 0.0.0.9000",
"Title: Demo",
"Authors@R: person(\"Demo\", \"User\", email = \"demo@example.com\", role = c(\"aut\", \"cre\"))",
"Description: Demo package.",
"License: MIT"
), file.path(pkg, "DESCRIPTION"))
writeLines("# Demo", file.path(pkg, "README.md"))
dir.create(file.path(pkg, "vignettes"), showWarnings = FALSE)
writeLines(c(
"---",
"title: \"Demo\"",
"output: rmarkdown::html_vignette",
"vignette: >",
" %\\VignetteIndexEntry{Demo}",
" %\\VignetteEngine{knitr::rmarkdown}",
" %\\VignetteEncoding{UTF-8}",
"---",
"",
"```{r setup, include=FALSE}",
"library(ggplot2)",
"```",
"",
"Demo text."
), file.path(pkg, "vignettes", "demo.Rmd"))
migrate_albersdown(path = pkg, family = "teal", preset = "midnight", dry_run = FALSE)
migrate_albersdown(path = pkg, family = "teal", preset = "midnight", dry_run = FALSE)
readme <- readLines(file.path(pkg, "README.md"), warn = FALSE)
migrated <- readLines(file.path(pkg, "vignettes", "demo.Rmd"), warn = FALSE)
expect_equal(sum(grepl("^$", readme)), 1)
expect_equal(sum(grepl("^$", readme)), 1)
expect_equal(sum(grepl("^```\\{r albers-classes, echo=FALSE, results='asis'\\}\\s*$", migrated)), 1)
expect_false(any(grepl(
"^\\s*if \\(requireNamespace\\(\"systemfonts\", quietly = TRUE\\)\\) albersdown::albers_register_fonts\\(\\)\\s*$",
migrated
)))
expect_true(any(grepl(
"\"albers_register_fonts\" %in% getNamespaceExports(\"albersdown\")",
migrated,
fixed = TRUE
)))
})
test_that("migrate_albersdown carries family defaults into pkgdown fallback assets", {
skip_if_not_installed("yaml")
pkg <- file.path(tempdir(), paste0("albersdown-site-", Sys.getpid()))
dir.create(pkg, recursive = TRUE, showWarnings = FALSE)
writeLines(c(
"Package: demo",
"Version: 0.0.0.9000",
"Title: Demo",
"Authors@R: person(\"Demo\", \"User\", email = \"demo@example.com\", role = c(\"aut\", \"cre\"))",
"Description: Demo package.",
"License: MIT"
), file.path(pkg, "DESCRIPTION"))
writeLines("# Demo", file.path(pkg, "README.md"))
dir.create(file.path(pkg, "vignettes"), showWarnings = FALSE)
writeLines(c(
"---",
"title: \"Demo\"",
"output: rmarkdown::html_vignette",
"vignette: >",
" %\\VignetteIndexEntry{Demo}",
" %\\VignetteEngine{knitr::rmarkdown}",
" %\\VignetteEncoding{UTF-8}",
"---",
"",
"```{r setup, include=FALSE}",
"library(ggplot2)",
"```",
"",
"Demo text."
), file.path(pkg, "vignettes", "demo.Rmd"))
migrate_albersdown(path = pkg, family = "ochre", preset = "homage", dry_run = FALSE)
cfg <- yaml::read_yaml(file.path(pkg, "_pkgdown.yml"))
extra_css <- readLines(file.path(pkg, "pkgdown", "extra.css"), warn = FALSE)
extra_js <- readLines(file.path(pkg, "pkgdown", "extra.js"), warn = FALSE)
expect_equal(cfg$template$package, "albersdown")
expect_equal(cfg$template$bootstrap, 5)
expect_true(any(grepl("@import url\\(\"albers\\.css\"\\);", extra_css)))
expect_true(any(grepl("palette-ochre", extra_js, fixed = TRUE)))
expect_true(any(grepl("preset-homage", extra_js, fixed = TRUE)))
})