R/test.r

test_process <- function(text, behaviour = no_output()) {
  bundle <- parse_block(text)
  blocks <- process(bundle)@blocks
  blocks[[length(blocks)]]
}

test_rd <- function(text) {
  bundle <- parse_block(text)
  bundle <- process(bundle)
  build_rd(bundle@blocks)
}
test_ns <- function(text) {
  bundle <- parse_block(text)
  bundle <- process(bundle)
  build_namespace(bundle@blocks)
}

#' Parse and execute a block of text in a package like environment.
#'
#' This is used cheifly for testing.
#'
#' @param text code to parse/execute
#' @param behaviour a \code{\linkS4class{Behaviour}} object, specifying which
#'   tags, processors and writers to use.
#' @autoImports
#' @export
#' @keywords internal
parse_block <- function(text, behaviour = no_output()) {
  pkg_dummy <- structure(
    list(path = tempfile(), package = "temp", version = 0.01),
    class = "package")
  env <- devtools:::create_ns_env(pkg_dummy)
  on.exit(unload(pkg_dummy))

  src <- srcfilecopy(digest(text), text)
  expr <- parse(text = text, srcfile = src)
  eval(expr, env = env)

  lines <- str_split(text, "\n")[[1]]
  blocks <- parse_text(lines, env, src, default_tags = behaviour@tags)

  new("Bundle",
    blocks = blocks,
    behaviour = behaviour)
}

no_output <- function() {
  new("Behaviour",
    tags = base_tags(),
    processors = local_apropos("^process[A-Z_]"),
    writers = character()
  )
}
hadley/roxygen3 documentation built on May 17, 2019, 12:16 p.m.