test_that("extracts typical library()/require() calls", {
  expect_equal(extract_package_attach_(library("blah")), "blah")
  expect_equal(extract_package_attach_(library(blah)), "blah")
  expect_equal(extract_package_attach_(require("blah")), "blah")
  expect_equal(extract_package_attach_(require(blah)), "blah")
})

test_that("detects in nested code", {
  expect_equal(extract_package_attach_({
    library(a)
    x <- 2
    {
      library(b)
      y <- 3
      {
        library(c)
        z <- 4
      }
    }
  }), c("a", "b", "c"))
})

test_that("handles expressions", {
  # which will usually come from parse()d code
  #
  x <- expression(
    x <- 1,
    library("a"),
    y <- 2,
    library("b")
  )
  expect_equal(extract_package_attach(x), c("a", "b"))
})

test_that("detects with non-standard arg order", {
  withr::local_options(warnPartialMatchArgs = FALSE)

  expect_equal(extract_package_attach_(library(quiet = TRUE, pa = "a")), "a")
  expect_equal(extract_package_attach_(library(quiet = TRUE, a)), "a")
})

test_that("doesn't include if character.only = TRUE", {
  expect_equal(
    extract_package_attach_(library(x, character.only = TRUE)),
    character()
  )
})

test_that("adds packages attached by dependencies", {
  skip_if_not_installed("ggraph")
  expect_true("ggplot2" %in% add_depends("ggraph"))
})

test_that("adds tidyverse packages", {
  skip_if_not_installed("tidyverse")
  expect_true("ggplot2" %in% add_depends("tidyverse"))
})
