inst/tinytest/test_check_class.R

### Pass test ------------------------------------------------------------------

# type
expect_silent(check_class("chr", type = "character"))
expect_silent(check_class(2, type = "numeric"))
expect_silent(check_class(-1.4, type = "numeric"))
expect_silent(check_class(2L, type = "integer"))
expect_silent(check_class(TRUE, type = "logical"))
expect_silent(check_class(FALSE, type = "logical"))
expect_silent(check_class(NULL, type = "NULL"))
expect_silent(check_class(data.frame(A = c(1, 2)), type = "data.frame"))

# n
expect_silent(check_class("chr", type = "character", n = 1))
expect_silent(check_class(c("chr", "chr2"), type = "character", n = 2))
expect_silent(check_class("chr", type = "character", n = 1L))

# allowNULL (Exception from e.g. character)
expect_silent(check_class(NULL, type = "character", allowNULL = TRUE))
expect_silent(check_class(NULL, type = "character", allowNULL = TRUE, n = 1))
expect_silent(check_class(NULL, type = "numeric", allowNULL = TRUE, n = 2))

### Errors ---------------------------------------------------------------------

# var
expect_error(check_class(type = "character"))

# type
expect_error(check_class(var = "character"))
expect_error(check_class(id, type = 12), class = "check_class_type_error")

# n
expect_error(
  check_class(var = "chr", type = "character", n = TRUE),
  class = "check_class_n_error"
)
expect_error(
  check_class(var = "chr", type = "character", n = -1),
  class = "check_class_n_error",
  pattern = "^`n` must be not negative numeric\\(1\\) or integer\\(1\\)\\.$"
)
expect_error(
  check_class(var = "chr", type = "character", n = c(1, 2)),
  class = "check_class_n_error",
  pattern = paste("^`n` must be numeric\\(1\\) or integer\\(1\\),",
                  "not of class \"numeric\\(2\\)\"\\.$")
)

# allowNULL
expect_error(
  check_class(id, type = "numeric", allowNULL = "x"),
  class = "check_class_allowNULL_error"
)
expect_error(
  check_class(id, type = "numeric", allowNULL = NULL),
  class = "check_class_allowNULL_error"
)
expect_error(
  check_class(id, type = "numeric", allowNULL = 12),
  class = "check_class_allowNULL_error"
)

# individual error generated by function
expect_error(check_class(2, "character"), class = "eval_2_error")
expect_error(check_class(2, "character"), class = "rlang_error")
expect_error(check_class(2, "data.frame"), class = "eval_2_error")
expect_error(check_class(2, "data.frame"), class = "rlang_error")
expect_error(check_class(TRUE, "data.frame"), class = "eval_TRUE_error")
expect_error(check_class(TRUE, "data.frame"), class = "rlang_error")
expect_error(
  check_class(NULL, "character", allowNULL = FALSE),
  class = "eval_NULL_error"
)
expect_error(
  check_class(NULL, "character", allowNULL = FALSE),
  class = "rlang_error"
)

id <- 1
err <- tryCatch(
  check_class(id, "character", allowNULL = FALSE),
  error = function(err) err
)
expect_true(rlang::inherits_all(err, c("eval_id_error", "rlang_error")))
expect_equal(err$value, 1)
expect_equal(err$current_class, "numeric")

# check typical use in function
fun <- function(x, n = NULL) {
  testr::check_class(x, "numeric", allowNULL = TRUE, n = n)
  TRUE
}
expect_true(fun(1))
expect_true(fun(1, n = 1))
expect_true(fun(NULL))
expect_error(
  fun("1"),
  class = "fun_x_error",
  pattern = "`x` must be numeric, not of class \"character\"\\."
)
expect_error(
  fun(1L),
  class = "fun_x_error",
  pattern = "`x` must be numeric, not of class \"integer\"\\."
)
expect_error(
  fun(1, n = 2),
  "fun_x_error",
  pattern = "`x` must be numeric\\(2\\), not of class \"numeric\\(1\\)\"\\."
)
expect_error(
  fun(1, n = 0),
  "fun_x_error",
  pattern = "`x` must be numeric\\(0\\), not of class \"numeric\\(1\\)\"\\."
)
thfuchs/testr documentation built on Jan. 22, 2021, 2:35 p.m.