tests/testthat/test-webp.R

debugging <- FALSE

make_plot <- function() {
  set.seed(42)
  pal <- c("lightpink", "lightblue", "lightgreen", "lightyellow")
  par(mar = c(1, 0, 0, 0))
  plot.new()
  plot.window(0:1, 0:1, asp = 1)
  for (i in 1:50) {
    polygon(runif(3), runif(3), col = sample(pal, 1), border = "black")
  }
  mtext("Triangular Puzzle", side = 1, line = 0, cex = 0.8)
}

is_webp_file <- function(path) {
  if (!file.exists(path) || file.info(path)$size < 30) return(FALSE)
  con <- file(path, "rb"); on.exit(close(con))
  h <- readBin(con, "raw", 12)
  length(h) == 12 &&
    all(h[1:4] == charToRaw("RIFF")) && all(h[9:12] == charToRaw("WEBP"))
}

test_that("agg_webp generates lossless file", {
  file <- tempfile(pattern = "lossless", fileext = ".webp")
  agg_webp(file, width = 1024, height = 768)
  make_plot()
  dev.off()

  expect_true(is_webp_file(file))
  if (debugging) cat(sprintf("WebP at: %s\n", file)) else unlink(file)
})

test_that("agg_webp generates lossy file", {
  file <- tempfile(pattern = "lossy", fileext = ".webp")
  agg_webp(file, width = 1024, height = 768, lossy = TRUE, quality = 5)
  make_plot()
  dev.off()

  expect_true(is_webp_file(file))
  if (debugging) cat(sprintf("WebP at: %s\n", file)) else unlink(file)
})

test_that("agg_webp supports transparency", {
  file <- tempfile(pattern = "transp", fileext = ".webp")
  agg_webp(file, width = 1024, height = 768, background = "transparent")
  make_plot()
  dev.off()

  expect_true(is_webp_file(file))
  if (debugging) cat(sprintf("WebP at: %s\n", file)) else unlink(file)
})

Try the ragg package in your browser

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

ragg documentation built on Sept. 2, 2025, 9:09 a.m.