diff --git a/DESCRIPTION b/DESCRIPTION index f478fd4f1..a5df1d775 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -32,6 +32,7 @@ Collate: 'expectations-matches.R' 'expectations-old.R' 'expectations-silent.R' + 'expectations-success.R' 'expectations.r' 'make-expectation.r' 'mock.r' diff --git a/NAMESPACE b/NAMESPACE index 01244852d..b639675bb 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -43,6 +43,7 @@ export(expect_named) export(expect_null) export(expect_output) export(expect_silent) +export(expect_success) export(expect_that) export(expect_true) export(expect_warning) diff --git a/R/expectations-success.R b/R/expectations-success.R new file mode 100644 index 000000000..6145b79fa --- /dev/null +++ b/R/expectations-success.R @@ -0,0 +1,24 @@ +#' Expect that code succeeds. +#' +#' Use it when failure should not abort the current test. +#' +#' @param expr Expression to evaluate +#' @export +#' @examples +#' expect_success(print("Hi!")) +#' \dontrun{ +#' expect_success(stop("What?")) +#' } +expect_success <- function(expr) { + label <- find_expr("expr") + out <- evaluate_promise(expr) + + res <- try(force(expr), silent = TRUE) + + success <- !inherits(res, "try-error") + + expect( + success, + paste(label, "raised an error:", as.character(res)) + ) +} diff --git a/man/expect_success.Rd b/man/expect_success.Rd new file mode 100644 index 000000000..fa229b3b6 --- /dev/null +++ b/man/expect_success.Rd @@ -0,0 +1,21 @@ +% Generated by roxygen2 (4.1.1): do not edit by hand +% Please edit documentation in R/expectations-success.R +\name{expect_success} +\alias{expect_success} +\title{Expect that code succeeds.} +\usage{ +expect_success(expr) +} +\arguments{ +\item{expr}{Expression to evaluate} +} +\description{ +Use it when failure should not abort the current test. +} +\examples{ +expect_success(print("Hi!")) +\dontrun{ +expect_success(stop("What?")) +} +} +