library(testthat) library(RGenEDA) library(pheatmap) test_that("distanceHeatmap returns correct structure", { # Minimal geneda object mat <- matrix(1:20, nrow = 5) colnames(mat) <- c("S1", "S2", "S3", "S4") rownames(mat) <- paste0("Gene", 1:5) meta <- data.frame(condition = c("A", "A", "B", "B")) rownames(meta) <- colnames(mat) rownames(mat) <- c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5") obj <- GenEDA(normalized = mat, metadata = meta) res <- distanceHeatmap(obj) expect_type(res, "list") expect_true(all(c("dist_matrix", "order", "heatmap", "palettes") %in% names(res))) expect_s3_class(res$heatmap, "pheatmap") expect_equal(dim(res$dist_matrix), c(4, 4)) }) test_that("distanceHeatmap respects reorder = FALSE", { mat <- matrix(1:20, nrow = 5) colnames(mat) <- c("S1", "S2", "S3", "S4") rownames(mat) <- paste0("Gene", 1:5) meta <- data.frame(condition = c("A", "A", "B", "B")) rownames(meta) <- colnames(mat) rownames(mat) <- c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5") obj <- GenEDA(normalized = mat, metadata = meta) res <- distanceHeatmap(obj, reorder = FALSE) expect_equal(res$order, colnames(mat)) expect_equal(rownames(res$dist_matrix), colnames(mat)) expect_equal(colnames(res$dist_matrix), colnames(mat)) }) test_that("distanceHeatmap returns plot when return='plot'", { mat <- matrix(1:20, nrow = 5) colnames(mat) <- c("S1", "S2", "S3", "S4") rownames(mat) <- paste0("Gene", 1:5) meta <- data.frame(condition = c("A", "A", "B", "B")) rownames(meta) <- colnames(mat) rownames(mat) <- c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5") obj <- GenEDA(normalized = mat, metadata = meta) res <- distanceHeatmap(obj, return = "plot") expect_type(res, "list") expect_s3_class(res$heatmap, "pheatmap") }) test_that("distanceHeatmap errors when metadata columns missing", { mat <- matrix(1:20, nrow = 5) colnames(mat) <- c("S1", "S2", "S3", "S4") rownames(mat) <- paste0("Gene", 1:5) meta <- data.frame(condition = c("A", "A", "B", "B")) rownames(meta) <- colnames(mat) rownames(mat) <- c("Gene1", "Gene2", "Gene3", "Gene4", "Gene5") obj <- GenEDA(normalized = mat, metadata = meta) expect_error(distanceHeatmap(obj, meta_cols = "nonexistent"), "The following metadata columns were not found: nonexistent") }) test_that("distanceHeatmap errors when metadata columns mismatch", { mat <- matrix(1:20, nrow = 5) colnames(mat) <- c("S1", "S2", "S3", "S4") rownames(mat) <- paste0("Gene", 1:5) meta <- data.frame(condition = c("A", "A", "B", "B")) rownames(meta) <- colnames(mat) obj <- GenEDA(normalized = mat, metadata = meta) # Hack: force mismatch by renaming meta inside the function call expect_error({ distanceHeatmap(obj, meta_cols = c("condition"))$dist_matrix[1:4,1:4] }, NA) # Actually the S4 validation prevents this, so safest is to remove this test })