test_that("check_data works", {
  expect_identical(check_data(data.frame()), data.frame())
  expect_invisible(check_data(data.frame()))
  expect_identical(check_data(data.frame(x = 1)), data.frame(x = 1))
  expect_identical(
    check_data(data.frame(x = 1, values = list(x = 1))),
    check_data(data.frame(x = 1, values = list(x = 1)))
  )
  expect_identical(check_data(data.frame(x = 1), nrow = c(1, Inf)), data.frame(x = 1))
})

test_that("check_data fails", {
  expect_chk_error(
    check_data(data.frame(), nrow = TRUE),
    "`nrow[(]data.frame[(][)][)]` must be greater than 0, not 0."
  )
  expect_chk_error(
    check_data(data.frame(), values = list(x = 1)),
    "`names[(]data.frame[(][)][)]` must include 'x'."
  )

  expect_chk_error(check_data(data.frame(x = 1, y = 2), values = list(x = 1), exclusive = TRUE), "^`names[(]data.frame[(]x = 1, y = 2[)][)]` must not include 'y'[.]$")
  expect_chk_error(
    check_data(data.frame(x = 1), values = list(x = 1L)),
    "`data.frame[(]x = 1[)][$]x` must inherit from S3 class 'integer'."
  )
  expect_chk_error(
    check_data(data.frame(x = c(1, 1)), key = "x"),
    "^Column 'x' in `data.frame[(]x = c[(]1, 1[)][)]` must be a unique key[.]$"
  )
  expect_chk_error(
    check_data(data.frame(x = ordered(1:2)), values = list(x = ordered(1:2, levels = 2:1))),
    "^`levels[(]data.frame[(]x = ordered[(]1:2[)][)][$]x[)]` must have [(]the first occurence of[)] each of the following elements in the following order: '2', '1'[.]$"
  )
})
