tests/testthat/test-stat-spatraster.R

test_that("Minimal checks for stat_spatraster 1lyr CRS", {
  suppressWarnings(library(ggplot2))
  suppressWarnings(library(terra))

  #  Import also vector
  f <- system.file("extdata/cyl_elev.tif", package = "tidyterra")
  r <- rast(f)

  f_v <- system.file("extdata/cyl.gpkg", package = "tidyterra")
  v <- vect(f_v)
  v_sf <- sf::st_as_sf(v)

  # Errors
  expect_error(
    ggplot(r) +
      stat_spatraster()
  )
  expect_snapshot(
    ggplot() +
      stat_spatraster(data = v),
    error = TRUE
  )
  expect_snapshot(
    ggplot() +
      stat_spatraster(data = 1:3),
    error = TRUE
  )

  # Regular plot

  p <- ggplot() +
    stat_spatraster(data = r)

  expect_s3_class(p, "ggplot")

  # Using aes
  expect_warning(
    ggplot() +
      stat_spatraster(
        data = r,
        aes(
          fill = elevation_m,
          color = "red"
        )
      )
  )

  p_aes <- ggplot() +
    stat_spatraster(data = r, aes(fill = elevation_m))

  expect_s3_class(p_aes, "ggplot")

  # change geom
  p <- ggplot() +
    stat_spatraster(data = r, geom = "point", aes(fill = elevation_m))
  expect_error(ggplot_build(p))

  p <- ggplot() +
    stat_spatraster(
      data = r,
      geom = "point",
      aes(color = after_stat(value)),
      maxcell = 2500
    )

  expect_s3_class(p, "ggplot")

  p <- ggplot() +
    stat_spatraster(
      data = r,
      geom = "text",
      aes(label = after_stat(round(value))),
      check_overlap = TRUE,
      maxcell = 25
    )

  expect_s3_class(p, "ggplot")
})

Try the tidyterra package in your browser

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

tidyterra documentation built on March 11, 2026, 9:08 a.m.