--- a
+++ b/tests/testthat/test-plots.R
@@ -0,0 +1,228 @@
+# Testing plotting functions
+test_that("non-spatial plots", {
+
+  # get data
+  data("xenium_data")
+  
+  # get custom colors
+  # colors <- scales::hue_pal()(length(unique(xenium_data$clusters)))
+  colors <- hue_pal(length(unique(xenium_data$clusters)))
+  names(colors) <- unique(xenium_data$clusters)
+  
+  # embedding plot
+  vrEmbeddingPlot(xenium_data, group.by = "clusters", embedding = "umap", label = T)
+  vrEmbeddingPlot(xenium_data, group.by = "clusters", embedding = "umap", group.ids = c(1,3,4), label = T)
+  vrEmbeddingPlot(xenium_data, group.by = "clusters", embedding = "umap", colors = colors, label = T)
+  vrEmbeddingPlot(xenium_data, group.by = "clusters", embedding = "umap", group.ids = c(1,3,4), colors = colors[c(1,3,4)], label = T)
+  vrEmbeddingPlot(xenium_data, group.by = "clusters", ncol = 3, split.by = "clusters")
+  vrEmbeddingPlot(xenium_data, group.by = "clusters", ncol = 3, split.by = "Sample")
+  expect_error(vrEmbeddingPlot(xenium_data, group.by = "clusters", ncol = 3, split.by = "art"))
+  
+  # embedding feature plot
+  vrEmbeddingFeaturePlot(xenium_data, features = c("ACTA2", "TACSTD2"), embedding = "umap", combine.features = TRUE)
+  
+  # scatterplot
+  vrScatterPlot(xenium_data, feature.1 = "NKG7", feature.2 = "TRAC")
+  xenium_data <- normalizeData(xenium_data)
+  vrScatterPlot(xenium_data, feature.1 = "NKG7", feature.2 = "TRAC", norm = TRUE)
+})
+
+
+# Testing plotting functions
+test_that("spatial plots", {
+
+  # get data
+  data("xenium_data")
+
+  # get custom colors
+  # colors <- scales::hue_pal()(length(unique(xenium_data$clusters)))
+  colors <- hue_pal(length(unique(xenium_data$clusters)))
+  names(colors) <- unique(xenium_data$clusters)
+
+  # spatial plot, groups and colors
+  vrSpatialPlot(xenium_data, group.by = "clusters", plot.segments = TRUE)
+  vrSpatialPlot(xenium_data, group.by = "clusters", group.ids = c(1,3,4), plot.segments = TRUE)
+  vrSpatialPlot(xenium_data, group.by = "clusters", colors = colors, plot.segments = TRUE)
+  vrSpatialPlot(xenium_data, group.by = "clusters", group.ids = c(1,3,4), colors = colors[c(1,3,4)], plot.segments = TRUE)
+  
+  # spatial plot, background color
+  vrSpatialPlot(xenium_data, group.by = "clusters", background.color = "black")
+  vrSpatialPlot(xenium_data, group.by = "clusters", background.color = "yellow")
+  vrSpatialPlot(xenium_data, group.by = "clusters", background.color = "white")
+  
+  # spatial plot with spatial and channel arguments
+  vrSpatialPlot(xenium_data, group.by = "clusters", spatial = "main")
+  vrSpatialPlot(xenium_data, group.by = "clusters", spatial = "main", background.color = "yellow")
+  vrSpatialPlot(xenium_data, group.by = "clusters", spatial = "main", channel = "DAPI")
+  vrSpatialPlot(xenium_data, group.by = "clusters", channel = "DAPI")
+  vrSpatialPlot(xenium_data, group.by = "clusters", channel = "DAPI2")
+  vrSpatialPlot(xenium_data, group.by = "clusters", spatial = "main", channel = "DAPI2")
+  expect_error(vrSpatialPlot(xenium_data, group.by = "clusters", spatial = "main2"))
+  expect_error(vrSpatialPlot(xenium_data, group.by = "clusters", spatial = "main2", channel = "DAPI2"))
+
+  # spatial plot, old background argument
+  expect_warning(
+    expect_warning(vrSpatialPlot(xenium_data, group.by = "clusters", background = "main")))
+  expect_warning(
+      expect_warning(vrSpatialPlot(xenium_data, group.by = "clusters", background = c("main", "DAPI2"))))
+  expect_warning(
+    expect_warning(
+      expect_error(vrSpatialPlot(xenium_data, group.by = "clusters", background = "main2"))))
+  
+  # spatial plot without segmentation
+  vrSpatialPlot(xenium_data, group.by = "clusters", plot.segments = FALSE)
+
+  # spatial plot of visium
+  vrSpatialPlot(visium_data)
+
+  # spatial plot of melc data
+  vrSpatialPlot(melc_data, group.by = "Clusters")
+  expect_error(vrSpatialPlot(melc_data, group.by = "Clusters_new"))
+
+  # feature plots
+  vrSpatialFeaturePlot(visium_data, features = "Count")
+  vrSpatialFeaturePlot(visium_data, features = "Stat1", norm = TRUE, log = TRUE)
+  expect_error(vrSpatialFeaturePlot(visium_data, features = "Count_new"))
+  vrSpatialFeaturePlot(xenium_data, features = c("ACTA2", "TACSTD2"), norm = TRUE, combine.features = TRUE)
+  
+  # return
+  expect_equal(1,1L)
+})
+
+# Testing plotting functions
+test_that("missing_embedding_values", {
+  
+  # get data
+  data("visium_data")
+  data("xenium_data")
+  
+  # change embeddings 
+  vrEmbeddings(xenium_data, type = "new_umap") <- vrEmbeddings(xenium_data, type = "umap")[sample(1:length(vrSpatialPoints(xenium_data)), 500),]
+  vrEmbeddingPlot(xenium_data, embedding = "new_umap")
+  expect_error(vrEmbeddingPlot(xenium_data, embedding = "new_umap", group.by = "cluster"))
+  vrEmbeddingFeaturePlot(xenium_data, embedding = "new_umap", features = "Count")
+  expect_error(vrEmbeddingFeaturePlot(xenium_data, embedding = "new_umap", features = "Counts"))
+  vrEmbeddingFeaturePlot(xenium_data, embedding = "new_umap", features = "REXO4")
+  expect_error(vrEmbeddingFeaturePlot(xenium_data, embedding = "new_umap", features = "REXO4s"))
+  
+  # return
+  expect_equal(1,1L)
+})
+
+# Testing plotting functions
+test_that("rasterization", {
+  
+  # get data
+  data("xenium_data")
+  
+  # spatial plot
+  vrSpatialPlot(xenium_data, group.by = "clusters", background.color = "black", n.tile = 100)
+  vrSpatialPlot(xenium_data, group.by = "clusters", background.color = "black", n.tile = 1)
+  vrSpatialPlot(xenium_data, group.by = "clusters", background.color = "black", n.tile = 10)
+
+  # feature plots
+  vrSpatialFeaturePlot(xenium_data, features = "Count", n.tile = 20)
+  vrSpatialFeaturePlot(xenium_data, features = "KRT14", norm = TRUE, log = TRUE, n.tile = 10)
+  expect_error(vrSpatialFeaturePlot(xenium_data, features = "Count_new"))
+  vrSpatialFeaturePlot(xenium_data, features = c("ACTA2", "TACSTD2"), norm = TRUE, n.tile = 100, combine.features = TRUE)
+  vrSpatialFeaturePlot(xenium_data, features = c("ACTA2", "TACSTD2"), norm = TRUE, n.tile = 2, combine.features = TRUE)
+  
+  # embedding plots
+  vrEmbeddingPlot(xenium_data, n.tile = 1200, group.by = "clusters")
+  vrEmbeddingFeaturePlot(xenium_data, n.tile = 1200, features = c("ACTA2", "TACSTD2"))
+  vrEmbeddingFeaturePlot(xenium_data, n.tile = 100, features = c("ACTA2", "TACSTD2"), embedding = "umap", combine.features = TRUE)
+  vrEmbeddingFeaturePlot(xenium_data, n.tile = 2, features = c("ACTA2", "TACSTD2"), embedding = "umap", combine.features = TRUE)
+  vrEmbeddingPlot(xenium_data, n.tile = 2, group.by = "clusters")
+  vrEmbeddingFeaturePlot(xenium_data, n.tile = 10, features = c("ACTA2"))
+  
+  # return
+  expect_equal(1,1L)
+})
+
+# testing multilayer plots
+test_that("multilayer", {
+  
+  skip_if_not_installed("ggnewscale")
+  data("merged_object")
+  
+  # single
+  vrSpatialPlot(merged_object)
+  
+  # cell vs ROI (without segments)
+  vrSpatialPlot(merged_object, plot.segments = FALSE) |>
+    addSpatialLayer(merged_object, assay = "Assay3", group.by = "Sample", alpha = 0.3)
+  
+  # cell vs ROI (with segments)
+  vrSpatialPlot(merged_object, plot.segments = TRUE) |>
+    addSpatialLayer(merged_object, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue"))
+
+  # ROI vs cell
+  vrSpatialPlot(merged_object, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue")) |>
+    addSpatialLayer(merged_object, assay = "Assay1")
+  vrSpatialPlot(merged_object, assay = "Assay3", group.by = "Sample", alpha = 1, colors = list(Block = "blue")) |>
+    addSpatialLayer(merged_object, assay = "Assay1", plot.segments = TRUE, alpha = 0.4)
+  vrSpatialPlot(merged_object, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue")) |>
+    addSpatialLayer(merged_object, assay = "Assay1", n.tile = 100)
+  
+  # cell vs molecule (without segments)
+  vrSpatialPlot(merged_object, plot.segments = FALSE) |>
+    addSpatialLayer(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green"))
+  
+  # cell vs molecule 
+  vrSpatialPlot(merged_object, plot.segments = TRUE) |>
+    addSpatialLayer(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green"))
+  
+  # molecule vs cell (with segments)
+  vrSpatialPlot(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green")) |>
+    addSpatialLayer(merged_object, assay = "Assay1")
+  vrSpatialPlot(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green")) |>
+    addSpatialLayer(merged_object, assay = "Assay1", plot.segments = TRUE, alpha = 0.4)
+  
+  # cells, ROIs and molecules together
+  vrSpatialPlot(merged_object, plot.segments = TRUE) |>
+    addSpatialLayer(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green")) |>
+    addSpatialLayer(merged_object, assay = "Assay3", group.by = "Layer", alpha = 0.4, colors = list(Section3 = "blue"))
+  
+  expect_equal(1,1)
+})
+
+# testing multilayer plots
+# TODO: tiling multilayer visualization behavior is not ideal right now
+test_that("multilayer (with tiling)", {
+  
+  skip_if_not_installed("ggnewscale")
+  data("merged_object")
+  
+  # single
+  vrSpatialPlot(merged_object)
+  
+  # cell vs ROI (without segments)
+  vrSpatialPlot(merged_object, plot.segments = FALSE, n.tile = 100) |>
+    addSpatialLayer(merged_object, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue"))
+  
+  # ROI vs cell
+  vrSpatialPlot(merged_object, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue")) |>
+    addSpatialLayer(merged_object, assay = "Assay1", n.tile = 100)
+  
+  # cell vs molecule (without segments)
+  vrSpatialPlot(merged_object, plot.segments = FALSE) |>
+    addSpatialLayer(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green"), n.tile = 100)
+  vrSpatialPlot(merged_object, plot.segments = FALSE, n.tile = 100) |>
+    addSpatialLayer(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green"), n.tile = 100)
+  
+  # cell vs molecule 
+  vrSpatialPlot(merged_object, plot.segments = TRUE) |>
+    addSpatialLayer(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green"), n.tile = 100)
+  
+  # molecule vs cell (with segments)
+  vrSpatialPlot(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green")) |>
+    addSpatialLayer(merged_object, assay = "Assay1", n.tile = 100)
+  vrSpatialPlot(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green")) |>
+    addSpatialLayer(merged_object, assay = "Assay1", plot.segments = TRUE)
+  
+  # molecule vs ROI
+  vrSpatialPlot(merged_object, assay = "Assay2", group.by = "gene", alpha = 1, colors = list(KRT15 = "blue", KRT14 = "green"), n.tile = 100) |>
+    addSpatialLayer(merged_object, assay = "Assay3", group.by = "Sample", alpha = 0.4, colors = list(Block = "blue"))
+  
+  expect_equal(1,1)
+})
\ No newline at end of file