--- a +++ b/tests/testthat/test-spatial.R @@ -0,0 +1,134 @@ +test_that("spatial neighbors", { + + # get data + data("xenium_data") + + # spatial neighbors, delaunay + xenium_data <- getSpatialNeighbors(xenium_data, method = "delaunay", verbose = FALSE) + graphs <- vrGraph(xenium_data, graph.type = "delaunay") + expect_true(inherits(graphs,"igraph")) + expect_true(length(igraph::E(graphs)) > 0) + vrSpatialPlot(xenium_data, graph.name = "delaunay", group.by = "clusters") + + # spatial neighbors, spatialkNN + xenium_data <- getSpatialNeighbors(xenium_data, method = "spatialkNN", k = 5, verbose = FALSE) + graphs <- vrGraph(xenium_data, graph.type = "spatialkNN") + expect_true(inherits(graphs,"igraph")) + expect_true(length(igraph::E(graphs)) > 0) + vrSpatialPlot(xenium_data, graph.name = "spatialkNN", group.by = "clusters") + + # spatial neighbors, radius + xenium_data <- getSpatialNeighbors(xenium_data, method = "radius", radius = 10, verbose = FALSE) + graphs <- vrGraph(xenium_data, graph.type = "radius") + expect_true(inherits(graphs,"igraph")) + expect_true(length(igraph::E(graphs)) > 0) + vrSpatialPlot(xenium_data, graph.name = "radius", group.by = "clusters") + + # return + expect_equal(1,1L) +}) + +test_that("spatial neighbors for subsets", { + + # get data + data("xenium_data") + + # merge two of same types + xenium_data2 <- xenium_data + xenium_data2$Sample <- "XeniumR2" + merged_data <- merge(xenium_data, xenium_data2, verbose = FALSE) + + # spatial neighbors, delaunay + merged_data <- getSpatialNeighbors(merged_data, assay = "Assay1", method = "delaunay", verbose = FALSE) + graphs <- vrGraph(merged_data, graph.type = "delaunay") + expect_true(inherits(graphs,"igraph")) + expect_true(length(igraph::E(graphs)) > 0) + vrSpatialPlot(merged_data, graph.name = "delaunay", group.by = "clusters") + + # return + expect_equal(1,1L) +}) + +test_that("spatial tests", { + + # get data + data("xenium_data") + + # spatial neighbors, radius based + xenium_data <- getSpatialNeighbors(xenium_data, method = "radius", radius = 10, verbose = FALSE) + + # getis ord test + xenium_data <- getHotSpotAnalysis(xenium_data, graph.type = "radius", features = c("GNLY"), verbose = FALSE) + expect_true(all(c("GNLY_hotspot_stat", "GNLY_hotspot_pvalue", "GNLY_hotspot_flag") %in% colnames(Metadata(xenium_data)))) + xenium_data <- getHotSpotAnalysis(xenium_data, graph.type = "radius", features = c("GNLY", "Count"), verbose = FALSE) + expect_error(getHotSpotAnalysis(xenium_data, graph.type = "radius", features = c("GNLY", "Count1"), verbose = FALSE)) + expect_error(getHotSpotAnalysis(xenium_data, graph.type = "radius", features = c("GNLY2", "Count1"), verbose = FALSE)) + + # multiple assays + data("xenium_data") + xenium_data2 <- xenium_data + xenium_data2$Sample <- "Sample2" + xenium_data <- merge(xenium_data, xenium_data2, verbose = FALSE) + xenium_data <- getSpatialNeighbors(xenium_data, method = "radius", radius = 10, verbose = FALSE) + xenium_data <- getHotSpotAnalysis(xenium_data, graph.type = "radius", features = c("GNLY", "Count"), verbose = FALSE) + expect_true(all(c("GNLY_hotspot_stat", "GNLY_hotspot_pvalue", "GNLY_hotspot_flag") %in% colnames(Metadata(xenium_data)))) + expect_true(all(c("Count_hotspot_stat", "Count_hotspot_pvalue", "Count_hotspot_flag") %in% colnames(Metadata(xenium_data)))) +}) + +test_that("niche clustering", { + + data("xenium_data") + + #### + # single assay + #### + + # build niche assay + xenium_data2 <- getSpatialNeighbors(xenium_data, radius = 15, method = "radius", verbose = FALSE) + xenium_data2 <- getNicheAssay(xenium_data2, label = "clusters", graph.type = "radius") + expect_equal(vrFeatureTypeNames(xenium_data2), c("RNA", "Niche")) + xenium_data2 <- getNicheAssay(xenium_data2, label = "clusters", graph.type = "radius", new_feature_name = "Niche2") + expect_equal(vrFeatureTypeNames(xenium_data2), c("RNA", "Niche", "Niche2")) + expect_error(getNicheAssay(xenium_data2, label = "clusters1", graph.type = "radius")) + + # cluster niches + vrMainFeatureType(xenium_data2) <- "Niche" + xenium_data2 <- getClusters(xenium_data2, nclus = 3, method = "kmeans", label = "cluster_niches") + expect_true("cluster_niches" %in% colnames(Metadata(xenium_data2))) + expect_error(xenium_data2 <- getClusters(xenium_data2, nclus = 0, method = "kmeans", label = "cluster_niches")) + expect_error(xenium_data2 <- getClusters(xenium_data2, nclus = 1.1, method = "kmeans", label = "cluster_niches")) + expect_error(xenium_data2 <- getClusters(xenium_data2, nclus = -1, method = "kmeans", label = "cluster_niches")) + expect_error(xenium_data2 <- getClusters(xenium_data2, nclus = c(1,2), method = "kmeans", label = "cluster_niches")) + + # clean + rm(xenium_data2) + + #### + # multiple assays + #### + + xenium_data2 <- xenium_data + xenium_data2$Sample <- "Sample2" + xenium_data2 <- merge(xenium_data2, xenium_data, verbose = FALSE) + xenium_data2 <- getSpatialNeighbors(xenium_data2, radius = 15, method = "radius", verbose = FALSE) + xenium_data3 <- getNicheAssay(xenium_data2, label = "clusters", graph.type = "radius") + metadata <- vrFeatureTypeNames(xenium_data3, assay = "all") + expect_equal(metadata$Feature, c("RNA,Niche", "RNA,Niche")) + xenium_data3 <- getNicheAssay(xenium_data2, assay = "Assay1", label = "clusters", graph.type = "radius") + metadata <- vrFeatureTypeNames(xenium_data3, assay = "all") + expect_equal(metadata$Feature, c("RNA,Niche", "RNA")) + + # clean + rm(xenium_data2) + rm(xenium_data3) + +}) + +test_that("neighborhood analysis", { + + data("xenium_data") + + xenium_data <- getSpatialNeighbors(xenium_data, method = "delaunay", verbose = FALSE) + results <- vrNeighbourhoodEnrichment(xenium_data, group.by = "clusters", graph.type = "delaunay") + expect_error(results <- vrNeighbourhoodEnrichment(xenium_data, group.by = "clusters2", graph.type = "delaunay")) +}) \ No newline at end of file