test_that("Case when choices is missing", {
  expect_error(match_arg(arg = "", choices = ))
})

test_that("Case when arg is NULL", {
  expect_equal(match_arg(NULL, c("a", "b", "c")), "a")
})

test_that("Case when arg can not be characterized as choices", {
  expect_error(match_arg(1, c("a", "b", "c")))
})

test_that("Case when arg is numeric", {
  expect_equal(match_arg(1, c("1", "2", "3")), "1")
  expect_equal(match_arg(1, c(1, 2, 3)), "1")
})

test_that("Case when several.ok is FALSE", {
  # if arg is same as choices
  expect_equal(match_arg(c("a", "b"), c("a", "b"), several.ok = FALSE), "a")
  # if arg length great than 1 but not same as choices
  expect_error(match_arg(c("a", "b"), c("a", "b", "c"), several.ok = FALSE))
})

test_that("Case when arg is in choices", {
  # if arg equals to ''
  expect_equal(match_arg("", choices = c("", "a", "b", "c")), "")
  # if arg NOT equals to ''
  expect_equal(match_arg("a", choices = c("", "a", "b", "c")), "a")
  # if arg has more than one match when several.ok is FALSE
  expect_error(match_arg(c("ab", "ab"), choices = c("abc", "ab"), several.ok = FALSE))
})

test_that("Case when arg is Not in choices", {
  expect_error(match_arg("d", choices = c("", "a", "b", "c")))
})
