test_that("check_length_one() works", {
  expect_no_error(check_length_one(1))
  expect_error(check_length_one(1:2), "must have length 1")
  expect_error(check_length_one(letters), "letters")
})

test_that("check_character() works", {
  expect_no_error(check_character(letters))
  expect_error(check_character(1:2), "integer")
})


test_that("vlookup() works", {
  df <- tibble::tibble(
    i = 1:3,
    letters = letters[i],
    dupes = c("a", "c", "c"),
    fctr = factor(letters)
  )

  ## internal function, therefore it does not support unquoted variable names
  ## R <= 3.4.4 error msg is "object 'i' not found"
  ## R devel error msg is "is_string(key) is not TRUE"
  expect_error(vlookup("c", df, letters, i))

  expect_identical(vlookup("c", df, "letters", "i"), 3L)
  expect_identical(vlookup(c("a", "c"), df, "letters", "i"), c(1L, 3L))

  ## match() returns position of *first* match
  expect_identical(vlookup("c", df, "dupes", "i"), 2L)
  expect_identical(vlookup(c("c", "c"), df, "dupes", "i"), c(2L, 2L))

  expect_identical(vlookup("b", df, "fctr", "i"), 2L)
  expect_identical(vlookup(c("b", "c", "a"), df, "fctr", "i"), c(2L, 3L, 1L))
})

test_that("enforce_na() works", {
  expect_error(enforce_na(1), "is.character(x) is not TRUE", fixed = TRUE)
  expect_error(enforce_na("a", 1), "is.character(na) is not TRUE", fixed = TRUE)

  expect_identical(enforce_na(character()), character())

  expect_identical(
    enforce_na(c("a", "", "c")),
    c("a", NA, "c")
  )
  expect_identical(
    enforce_na(c("a", "", "c"), na = "c"),
    c("a", "", NA)
  )
  expect_identical(
    enforce_na(c("abc", "", "cab"), na = c("abc", "")),
    c(NA, NA, "cab")
  )
  expect_identical(
    enforce_na(c("a", "", "c"), na = character()),
    c("a", "", "c")
  )
})
