
test_that("is_string", {

  strings <- list("foo", "", "111", "1", "-", "NA")
  not_strings <- list(1, character(), NA_character_, NA,
                      c("foo", NA), c("1", "2"), NULL)

  for (p in strings) {
    expect_true(is_string(p))
    expect_silent(stopifnot(is_string(p)))
  }

  for (n in not_strings) {
    expect_false(is_string(n))
    expect_error(
      stopifnot(is_string(n)),
      "is_string(n) is not TRUE",
      fixed = TRUE
    )
  }
})

test_that("is_border_style", {
  expect_true(is_border_style(rownames(box_styles())[1]))
  expect_false(is_border_style("blahblahxxx"))

  expect_silent(stopifnot(is_border_style(rownames(box_styles())[1])))
  expect_error(
    stopifnot(is_border_style("blahblahxxx")),
    "is_border_style(\"blahblahxxx\") is not TRUE",
    fixed = TRUE
  )
})

test_that("is_padding_or_margin", {
  good <- list(1, 0, 0L, 1L, 237, c(1,2,3,4), c(0,0,0,0), rep(1L, 4))
  bad <- list(numeric(), integer(), c(1,2), c(1L, 2L, 3L), 1:5,
              "1", c("1", "2", "3", "1"), NA, NA_real_, NA_integer_,
              c(1,2,NA,1), c(1L,NA,3L))

  for (g in good) {
    expect_true(is_padding_or_margin(g))
    expect_silent(stopifnot(is_padding_or_margin(g)))
  }
  for (b in bad) {
    expect_false(is_padding_or_margin(b))
    expect_error(
      stopifnot(is_padding_or_margin(b)),
      "is_padding_or_margin(b) is not TRUE",
      fixed = TRUE
    )
  }
})

test_that("is_col", {
  good <- list("red", "orange", NULL, col_red)
  bad <- list(c("red", "orange"), character(), NA_character_)

  for (g in good) {
    expect_true(is_col(g))
    expect_silent(stopifnot(is_col(g)))
  }
  for (b in bad) {
    expect_false(is_col(b))
    expect_error(
      stopifnot(is_col(b)),
      "is_col(b) is not TRUE",
      fixed = TRUE
    )
  }
})

test_that("is_count", {

  counts <- list(1, 1L, 0, 0L, 42, 42L)
  not_counts <- list(c(1, 2), numeric(), NA_integer_, NA_real_, NA, 1.1,
                     NULL, "1")

  for (c in counts) {
    expect_true(is_count(c))
    expect_silent(stopifnot(is_count(c)))
  }

  for (n in not_counts) {
    expect_false(is_count(n))
    expect_error(
      stopifnot(is_count(n)),
      "is_count(n) is not TRUE",
      fixed = TRUE
    )
  }
})

test_that("is_tree_style", {
  good <- list(
    list(h = "1", v = "2", l = "3", j = "4"),
    list(j = "4", v = "2", h = "1", l = "3")
  )
  bad <- list(
    NULL,
    1:4,
    c(h = "1", v = "2", l = "3", j = "4"),
    list(h = "1", v = "2", l = "3", j = "4", x = "10"),
    list(h = "1", v = c("2", "3"), l = "3", j = "4"),
    list(h = "1", v = "2", l = character(), j = "4"),
    list(h = "1", v = "2", l = 3, j = "4"),
    list("1", v = "2", l = "3", j = "4"),
    list("1", "2", "3", "4")
  )

  for (x in good) expect_true (is_tree_style(x))
  for (x in bad ) expect_false(is_tree_style(x))
})
