test_that("authors page includes inst/AUTHORS", { pkg <- local_pkgdown_site() pkg <- pkg_add_file(pkg, "inst/AUTHORS", "Hello") suppressMessages(build_citation_authors(pkg)) lines <- read_lines(path(pkg$dst_path, "authors.html")) expect_match(lines, "
Hello
", all = FALSE) }) test_that("data_authors validates yaml inputs", { data_authors_ <- function(...) { pkg <- local_pkgdown_site(meta = list(...)) data_authors(pkg) } expect_snapshot(error = TRUE, { data_authors_(authors = 1) data_authors_(template = list(authors = list(before = 1))) data_authors_(template = list(authors = list(after = 1))) }) }) test_that("data_home_sidebar_authors validates yaml inputs", { data_home_sidebar_authors_ <- function(...) { pkg <- local_pkgdown_site(meta = list(...)) data_home_sidebar_authors(pkg) } expect_snapshot(error = TRUE, { data_home_sidebar_authors_(authors = list(sidebar = list(roles = 1))) data_home_sidebar_authors_(authors = list(sidebar = list(before = 1))) data_home_sidebar_authors_(authors = list(sidebar = list(before = "x\n\ny"))) }) }) # authors -------------------------------------------------------------------- test_that("ORCID can be identified & removed from all comment styles", { desc <- desc::desc(text = c( 'Authors@R: c(', ' person("no comment"),', ' person("bare comment", comment = "comment"),', ' person("orcid only", comment = c(ORCID = "1")),', ' person("both", comment = c("comment", ORCID = "2"))', ' )' )) authors <- purrr::map(desc$get_authors(), author_list, list()) expect_equal( purrr::map(authors, "orcid"), list(NULL, NULL, orcid_link("1"), orcid_link("2")) ) expect_equal( purrr::map(authors, "comment"), list(character(), "comment", character(), "comment") ) }) test_that("author comments linkified with escaped angle brackets (#2127)", { p <- list(name = "Jane Doe", roles = "rev", comment = "") expect_match( author_desc(p), "<https://x.org/>", fixed = TRUE ) }) test_that("authors data can be filtered with different roles", { pkg <- local_pkgdown_site(desc = list(`Authors@R` = ' c( person("Hadley", "Wickham", , "hadley@rstudio.com", role = c("aut", "cre")), person("RStudio", role = c("cph", "fnd")) )' )) expect_length(data_authors(pkg)$main, 2) expect_length(data_authors(pkg, roles = "cre")$main, 1) }) test_that("authors data includes inst/AUTHORS", { pkg <- local_pkgdown_site() pkg <- pkg_add_file(pkg, "inst/AUTHORS", "Hello") expect_equal(data_authors(pkg)$inst, "Hello") }) test_that("sidebar can accept additional before and after text", { pkg <- local_pkgdown_site() pkg$meta$authors$sidebar$before <- "BEFORE" pkg$meta$authors$sidebar$after <- "AFTER" expect_snapshot(cat(data_home_sidebar_authors(pkg))) }) test_that("role has multiple fallbacks", { expect_equal(role_lookup("cre"), "maintainer") expect_equal(role_lookup("res"), "researcher") expect_snapshot(role_lookup("unknown")) }) # citations ------------------------------------------------------------------- test_that("can handle UTF-8 encoding (#416, #493)", { # Work around bug in utils::citation() local_options(warnPartialMatchDollar = FALSE) pkg <- local_pkgdown_site(desc = list( Title = "A søphîstiçated påckagé", Date = "2018-02-02" )) meta <- create_citation_meta(pkg$src_path) expect_type(meta, "list") expect_equal(meta$Title, "A søphîstiçated påckagé") pkg <- pkg_add_file(pkg, "inst/CITATION", c( 'citEntry(', ' entry = "Article",', ' title="Title: é",', ' author="Author: é",', ' journal="Journal é",', ' year="2017",', ' textVersion = "é"', ')' )) cit <- read_citation(pkg$src_path) expect_s3_class(cit, "citation") pkg <- pkg_add_file(pkg, "inst/CITATION", "citation(auto = meta)") cit <- read_citation(pkg$src_path) expect_s3_class(cit, "citation") }) test_that("can handle latin1 encoding (#689)", { pkg <- local_pkgdown_site(desc = list( Title = "A søphîstiçated påckagé", Date = "2018-02-02", Encoding = "latin1" )) meta <- create_citation_meta(pkg$src_path) expect_equal(meta$Title, "A søphîstiçated påckagé") expect_equal(Encoding(meta$Title), "UTF-8") pkg <- pkg_add_file(pkg, "inst/CITATION", c( 'citEntry(', ' entry = "Article",', ' title="Title: é",', ' author="Author: é",', ' journal="Journal é",', ' year="2017",', ' textVersion = "é"', ')' )) cit_path <- path(pkg$src_path, "inst/CITATION") citation <- readLines(cit_path) # nolint con <- file(cit_path, open = "w+", encoding = "native.enc") withr::defer(close(con)) base::writeLines(iconv(citation, to = "latin1"), con, useBytes = TRUE) # nolint cit <- read_citation(pkg$src_path) expect_s3_class(cit, "citation") pkg <- pkg_add_file(pkg, "inst/CITATION", "citation(auto = meta)") cit <- read_citation(pkg$src_path) expect_s3_class(cit, "citation") }) test_that("source link is added to citation page", { # Work around bug in utils::citation() local_options(warnPartialMatchDollar = FALSE) pkg <- local_pkgdown_site(meta = list( repo = list(url = list(source = "http://github.com/test/test")) )) pkg <- pkg_add_file(pkg, "inst/CITATION", c( 'citEntry(', ' entry = "Article",', ' title="Title",', ' author="Author",', ' journal="Journal",', ' year="2020",', ' textVersion = ""', ')' )) suppressMessages(build_citation_authors(pkg)) lines <- read_lines(path(pkg$dst_path, "authors.html")) expect_match(lines, "inst/CITATION", all = FALSE, fixed = TRUE) }) test_that("multiple citations all have HTML and BibTeX formats", { pkg <- local_pkgdown_site() pkg <- pkg_add_file(pkg, "inst/CITATION", c( 'bibentry("misc", title="Proof of b < a > c", author=c("A", "B"), year="2021", textVersion="A & B (2021): Proof of b < a > c.")', 'bibentry("misc", title="Title Two", author="Author Two", year="2022")' )) citations <- data_citations(pkg$src_path) expect_snapshot_output(citations) }) test_that("bibtex is escaped", { pkg <- local_pkgdown_site() pkg <- pkg_add_file(pkg, "inst/CITATION", c( 'citEntry(', ' entry = "Article",', ' title="test special HTML characters: <&>",', ' author="x",', ' journal="x",', ' year="2017",', ' textVersion = ""', ')' )) suppressMessages(build_citation_authors(pkg)) html <- xml2::read_html(path(pkg$dst_path, "authors.html")) expect_match(xpath_text(html, "//pre"), "<&>", fixed = TRUE) })