blob: 462962fe992f80abc29cf255376dee4df4e831bc [file] [log] [blame]
require("tools")
x <- Rd_db("base")
system.time(y <- lapply(x, function(e)
tryCatch(Rd2HTML(e, out = nullfile()), error = identity))) # 3-5 sec
stopifnot(!vapply(y, inherits, NA, "error"))
## Gave error when "running" \Sexpr{.} DateTimeClasses.Rd
## PR#18052: \dots must not be interpreted inside \preformatted
Rdsnippet <- tempfile()
writeLines(r"(\preformatted{
\item{\dots}{foo(arg = "\\\\dots", ...)}
})", Rdsnippet)
#file.show(Rdsnippet)
stopifnot(exprs = {
identical(capture.output(Rd2HTML(Rdsnippet, fragment = TRUE))[2L],
r"(\item{\dots}{foo(arg = "\\dots", ...)})")
identical(capture.output(Rd2txt(Rdsnippet, fragment = TRUE))[2L],
r"(\item{\dots}{foo(arg = "\\dots", ...)})")
identical(capture.output(Rd2latex(Rdsnippet, fragment = TRUE))[2L],
r"(\bsl{}item\{\bsl{}dots\}\{foo(arg = "\bsl{}\bsl{}dots", ...)\})")
}) # the last two failed in R < 4.1.0
## also do not translate \dots in R code lines in \examples
Rdsnippet <- tempfile()
writeLines(r"(\examples{
foo <- function(arg = "\\\\dots", ...) NULL # \dots
})", Rdsnippet)
#file.show(Rdsnippet)
stopifnot(exprs = {
identical(capture.output(Rd2ex(parse_Rd(Rdsnippet), fragment = TRUE))[5L],
r"(foo <- function(arg = "\\dots", ...) NULL # \dots)")
}) # failed in R < 4.1.0
## \usage: keep quoted "\\\\dots", but _do_ translate formal \dots arg
Rdsnippet <- tempfile()
writeLines(r"(\name{foo}\title{foo}\usage{
## keep this comment to ensure a newline at the end
foo(arg = "\\\\dots", \dots)
})", Rdsnippet)
Rdobj <- parse_Rd(Rdsnippet)
check_dots_usage <- function(FUN) {
out <- trimws(grep("foo(", capture.output(FUN(Rdobj)),
value = TRUE, fixed = TRUE))
if (!identical(out, r"(foo(arg = "\\dots", ...))"))
stop("unexpected output: ", out)
}
check_dots_usage(Rd2HTML)
check_dots_usage(Rd2txt)
check_dots_usage(Rd2latex)
## the last two failed in R < 4.1.0; output was foo(arg = "\...", ...)