test_that("spatialize_lsm returns all selected metrics", {

    result <- spatialize_lsm(landscape, what = c("lsm_p_area",
                                                 "lsm_p_contig",
                                                 "lsm_p_perim"),
                             verbose = FALSE)

    expect_length(object = result, n = 1)

    expect_equal(object = names(result[[1]]),

                 expected = c("lsm_p_area", "lsm_p_contig", "lsm_p_perim"))

    expect_true(object = all(sapply(result[[1]], class) == "SpatRaster"))
})

test_that("spatialize_lsm returns returns correct type of metrics", {

    metrics <- list_lsm(level = "patch", type = "shape metric", simplify = TRUE)

    result <- spatialize_lsm(landscape, type = "shape metric",
                      verbose = FALSE)

    result_all <- spatialize_lsm(landscape, verbose = FALSE)

    expect_equal(object = names(result[[1]]),
                 expected = metrics)

    expect_equal(object = names(result_all[[1]]),
                 expected = list_lsm(level = "patch", simplify = TRUE))
})

test_that("spatialize_lsm returns CRS", {

    skip_on_cran()

    # CRS(Raster*) before comparing, or terra::same.crs(x, y).

    result <- spatialize_lsm(podlasie_ccilc, what = "lsm_p_area",
                             verbose = FALSE)

    # CRS(Raster*) before comparing, or terra::same.crs(x, y).

    expect_true(object = terra::same.crs(x = result[[1]][[1]],
                                         y = podlasie_ccilc))

})

test_that("spatialize_lsm forwards arguments to calculate_lsm", {

    result <- spatialize_lsm(landscape, what = "lsm_p_core",
                             verbose = FALSE, edge_depth = 10)

    expect_true(all(result[[1]][[1]][] == 0))
})

test_that("spatialize_lsm works for all data types", {

    expect_length(object = spatialize_lsm(landscape_stack,
                                          what = "lsm_p_area",
                                          verbose = FALSE), n = 2)

    expect_length(object = spatialize_lsm(list(landscape, landscape),
                                          what = "lsm_p_area",
                                          verbose = FALSE), n = 2)
})

test_that("spatialize_lsm uses temp file", {

    result <- spatialize_lsm(landscape, what = "lsm_p_area",
                             to_disk = TRUE,
                             verbose = FALSE)

    expect_false(terra::inMemory(result[[1]]$lsm_p_area))
})


test_that("spatialize_lsm returns all errors", {

    expect_error(spatialize_lsm(landscape, what = "lsm_l_ta",
                         verbose = FALSE),
                 regexp = "'spatialize_lsm()' only takes patch level metrics.",
                 fixed = TRUE)
})
