R: Asserting Error Conditions

assertCondition {tools} | R Documentation

## Asserting Error Conditions

### Description

When testing code, it is not sufficient to check that results are correct, but also that errors or warnings are signalled in appropriate situations. The functions described here provide a convenient facility for doing so. The three functions check that evaluating the supplied expression produces an error, a warning or one of a specified list of conditions, respectively. If the assertion fails, an error is signalled.

### Usage

    assertError(expr, verbose = FALSE)
    assertWarning(expr, verbose = FALSE)
    assertCondition(expr, ..., .exprString = , verbose = FALSE)

### Arguments

`expr` | an unevaluated R expression which will be evaluated via `tryCatch(expr, ..)`.
`...` | `character` strings corresponding to the classes of the conditions that would satisfy the assertion; e.g., `"error"` or `"warning"`. If none are specified, any condition will satisfy the assertion. See the details section.
`.exprString` | The string to be printed corresponding to `expr`. By default, the actual `expr` will be deparsed. Will be omitted if the function is supplied with the actual expression to be tested. If `assertCondition()` is called from another function, with the actual expression passed as an argument to that function, supply the deparsed version.
`verbose` | If `TRUE`, a message is printed when the condition is satisfied.

### Details

`assertCondition()` uses the general condition mechanism to check all the conditions generated in evaluating `expr`. The occurrence of any of the supplied condition classes among these satisfies the assertion regardless of what other conditions may be signalled.

`assertError()` is a convenience function for asserting errors; it calls `assertCondition()`.

`assertWarning()` asserts that a warning will be signalled, but not an error, whereas `assertCondition(expr, "warning")` will be satisfied even if an error follows the warning. See the examples.

### Value

If the assertion is satisfied, a list of all the condition objects signalled is returned, invisibly. See `conditionMessage` for the interpretation of these objects. Note that all conditions signalled during the evaluation are returned, whether or not they were among the requirements.

### Author(s)

John Chambers and Martin Maechler

### See Also

`stop`, `warning`; `signalCondition`, `tryCatch`.

### Examples

      assertError(sqrt("abc"))
      assertWarning(matrix(1:8, 4,3))

      assertCondition( ""-1 ) # ok, any condition would satisfy this

    try( assertCondition(sqrt(2), "warning") )
    ## .. Failed to get warning in evaluating sqrt(2)
         assertCondition(sqrt("abc"), "error")   # ok
    try( assertCondition(sqrt("abc"), "warning") )# -> error: had no warning
         assertCondition(sqrt("abc"), "error")
      ## identical to assertError() call above

    assertCondition(matrix(1:5, 2,3), "warning")
    try( assertCondition(matrix(1:8, 4,3), "error") )
    ## .. Failed to get expected error ....

    ## either warning or worse:
    assertCondition(matrix(1:8, 4,3), "error","warning") # OK
    assertCondition(matrix(1:8, 4, 3), "warning") # OK

    ## when both are signalled:
    ff <- function() { warning("my warning"); stop("my error") }
        assertCondition(ff(), "warning")
    ## but assertWarning does not allow an error to follow
    try(assertWarning(ff()))
        assertCondition(ff(), "error")          # ok
    assertCondition(ff(), "error", "warning") # ok (quietly, catching warning)

    ## assert that assertC..() does not assert [and use *one* argument only]
    assertCondition( assertCondition(sqrt( 2   ), "warning") )
    assertCondition( assertCondition(sqrt("abc"), "warning"), "error")
    assertCondition( assertCondition(matrix(1:8, 4,3), "error"),
                    "error")

[Package tools version 3.5.1 Index]