tests/testthat/test-compat-stars.R

test_that("stars argument coercers work", {
  skip_if_not_installed("stars")

  obj <- stars::st_as_stars(sf::st_bbox(c(xmin = 0, xmax = 1, ymin = 0, ymax = 1)))
  expect_error(
    as_qgis_argument(obj),
    "Can't convert 'stars' object"
  )

  tmp_file <- expect_match(
    suppressWarnings(as_qgis_argument(obj, qgis_argument_spec(qgis_type = "layer"))),
    "\\.tif$"
  )
  expect_s3_class(tmp_file, "qgis_tempfile_arg")
  unlink(tmp_file)

  # also check stars_proxy
  obj <- stars::read_stars(
    system.file("longlake/longlake_depth.tif", package = "qgisprocess"),
    proxy = TRUE
  )
  expect_equal(
    normalizePath(as_qgis_argument(obj, qgis_argument_spec(qgis_type = "layer"))),
    normalizePath(system.file("longlake/longlake_depth.tif", package = "qgisprocess"))
  )

  obj <- stars::read_stars(
    system.file("longlake/longlake.tif", package = "qgisprocess"),
    proxy = TRUE
  )
  expect_equal(
    normalizePath(as_qgis_argument(obj, qgis_argument_spec(qgis_type = "layer"))),
    normalizePath(system.file("longlake/longlake.tif", package = "qgisprocess"))
  )

  expect_warning(
    as_qgis_argument(obj, qgis_argument_spec(qgis_type = "multilayer")),
    "extract the bands"
  )

  # check behaviour in case of band selection
  obj1 <- obj[, , , 2]
  res <- expect_message(
    as_qgis_argument(obj1, qgis_argument_spec(qgis_type = "layer")),
    "Rewriting"
  )
  expect_s3_class(res, "qgis_tempfile_arg")
})


test_that("stars result coercers work", {
  skip_if_not_installed("stars")

  expect_s3_class(
    stars::st_as_stars(
      structure(
        system.file("longlake/longlake.tif", package = "qgisprocess"),
        class = "qgis_outputRaster"
      )
    ),
    "stars"
  )

  expect_s3_class(
    stars::st_as_stars(
      structure(
        system.file("longlake/longlake.tif", package = "qgisprocess"),
        class = "qgis_outputLayer"
      )
    ),
    "stars"
  )

  expect_s3_class(
    stars::st_as_stars(
      structure(
        list(
          OUTPUT = structure(
            system.file("longlake/longlake.tif", package = "qgisprocess"),
            class = "qgis_outputRaster"
          )
        ),
        class = "qgis_result"
      )
    ),
    "stars"
  )
})

Try the qgisprocess package in your browser

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

qgisprocess documentation built on Aug. 17, 2023, 5:14 p.m.