test_that("template_candidates look for specific first", {
expect_equal(
path_file(template_candidates("content", "article")),
c("content-article.html", "content.html")
)
})
test_that("template_candidates look in template dir then pkgdown", {
pkg_dir <- withr::local_tempdir()
template_dir <- withr::local_tempdir()
pkg <- list(
src_path = pkg_dir,
meta = list(template = list(path = template_dir)),
bs_version = 3
)
# ensure that templates_dir(pkg) returns the specific template path
expect_equal(templates_dir(pkg), path(template_dir))
paths <- template_candidates("content", "article", pkg = pkg)
dirs <- unique(path_dir(paths))
expect_equal(
dirs,
c( # search for candidates...
path(pkg_dir, "pkgdown", "templates"), # first in local templates
path(template_dir), # second in global template path
path_pkgdown("BS3", "templates") # finally in pkgdown templates
)
)
})
test_that("look for templates_dir in right places", {
dir <- withr::local_tempdir()
pkg <- list(src_path = dir, meta = list(template = list()))
# Look in site templates
expect_equal(templates_dir(pkg), path(dir, "pkgdown", "templates"))
# Look in specified directory
pkg$meta$template$path <- path(withr::local_tempdir())
expect_equal(templates_dir(pkg), pkg$meta$template$path)
})
test_that("find templates in local pkgdown first", {
pkg <- test_path("assets", "templates-local")
# local template used over default pkgdown template
expect_equal(
find_template("content", "article", pkg = pkg),
path_abs(path(pkg, "pkgdown", "templates", "content-article.html"))
)
expect_equal(
find_template("footer", "article", pkg = pkg),
path_abs(path(pkg, "pkgdown", "templates", "footer-article.html"))
)
# pkgdown template used (no local template)
expect_equal(
find_template("content", "tutorial", pkg = pkg),
path_pkgdown("BS3", "templates", "content-tutorial.html")
)
expect_equal(
find_template("footer", "ignored", pkg = pkg),
path_pkgdown("BS3", "templates", "footer.html")
)
})
# Expected contents -------------------------------------------------------
test_that("BS5 templates have main + aside", {
names <- dir(path_pkgdown("bs5", "templates"), pattern = "content-")
names <- path_ext_remove(names)
names <- gsub("content-", "", names)
templates <- lapply(names, read_template_html,
type = "content",
pkg = list(bs_version = 5)
)
for (i in seq_along(templates)) {
template <- templates[[i]]
name <- names[[i]]
expect_equal(xpath_length(template, ".//div/main"), 1, info = name)
expect_equal(xpath_attr(template, ".//div/main", "id"), "main", info = name)
expect_equal(xpath_length(template, ".//div/aside"), 1, info = name)
expect_equal(xpath_attr(template, ".//div/aside", "class"), "col-md-3", info = name)
}
})
# Bootstrap version resolution --------------------------------------------
test_that("Bootstrap version in template package under `template.bootstrap`", {
path_template_package <- local_pkgdown_template_pkg(
meta = list(template = list(bootstrap = 5))
)
pkg <- local_pkgdown_site(meta = list(template = list(package = "templatepackage")))
expect_equal(pkg$bs_version, 5)
})
test_that("Bootstrap version in template package under `template.bslib.version`", {
path_template_package <- local_pkgdown_template_pkg(
meta = list(template = list(bslib = list(version = 5)))
)
pkg <- local_pkgdown_site(meta = list(template = list(package = "templatepackage")))
expect_equal(pkg$bs_version, 5)
})
test_that("Invalid bootstrap version spec in template package", {
path_template_package <- local_pkgdown_template_pkg(
meta = list(template = list(bootstrap = 4, bslib = list(version = 5)))
)
expect_snapshot(
error = TRUE,
local_pkgdown_site(meta = list(template = list(package = "templatepackage")))
)
})
test_that("Invalid bootstrap version spec in _pkgdown.yml", {
expect_snapshot(
error = TRUE,
local_pkgdown_site(meta = list(template = list(
bootstrap = 4, bslib = list(version = 5)
)))
)
})
test_that("Valid local Bootstrap version masks invalid template package", {
path_template_package <- local_pkgdown_template_pkg(
meta = list(template = list(bootstrap = 4, bslib = list(version = 5)))
)
expect_no_error(
local_pkgdown_site(meta = list(template = list(
package = "templatepackage",
bootstrap = 5
)))
)
})
# Bootstrap theme resolution ----------------------------------------------
test_that("Finds Bootstrap theme in all the places", {
pkg_sketchy <- local_pkgdown_site(meta = '
template:
bslib:
preset: sketchy
version: 5
')
pkg_superhero <- local_pkgdown_site(meta = '
template:
bslib:
preset: superhero
version: 5
')
pkg_cosmo <- local_pkgdown_site(meta = '
template:
bootstrap: 5
bootswatch: cosmo
')
pkg_yeti <- local_pkgdown_site(meta = '
template:
bootstrap: 5
params:
bootswatch: yeti
')
expect_equal(get_bslib_theme(pkg_sketchy), "sketchy")
expect_equal(get_bslib_theme(pkg_superhero), "superhero")
expect_equal(get_bslib_theme(pkg_cosmo), "cosmo")
expect_equal(get_bslib_theme(pkg_yeti), "yeti")
})
test_that("Warns when Bootstrap theme is specified in multiple locations", {
pkg <- local_pkgdown_site(meta = '
template:
bootstrap: 5
bootswatch: cerulean
bslib:
preset: flatly
bootswatch: lux
params:
bootswatch: darkly
')
expect_snapshot_warning(
get_bslib_theme(pkg)
)
})
test_that("Doesn't warn when the same Bootstrap theme is specified in multiple locations", {
pkg <- local_pkgdown_site(meta = '
template:
bootswatch: cerulean
bslib:
preset: cerulean
')
expect_equal(
expect_silent(get_bslib_theme(pkg)),
"cerulean"
)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.