tests/testthat/test-primitive-title.R

test_that("primitive_title works as axis", {

  base <- ggplot(mpg, aes(displ, hwy)) +
    geom_blank() +
    theme_test() +
    theme(
      panel.background = element_rect(fill = NA, colour = "grey80"),
      panel.grid.major = element_line(colour = "grey90"),
      panel.border = element_blank(),
      axis.line = element_line()
    )

  red_text <- theme(axis.title.y.right = element_text(colour = "red", vjust = 0.5))

  p <- base +
    guides(
      x     = primitive_title(c("foo", "bar", "baz")),
      x.sec = primitive_title("horizontal title"),
      y     = primitive_title(c("qux", "egg"), angle = 45),
      y.sec = primitive_title("foobar", theme = red_text)
    )

  vdiffr::expect_doppelganger("primitive_title cartesian", p)

  p <- base +
    coord_radial(start = 0.25 * pi, end = 1.75 * pi, inner.radius = 0.5) +
    guides(
      theta.sec = primitive_title(c("foo", "bar", "baz"), angle = 0),
      theta = primitive_title("horizontal title"),
      r     = primitive_title(c("qux", "egg"), angle = 90),
      r.sec = primitive_title("foobar", theme = red_text)
    )

  vdiffr::expect_doppelganger("primitive_title radial", p)
})

test_that("primitive_title works as legend", {

  p <- ggplot(mtcars) +
    aes(
      x = disp, y = mpg,
      colour = hp,
      fill = hp
    ) +
    geom_point() +
    guides(
      colour = primitive_title(title = "right title"),
      fill = primitive_title(title = "bottom title", position = "bottom")
    )

  vdiffr::expect_doppelganger("primitive_title legend", p)

})

test_that("draw_theta_title works", {

  elements <- list(
    title = theme_gray()$text,
    offset = 0
  )

  params <- list(
    position = "theta",
    donut = c(0.2, 0.4),
    arc = c(0, 1),
    bbox = list(x = c(0, 1), y = c(0, 1)),
    angle = 0
  )

  test <- withr::with_pdf(
    tempfile(fileext = ".pdf"),
    draw_theta_title("Foobar", elements, params)
  )

  expect_equal(test$children[[1]]$rot, 331, tolerance = 1)

  params$position <- "theta.sec"
  params$angle <- NULL

  test <- withr::with_pdf(
    tempfile(fileext = ".pdf"),
    draw_theta_title("Foobar", elements, params)
  )

  expect_equal(test$children[[1]]$rot, 0, tolerance = 1)
})

Try the legendry package in your browser

Any scripts or data that you put into this service are public.

legendry documentation built on April 4, 2025, 2:12 a.m.