test_that("cols_add() works", {
  tbl <- gt(exibble)
  expect_no_error(
    dat <- cols_add(tbl, x = 1, .before = 1)
  )
  expect_equal(dat$`_boxhead`$var[1], "x")
  
  expect_no_error(
    dat <- cols_add(tbl, x = 1, .before = 2)
  )
  expect_equal(dat$`_boxhead`$var[2], "x")
  expect_no_error(
    dat <- cols_add(tbl, x = 1, .after = 1)
  )
  expect_equal(dat$`_boxhead`$var[2], "x")
  expect_no_error(
    dat <- cols_add(tbl, x = 1, .after = dplyr::last_col())
  )
})

test_that("cols_add() errors with bad input", {
  tbl <- gt(exibble)
  
  expect_snapshot(
    error = TRUE, {
      cols_add(tbl, x = 1, .after = 2, .before = 3)
      cols_add(tbl, x = 1, .after = 15)
      cols_add(tbl, x = 1, .before = c(1, 2))
      cols_add(tbl, x = 1, .after = c(1, 2))
      
    }
  )
})

test_that("cols_add() handles empty data frames", {
  # These 2 cases are equal
  expect_equal_gt(
    gt(data.frame()) %>% cols_add(x = 1),
    gt(data.frame(x = 1))
  )
  
  expect_no_error(gt(data.frame()) %>% cols_add())
  
  expect_no_error(
    tab <- gt(data.frame(x = character(0), y = character(0))) %>% cols_add(z = character(0))
    )
  expect_named(tab$`_data`, c("x", "y", "z"))
  
})
