

test_that(".onLoad works and sets options", {
  old_opts <- options()
  hux_opts <- list(
          # huxtable.add_colnames  = NULL, # want not to set this to anything on package load
          huxtable.print         = NULL,
          huxtable.color_screen  = NULL,
          huxtable.knit_print_df_theme = NULL,
          huxtable.autoformat = NULL,
          huxtable.autoformat_number_format = NULL,
          huxtable.autoformat_align = NULL
        )
  options(hux_opts)
  expect_silent(huxtable:::.onLoad(system.file(package = "huxtable"), "huxtable"))
  for (opt in names(hux_opts)) {
    expect_false( is.null(options(opt)[[1]]), info = paste("Option:", opt))
  }
  options(old_opts)
})


test_dplyr_methods <- function () {
  huxtable:::.onLoad(system.file(package = "huxtable"), "huxtable")
  expected_methods <- c("arrange", "arrange_", "filter", "filter_", "mutate",
        "mutate_",  "slice", "slice_", "transmute", "transmute_")
  dplyr_methods <- getNamespaceInfo("dplyr", "S3methods")  # will load dplyr
  dplyr_methods <- as.data.frame(dplyr_methods[, 1:2])
  names(dplyr_methods) <- c("generic", "class")
  dplyr_methods <- dplyr::filter(dplyr_methods, class == "huxtable")
  expect_setequal(unlist(dplyr_methods$generic), expected_methods)
}


test_knitr_methods <- function () {
  huxtable:::.onLoad(system.file(package = "huxtable"), "huxtable")
  knitr_methods <- getNamespaceInfo("knitr", "S3methods")
  knitr_methods <- as.data.frame(knitr_methods[, 1:2])
  names(knitr_methods) <- c("generic", "class")
  knitr_methods <- dplyr::filter(knitr_methods, generic == "knit_print")
  expect_true(all(c("huxtable", "data.frame") %in% unlist(knitr_methods$class)))
}


# can be run via devtools::test, but not automatically from RStudio
test_that(".onLoad gets methods registered if namespace not loaded", {
  skip_if_not_installed("dplyr")
  skip_if_not_installed("knitr")

  tryCatch(unloadNamespace("dplyr"), error = function (e) skip("Couldn't unload dplyr namespace"))
  test_dplyr_methods()
  tryCatch(unloadNamespace("knitr"), error = function (e) skip("Couldn't unload knitr namespace"))
  test_knitr_methods()
})


test_that(".onLoad gets S3 methods registered if namespace loaded", {
  skip_if_not_installed("dplyr")
  skip_if_not_installed("knitr")

  tryCatch(unloadNamespace("dplyr"), error = function (e) skip("Couldn't unload dplyr namespace"))
  library(dplyr)
  test_dplyr_methods()
  tryCatch(unloadNamespace("knitr"), error = function (e) skip("Couldn't unload knitr namespace"))
  library(knitr)
  test_knitr_methods()
})
