tests/testthat/test_vesalius_objects.R

# Running test for Vesalius objects
# Loading data from the packages
data(vesalius)

test_that("Vesalius build single assay", {
    # checking normal builds with format conversion
    expect_s4_class(build_vesalius_assay(coordinates, counts),
        "vesalius_assay")
    expect_s4_class(build_vesalius_assay(coordinates,
        as.data.frame(as.matrix(counts))),
        "vesalius_assay")
    expect_s4_class(build_vesalius_assay(coordinates,
       as.matrix(counts)),
        "vesalius_assay")
    expect_s4_class(build_vesalius_assay(as.matrix(coordinates),
       counts),
        "vesalius_assay")
    tmp <- coordinates
    colnames(tmp) <- LETTERS[1:3]
    expect_error(build_vesalius_assay(tmp, counts))
    # checking normal builds with unsuported formats
    expect_error(build_vesalius_assay(coordinates, "counts"))
    expect_error(build_vesalius_assay(coordinates, 2))
    expect_error(build_vesalius_assay("coordinates", counts))

    # checking that you can build partial objects
    # coordinates must always be parsed
    expect_s4_class(build_vesalius_assay(coordinates),
        "vesalius_assay")
    expect_error(build_vesalius_assay())
    expect_error(build_vesalius_assay(counts = counts))

    
    #testing output
    tmp <- build_vesalius_assay(coordinates, counts)
    expect_output(show(tmp))
})



test_that("Adding counts to vesalius_assay", {
    # checking if count matrix can be added
    vesalius <- build_vesalius_assay(coordinates)
    ## When no counts are present
    expect_s4_class(add_counts(vesalius,
        counts = counts,
        raw = counts),
        "vesalius_assay")
    expect_error(add_counts(vesalius,
        counts = counts))
    expect_s4_class(add_counts(vesalius,
        counts = counts,
        force = TRUE),
        "vesalius_assay")
    ## checking that active count matrix is being tagged
    tmp <- add_counts(vesalius,
        counts = counts,
        raw = counts)
    expect_identical(comment(tmp@counts), "custom_counts")
    tmp <- add_counts(vesalius,
        counts = counts,
        raw = counts,
        add_name = "my_counts")
    expect_identical(comment(tmp@counts), "my_counts")
    ## checking if count have been properly addjusted
    ## Note: this is check again when tiles have already 
    ## been generated.
    barcodes_in_tiles <- vesalius@tiles$barcodes
    barcodes_in_counts <- colnames(tmp@counts$my_counts)
    expect_identical(barcodes_in_tiles, barcodes_in_counts)
})

test_that("Adding counts to vesalius_assay with counts", {
    # generating base object
    vesalius <- build_vesalius_assay(coordinates, counts)
    ## When no counts are present
    expect_s4_class(add_counts(vesalius,
        counts = counts,
        raw = counts),
        "vesalius_assay")
    # return the same object if counts is NULL used internally
    expect_s4_class(add_counts(vesalius,
        counts = NULL,
        raw = counts),
        "vesalius_assay")
    expect_error(add_counts(vesalius,
        counts = counts))
    expect_s4_class(add_counts(vesalius,
        counts = counts,
        force = TRUE),
        "vesalius_assay")
    ## checking that active count matrix is being tagged
    tmp <- add_counts(vesalius,
        counts = counts,
        raw = counts)
    expect_identical(comment(tmp@counts), "custom_counts")
    expect_true(grep(pattern = "raw_custom_counts",
        x = names(tmp@counts),
        value = TRUE) == "raw_custom_counts")
})

test_that("Adding custom embeddings", {
    # from coordinates only 
    vesalius <- build_vesalius_assay(coordinates)
    vesalius <- generate_tiles(vesalius)
    # Generate custom embedding matrix of identical size
    embeds <- matrix(0,
        ncol = 30,
        nrow = length(unique(vesalius@tiles$barcodes)))
    # Expect error if no rownames are provided 
    expect_error(add_embeddings(vesalius, embeds))
    # Adding rownames
    rownames(embeds) <- unique(vesalius@tiles$barcodes)

    # expect valid object now that you have rownames
    expect_s4_class(add_embeddings(vesalius, embeds),
        "vesalius_assay")
    expect_s4_class(add_embeddings(vesalius, NULL),
        "vesalius_assay")
    expect_s4_class(add_embeddings(vesalius, as.data.frame(embeds)),
        "vesalius_assay")
    # adding duplicated colnames
    colnames(embeds) <- rep("A", 30)
    #expect_error(add_embeddings(vesalius, embeds))
    # We expect the same thing even if it is truncated
    expect_warning(add_embeddings(vesalius, embeds[-(1:20), ]))

    # Testng if new name is being added 
    vesalius <- add_embeddings(vesalius, embeds, add_name = "funky")
    expect_s4_class(vesalius, "vesalius_assay")
    expect_equal(get_active_embedding_tag(vesalius), "funky")

    
})

test_that("Scale of coordinates",{
    expect_s4_class(build_vesalius_assay(coordinates,
        counts), "vesalius_assay")
    expect_s4_class(build_vesalius_assay(coordinates,
        counts,
        scale = 15), "vesalius_assay")
    vesalius <- build_vesalius_assay(coordinates,
        counts, scale = "auto")
    expect_equal(vesalius@meta$scale$scale, 23.0623695)
    vesalius <- build_vesalius_assay(coordinates,
        counts, scale = 15)
    expect_equal(vesalius@meta$scale$scale, 15)
    expect_equal(vesalius@meta$unit, "um")
})

test_that("Adding Cells",{
    # generating base object
    vesalius <- build_vesalius_assay(coordinates, counts)
    cells <- sample(LETTERS[1:10], size = nrow(coordinates), replace = TRUE)
    # expect error if no names assigned to cell type
    expect_error(add_cells(vesalius, cells))
    names(cells) <- make.unique(sample(LETTERS, nrow(coordinates), replace = TRUE))
    expect_error(add_cells(vesalius, cells))
    # adding new territory slot
    names(cells) <- coordinates$barcodes
    expect_s4_class(add_cells(vesalius, cells), "vesalius_assay")
    expect_s4_class(add_cells(vesalius, NULL), "vesalius_assay")
    cells <- sample(LETTERS[1:13], size = nrow(coordinates), replace = TRUE)
    names(cells) <- coordinates$barcodes
    expect_s4_class(add_cells(vesalius, cells),
        "vesalius_assay")
    # check show methods for cells 
    buffer <- add_cells(vesalius, cells)
    expect_s4_class(buffer,
        "vesalius_assay")
    buffer <- add_cells(vesalius, cells, add_name = "funky")
    expect_s4_class(buffer,
        "vesalius_assay")

})
patrickCNMartin/Vesalius documentation built on April 17, 2025, 11:31 p.m.