inst/tinytest/test_check_num_int.R

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

# type
expect_silent(check_num_int(2))
expect_silent(check_num_int(2L))
expect_silent(check_num_int(c(1, 2, 3)))
expect_silent(check_num_int(as.integer(c(1, 2, 3))))

# n
expect_silent(check_num_int(2, n = 1))
expect_silent(check_num_int(2L, n = 1))
expect_silent(check_num_int(c(1, 2, 3), n = 3))
expect_silent(check_num_int(as.integer(c(1, 2, 3)), n = 3))

# allowNULL (Exception from e.g. character)
expect_silent(check_num_int(NULL, allowNULL = TRUE))
expect_silent(check_num_int(NULL, allowNULL = TRUE, n = 1))
expect_silent(check_num_int(NULL, allowNULL = TRUE, n = 3))

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

# var
expect_error(check_num_int())

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

# allowNULL
expect_error(
  check_num_int(id, allowNULL = "x"),
  class = "check_num_int_allowNULL_error"
)
expect_error(
  check_num_int(id, allowNULL = NULL),
  class = "check_num_int_allowNULL_error"
)
expect_error(
  check_num_int(id, allowNULL = 12),
  class = "check_num_int_allowNULL_error"
)

# individual error generated by function
expect_error(check_num_int(data), class = "eval_data_error")
expect_error(check_num_int(data), class = "rlang_error")
expect_error(check_num_int(NULL), class = "eval_NULL_error")
expect_error(check_num_int(NULL), class = "rlang_error")
expect_error(check_num_int(NULL, allowNULL = FALSE), class = "eval_NULL_error")
expect_error(check_num_int(NULL, allowNULL = FALSE), class = "rlang_error")

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

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