tests/testthat/test-add_exon_number.R

sod1_exons <- sod1_annotation %>%
    dplyr::filter(type == "exon")

# create dummy transcripts with both positive and minus strand
# purely for testing strand functionality
test_exons <- sod1_exons %>%
    dplyr::filter(transcript_name == "SOD1-202") %>%
    dplyr::mutate(strand = "-") %>%
    dplyr::bind_rows(
        sod1_exons %>%
            dplyr::filter(transcript_name == "SOD1-201")
    )

##### add_exon_number #####

testthat::test_that("add_exon_number() works correctly", {
    test_exon_number <- test_exons %>%
        add_exon_number(group_var = "transcript_name")

    test_exon_number_plus <- test_exon_number %>%
        dplyr::filter(strand == "+")
    test_exon_number_minus <- test_exon_number %>%
        dplyr::filter(strand == "-")

    expect_true("exon_number" %in% colnames(test_exon_number))
    expect_true(is.numeric(test_exon_number[["exon_number"]]))

    expect_equal(
        test_exon_number_plus[["exon_number"]],
        seq_len(nrow(test_exon_number_plus))
    )
    expect_equal(
        test_exon_number_minus[["exon_number"]],
        seq_len(nrow(test_exon_number_minus)) %>% rev()
    )

    # check order makes no difference
    set.seed(32)
    expect_equal(
        test_exons[sample(seq_len(nrow(test_exons)), nrow(test_exons)), ] %>%
            add_exon_number(group_var = "transcript_name"),
        test_exon_number
    )
})

testthat::test_that("add_exon_number(group_var = NULL) works correctly", {
    test_exon_number_plus <- test_exons %>%
        dplyr::filter(strand == "+") %>%
        add_exon_number(group_var = NULL)
    test_exon_number_minus <- test_exons %>%
        dplyr::filter(strand == "-") %>%
        add_exon_number(group_var = NULL)

    expect_equal(
        test_exon_number_plus[["exon_number"]],
        seq_len(nrow(test_exon_number_plus))
    )
    expect_equal(
        test_exon_number_minus[["exon_number"]],
        seq_len(nrow(test_exon_number_minus)) %>% rev()
    )
})
dzhang32/ggtranscript documentation built on Aug. 29, 2024, 2:43 a.m.