if (require("testthat") && require("sjmisc")) {
  d <- data.frame(
    a = c(1, 2, 3),
    b = c("a", "b", "c"),
    c = c(10, 20, 30),
    stringsAsFactors = FALSE
  )

  attr(d, "test") <- "abc"

  test_that("add_case", {
    expect_equal(nrow(add_case(d, b = "d")), 4)
    expect_equal(add_case(d, b = "d", .after = -1)[1, 1], as.numeric(NA))
    expect_equal(add_case(d, b = "d", a = 5, .before = 1)[1, 1], 5)
    expect_equal(add_case(d, b = "d", a = 5, .after = Inf)[4, 1], 5)
    expect_equal(add_case(d, b = "d", .after = 2)[3, 1], as.numeric(NA))
    expect_equal(add_case(d, b = "d", .after = 5)[4, 1], as.numeric(NA))
    expect_equal(add_case(d, b = "d", a = 5, .after = 2, .before = 2)[2, 1], 5)
  })

  test_that("add_variable", {
    expect_equal(ncol(add_variables(d, new = 5)), 4)
    expect_equal(colnames(add_variables(d, new = 5, .after = 3))[4], "new")
    expect_equal(colnames(add_variables(d, new = 5, .after = Inf))[4], "new")
    expect_equal(colnames(add_variables(d, new = c(4, 4, 4), new2 = c(5, 5, 5), .after = "b"))[3:4], c("new", "new2"))
    add_variables(d, new = c(4, 4, 4), new2 = c(5, 5, 5), .after = Inf)
    add_variables(d, new = c(4, 4, 4), new2 = c(5, 5, 5), .after = -1)
  })

  test_that("add_variable", {
    x <- add_variables(d, new = 5)
    expect_equal(attr(x, "test", exact = TRUE), "abc")
  })
}
