diff --git a/NAMESPACE b/NAMESPACE index 2bdcb4d0d..35d0056ee 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -125,6 +125,7 @@ export(use_rcpp) export(use_readme_rmd) export(use_revdep) export(use_rstudio) +export(use_test) export(use_testthat) export(use_travis) export(use_vignette) diff --git a/NEWS.md b/NEWS.md index a9b713245..2b67da265 100644 --- a/NEWS.md +++ b/NEWS.md @@ -10,6 +10,8 @@ * `use_code_of_conduct()` adds a contributor code of conduct from http://contributor-covenant.org. (#729) +* `use_test()` adds a new test file (#769, @krlmlr). + * `system_check()` combines arguments with ` `, not `, `. (#753) * `lint()` gains a `cache` argument (@jimhester, #708). diff --git a/R/infrastructure.R b/R/infrastructure.R index 2e75bca0f..de72fdf0a 100644 --- a/R/infrastructure.R +++ b/R/infrastructure.R @@ -36,6 +36,33 @@ use_testthat <- function(pkg = ".") { #' @export add_test_infrastructure <- use_testthat +#' @section \code{use_test}: +#' Add a test file, also add testing infrastructure if necessary. +#' This will create \file{tests/testthat/test-.R} with a user-specified +#' name for the test. Will fail if the file exists. +#' @rdname infrastructure +#' @aliases add_test_infrastructure +#' @export +use_test <- function(name, pkg = ".") { + pkg <- as.package(pkg) + + check_testthat() + if (!uses_testthat(pkg)) { + use_testthat(pkg) + } + + path <- sprintf("test-%s.R", name) + if (file.exists(path)) { + stop("File ", path, " exists", call. = FALSE) + } + + writeLines( + render_template("test-example.R", list(test_name = name)), + file.path(pkg$path, "tests", "testthat", path)) + + message("Test file created in ", path) +} + #' @section \code{use_rstudio}: #' Does not modify \code{.Rbuildignore} as RStudio will do that when #' opened for the first time. diff --git a/inst/templates/test-example.R b/inst/templates/test-example.R new file mode 100644 index 000000000..6557ef064 --- /dev/null +++ b/inst/templates/test-example.R @@ -0,0 +1,8 @@ +context("{{{ test_name }}}") + +## TODO: Rename context +## TODO: Add more tests + +test_that("multiplication works", { + expect_equal(2 * 2, 4) +}) diff --git a/man/infrastructure.Rd b/man/infrastructure.Rd index 0b084ad9a..46778fff6 100644 --- a/man/infrastructure.Rd +++ b/man/infrastructure.Rd @@ -12,6 +12,7 @@ \alias{use_rcpp} \alias{use_revdep} \alias{use_rstudio} +\alias{use_test} \alias{use_testthat} \alias{use_travis} \alias{use_vignette} @@ -19,6 +20,8 @@ \usage{ use_testthat(pkg = ".") +use_test(name, pkg = ".") + use_rstudio(pkg = ".") use_vignette(name, pkg = ".") @@ -55,6 +58,13 @@ add \pkg{testthat} to the suggested packages. This is called automatically from \code{\link{test}} if needed. } +\section{\code{use_test}}{ + +Add a test file, also add testing infrastructure if necessary. +This will create \file{tests/testthat/test-.R} with a user-specified +name for the test. Will fail if the file exists. +} + \section{\code{use_rstudio}}{ Does not modify \code{.Rbuildignore} as RStudio will do that when diff --git a/man/use_build_ignore.Rd b/man/use_build_ignore.Rd index 016ffaac4..95ea6dd21 100644 --- a/man/use_build_ignore.Rd +++ b/man/use_build_ignore.Rd @@ -27,6 +27,7 @@ path. Repeated entries will be silently removed. } \seealso{ Other infrastructure: \code{\link{add_rstudio_project}}, + \code{\link{add_test_infrastructure}}, \code{\link{add_test_infrastructure}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, @@ -35,10 +36,11 @@ Other infrastructure: \code{\link{add_rstudio_project}}, \code{\link{use_cran_comments}}, \code{\link{use_package_doc}}, \code{\link{use_rcpp}}, \code{\link{use_revdep}}, \code{\link{use_rstudio}}, - \code{\link{use_testthat}}, \code{\link{use_travis}}, - \code{\link{use_vignette}}; \code{\link{use_data_raw}}; - \code{\link{use_data}}; \code{\link{use_git_hook}}; - \code{\link{use_package}}; \code{\link{use_readme_rmd}} + \code{\link{use_test}}, \code{\link{use_testthat}}, + \code{\link{use_travis}}, \code{\link{use_vignette}}; + \code{\link{use_data_raw}}; \code{\link{use_data}}; + \code{\link{use_git_hook}}; \code{\link{use_package}}; + \code{\link{use_readme_rmd}} } \keyword{internal} diff --git a/man/use_data.Rd b/man/use_data.Rd index 8cc5516df..efd26202e 100644 --- a/man/use_data.Rd +++ b/man/use_data.Rd @@ -42,6 +42,7 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_build_ignore}}; \code{\link{add_rstudio_project}}, \code{\link{add_test_infrastructure}}, + \code{\link{add_test_infrastructure}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{infrastructure}}, \code{\link{use_appveyor}}, @@ -49,9 +50,9 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_cran_comments}}, \code{\link{use_package_doc}}, \code{\link{use_rcpp}}, \code{\link{use_revdep}}, \code{\link{use_rstudio}}, - \code{\link{use_testthat}}, \code{\link{use_travis}}, - \code{\link{use_vignette}}; \code{\link{use_data_raw}}; - \code{\link{use_git_hook}}; \code{\link{use_package}}; - \code{\link{use_readme_rmd}} + \code{\link{use_test}}, \code{\link{use_testthat}}, + \code{\link{use_travis}}, \code{\link{use_vignette}}; + \code{\link{use_data_raw}}; \code{\link{use_git_hook}}; + \code{\link{use_package}}; \code{\link{use_readme_rmd}} } diff --git a/man/use_data_raw.Rd b/man/use_data_raw.Rd index 4892a8965..605ce8580 100644 --- a/man/use_data_raw.Rd +++ b/man/use_data_raw.Rd @@ -18,6 +18,7 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_build_ignore}}; \code{\link{add_rstudio_project}}, \code{\link{add_test_infrastructure}}, + \code{\link{add_test_infrastructure}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{infrastructure}}, \code{\link{use_appveyor}}, @@ -25,9 +26,9 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_cran_comments}}, \code{\link{use_package_doc}}, \code{\link{use_rcpp}}, \code{\link{use_revdep}}, \code{\link{use_rstudio}}, - \code{\link{use_testthat}}, \code{\link{use_travis}}, - \code{\link{use_vignette}}; \code{\link{use_data}}; - \code{\link{use_git_hook}}; \code{\link{use_package}}; - \code{\link{use_readme_rmd}} + \code{\link{use_test}}, \code{\link{use_testthat}}, + \code{\link{use_travis}}, \code{\link{use_vignette}}; + \code{\link{use_data}}; \code{\link{use_git_hook}}; + \code{\link{use_package}}; \code{\link{use_readme_rmd}} } diff --git a/man/use_git_hook.Rd b/man/use_git_hook.Rd index e48366de3..01893b1f3 100644 --- a/man/use_git_hook.Rd +++ b/man/use_git_hook.Rd @@ -25,6 +25,7 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_build_ignore}}; \code{\link{add_rstudio_project}}, \code{\link{add_test_infrastructure}}, + \code{\link{add_test_infrastructure}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{infrastructure}}, \code{\link{use_appveyor}}, @@ -32,10 +33,10 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_cran_comments}}, \code{\link{use_package_doc}}, \code{\link{use_rcpp}}, \code{\link{use_revdep}}, \code{\link{use_rstudio}}, - \code{\link{use_testthat}}, \code{\link{use_travis}}, - \code{\link{use_vignette}}; \code{\link{use_data_raw}}; - \code{\link{use_data}}; \code{\link{use_package}}; - \code{\link{use_readme_rmd}} + \code{\link{use_test}}, \code{\link{use_testthat}}, + \code{\link{use_travis}}, \code{\link{use_vignette}}; + \code{\link{use_data_raw}}; \code{\link{use_data}}; + \code{\link{use_package}}; \code{\link{use_readme_rmd}} } \keyword{internal} diff --git a/man/use_package.Rd b/man/use_package.Rd index 64e9e8228..70c49234f 100644 --- a/man/use_package.Rd +++ b/man/use_package.Rd @@ -31,6 +31,7 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_build_ignore}}; \code{\link{add_rstudio_project}}, \code{\link{add_test_infrastructure}}, + \code{\link{add_test_infrastructure}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{infrastructure}}, \code{\link{use_appveyor}}, @@ -38,9 +39,9 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_cran_comments}}, \code{\link{use_package_doc}}, \code{\link{use_rcpp}}, \code{\link{use_revdep}}, \code{\link{use_rstudio}}, - \code{\link{use_testthat}}, \code{\link{use_travis}}, - \code{\link{use_vignette}}; \code{\link{use_data_raw}}; - \code{\link{use_data}}; \code{\link{use_git_hook}}; - \code{\link{use_readme_rmd}} + \code{\link{use_test}}, \code{\link{use_testthat}}, + \code{\link{use_travis}}, \code{\link{use_vignette}}; + \code{\link{use_data_raw}}; \code{\link{use_data}}; + \code{\link{use_git_hook}}; \code{\link{use_readme_rmd}} } diff --git a/man/use_readme_rmd.Rd b/man/use_readme_rmd.Rd index 0ac8fe94d..77bb29364 100644 --- a/man/use_readme_rmd.Rd +++ b/man/use_readme_rmd.Rd @@ -25,6 +25,7 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_build_ignore}}; \code{\link{add_rstudio_project}}, \code{\link{add_test_infrastructure}}, + \code{\link{add_test_infrastructure}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{add_travis}}, \code{\link{infrastructure}}, \code{\link{use_appveyor}}, @@ -32,10 +33,10 @@ Other infrastructure: \code{\link{add_build_ignore}}, \code{\link{use_cran_comments}}, \code{\link{use_package_doc}}, \code{\link{use_rcpp}}, \code{\link{use_revdep}}, \code{\link{use_rstudio}}, - \code{\link{use_testthat}}, \code{\link{use_travis}}, - \code{\link{use_vignette}}; \code{\link{use_data_raw}}; - \code{\link{use_data}}; \code{\link{use_git_hook}}; - \code{\link{use_package}} + \code{\link{use_test}}, \code{\link{use_testthat}}, + \code{\link{use_travis}}, \code{\link{use_vignette}}; + \code{\link{use_data_raw}}; \code{\link{use_data}}; + \code{\link{use_git_hook}}; \code{\link{use_package}} } \keyword{internal}