library(htmltools)

# All page_*() functions are very thin wrappers around
# shiny::*Page() at the moment (except for page_navbar(), which
# which why we only have tests for page_navbar())

test_that("page_navbar()", {
  skip_if_not_installed("shiny")
  expect_snapshot(
    renderTags(
      page_navbar(
        title = div(h1("foo"), h2("bar"))
      )
    )$head,
    cran = TRUE
  )

  expect_snapshot(
    renderTags(
      page_navbar(
        title = "foo",
        window_title = "bar"
      )
    )$head,
    cran = TRUE
  )

  expect_snapshot(
    renderTags(
      page_sidebar(title = "foo")
    )$head,
    cran = TRUE
  )
})

test_that("page_sidebar()", {
  with_private_seed()

  expect_snapshot(
    renderTags(
      page_sidebar(
        title = "foo",
        window_title = "bar"
      )
    )$head,
    cran = TRUE
  )

  with_private_seed()

  expect_snapshot(
    renderTags(
      page_sidebar(
        "main",
        title = "Title",
        # Removes the {bsicons} icon
        sidebar = sidebar(open = "always"),
        "data-attr" = "here"
      )
    )$html,
    cran = TRUE
  )

  with_private_seed()

  skip_if_not_installed("bsicons", "0.1.0.9000")

  expect_snapshot(
    renderTags(
      page_sidebar(
        "main",
        title = "Title",
        sidebar = "side"
      )
    )$html,
    # Don't run on CRAN since the output depends on {bsicons}
    cran = FALSE
  )
})

test_that("save_html() works on components and pages with a custom theme", {
  withr::local_options(list(htmltools.dir.version = FALSE))

  withr::with_tempdir({
    save_html(
      card("A simple card"),
      "card.html"
    )
    expect_snapshot_file("card.html")
  })

  withr::with_tempdir({
    save_html(
      page(
        theme = bs_remove(bs_theme(), "bs3compat"),
        "A simple page without bs3compat dependencies"
      ),
      "modern-page.html"
    )
    expect_snapshot_file("modern-page.html")
  })
})

test_that("page_*() functions can handle trailing commas", {
  expect_no_error(
    page("foo", )
  )
  expect_no_error(
    page_fluid("foo", )
  )
  expect_no_error(
    page_fixed("foo", )
  )
  expect_no_error(
    page_fillable("foo", )
  )
  expect_no_error(
    page_sidebar("foo", )
  )
  expect_no_error(
    page_navbar(nav_panel("foo", "bar"), )
  )
})
