Nothing
################################################################################
context("testing view_plate-view_plate")
################################################################################
checkRow <- function(result, rowNumber, startLetter, endLetter, append = NA) {
result <- as.character(unlist(result[rowNumber, ]))
expected <- (letters)[startLetter:endLetter]
if (!missing(append)) {
expected <- c(expected, append)
}
expect_that(result,
is_equivalent_to(expected))
}
for (i in c(24, 48, 96, 384)) {
cols <- number_of_columns(i)
rows <- number_of_rows(i)
odds <- seq(1, rows, by = 2)
evens <- seq(2, rows + 1, by = 2)
colStr <- if (cols < 9) colStr <- paste0(0, cols) else as.character(cols)
maxLetters <- cols * 2
if (i == 384) {
maxLetters <- 24
odds <- 1:rows
evens <- c()
}
test_that("full plate displays correct results", {
d <- data.frame(wells = get_well_ids(i), d = letters[1:maxLetters])
result <- view_plate(d, "wells", "d", i)[[1]]
sapply(odds, FUN = function(i) checkRow(result, i, 1, cols))
sapply(evens, FUN = function(i) checkRow(result, i, cols + 1, 2 * cols))
})
test_that("missing column displays correct results", {
d <- data.frame(wells = get_well_ids(i), d = letters[1:maxLetters])
d <- d[!(substr(d$wells, 2, 3) == colStr), ]
result <- view_plate(d, "wells", "d", i)[[1]]
sapply(odds, FUN = function(i) checkRow(result, i, 1, (cols - 1), "."))
sapply(evens, FUN = function(i)
checkRow(result, i, cols + 1, 2 * cols - 1, "."))
})
test_that("missing row displays correct results", {
d <- data.frame(wells = get_well_ids(i), d = letters[1:maxLetters])
d <- d[!(substr(d$wells, 1, 1) == "A"), ]
result <- view_plate(d, "wells", "d", i)[[1]]
checkRow(result, 1, 0, 0, rep(".", cols))
sapply(odds[2:length(odds)], FUN = function(i) checkRow(result, i, 1, cols))
sapply(evens, FUN = function(i) checkRow(result, i, (cols + 1), (2 * cols)))
})
# I found that if a data frame is supplied with well IDs that are factors and
# the levels of the well IDs are not alphabetically sorted, it would throw an
# invalid well IDs error (and if that was ignored, sort display the wrong
# wells in the wrong places). This is because it would sort by the order of
# the levels, not alphabetically. This is a regression test for that bug.
test_that("well IDs as factors with weirdly ordered levels are display correctly", {
wellIds <- get_well_ids(i)
wellIds <- factor(wellIds, levels = c(wellIds[(i/2+1):i], wellIds[1:(i/2)]))
d <- data.frame(wells = wellIds, d = letters[1:maxLetters])
result <- view_plate(d, "wells", "d", i)[[1]]
sapply(odds, FUN = function(i) checkRow(result, i, 1, cols))
sapply(evens, FUN = function(i) checkRow(result, i, cols + 1, 2 * cols))
})
}
################################################################################
context("testing view_plate-ensure_correct_well_ids")
################################################################################
for (i in c(6, 12, 24, 48, 96, 384, 1536)) {
wells <- get_well_ids(i)
test_that("ensure_correct_well_ids stops if more wells than plate size", {
expect_that(ensure_correct_well_ids(data.frame(x = 1:97), "x", 96),
throws_error())
})
test_that("ensure_correct_well_ids returns identical valid input", {
temp <- data.frame(Ids = wells)
expect_that(ensure_correct_well_ids(temp, "Ids", i),
is_identical_to(temp))
})
}
################################################################################
context("testing view_plate-are_well_ids_correct()")
################################################################################
for (i in c(6, 12, 24, 48, 96, 384, 1536)) {
wells <- get_well_ids(i)
test_that("are_well_ids_correct() returns false for too short or long", {
expect_false(are_well_ids_correct(wells[1:(i - 1)], i))
expect_false(are_well_ids_correct("A01", i))
expect_false(are_well_ids_correct(c(wells, "H13"), i))
})
test_that("are_well_ids_correct() returns false for repeated wells", {
expect_false(are_well_ids_correct(c(wells[1:i - 1], "A01"), i))
})
test_that("are_well_ids_correct() returns false for missing leading zeros", {
expect_false(are_well_ids_correct(c(paste0("A", 1:4), wells[1:4]), i))
})
test_that("are_well_ids_correct() returns true for correct input", {
expect_true(are_well_ids_correct(wells, i))
})
test_that("are_well_ids_correct() returns true for correct but out of order", {
expect_true(are_well_ids_correct(wells[sample(1:i, i)], i))
})
}
################################################################################
context("testing view_plate-fill_in_missing_well_ids()")
################################################################################
for (i in c(6, 12, 24, 48, 96, 384, 1536)) {
# set up data frame
if (i <= 12) subset = i else subset = 24
text <- paste0(letters[1:subset], LETTERS[26:(26 - subset + 1)])
numbers <- sample(1:10000, i)
data <- data.frame(wells = get_well_ids(i), text = text, numbers = numbers)
# helper function
validate <- function(result, data, bounds) {
expect_that(result$wells, is_equivalent_to(data$wells))
expect_that(result[0:bounds, ], is_equivalent_to(data[0:bounds, ]))
expect_that(colnames(result), is_equivalent_to(colnames(data)))
}
test_that("fill_in_missing_well_ids() fails with equal or more rows than wells", {
expect_that(fill_in_missing_well_ids(data, "wells", i), throws_error())
expect_that(fill_in_missing_well_ids(rbind(data, data), "wells", i),
throws_error())
})
test_that("fill_in_missing_well_ids() works with three columns as factor", {
result <- fill_in_missing_well_ids(data[1:min(i-2, 10), ], "wells", i)
validate(result, data, min(i-2, 10))
})
test_that("fill_in_missing_well_ids() works with three columns as character", {
d <- data
d$wells <- as.character(d$wells)
result <- fill_in_missing_well_ids(d[1:min(i-2, 10), ], "wells", i)
validate(result, d, min(i-2, 10))
})
test_that("fill_in_missing_well_ids() works with only well column", {
# use drop = FALSE to prevent data frame becoming vector
result <- fill_in_missing_well_ids(data[1:min(i-2, 10), "wells", drop = FALSE], "wells", i)
validate(result, data[ , "wells", drop = FALSE], min(i-2, 10))
})
test_that("fill_in_missing_well_ids() works with zero rows, one columns", {
result <- fill_in_missing_well_ids(data[0, "wells", drop = FALSE], "wells", i)
expect_that(result$wells, is_equivalent_to(data$wells))
expect_that(colnames(result), is_equivalent_to("wells"))
})
test_that("fill_in_missing_well_ids() throws error with missing leading zeroes", {
d <- data
d$wells <- get_well_ids_without_leading_zeroes(i)
expect_that(fill_in_missing_well_ids(d, "wells", i), throws_error())
})
test_that("fill_in_missing_well_ids() doesn't change if well IDs are invalid", {
d <- data
if (i <= 12) subset = i else subset = 24
d$wells <- letters[1:subset]
subset <- min(subset - 2, 10)
result <- fill_in_missing_well_ids(d[1:subset, ], "wells", i)
validate(result[1:subset, ], d[1:subset, ], subset)
})
}
################################################################################
context("testing view_plate-correct_leading_zeroes()")
################################################################################
for (i in c(6, 12, 24, 48, 96, 384, 1536)) {
with <- data.frame(w = get_well_ids(i), b = 1:i, stringsAsFactors = FALSE)
without <- data.frame(w = get_well_ids_without_leading_zeroes(i), b = 1:i, stringsAsFactors = FALSE)
test_that("correct_leading_zeroes returns same df for correct wells", {
expect_that(correct_leading_zeroes(with, "w", i), is_identical_to(with))
})
test_that("correct_leading_zeroes returns same df for correct wells as character", {
d <- with
expect_that(correct_leading_zeroes(d, "w", i), is_equivalent_to(d))
})
test_that("correct_leading_zeroes doesn't change unrelated text", {
d <- data.frame(w = letters[1:24], b = 1:i, stringsAsFactors = FALSE)
expect_that(correct_leading_zeroes(d, "w", i), is_equivalent_to(d))
})
test_that("correct_leading_zeroes corrects incorrect wells", {
expect_that(correct_leading_zeroes(without, "w", i), is_equivalent_to(with))
})
test_that("correct_leading_zeroes corrects incorrect wells as char", {
correct <- with
d <- without
expect_that(correct_leading_zeroes(d, "w", i),
is_equivalent_to(correct))
})
test_that("correct_leading_zeroes fixes one incorrect well", {
d <- with
expect_that(correct_leading_zeroes(d, "w", i), is_equivalent_to(with))
})
test_that("correct_leading_zeroes throws error with incorrect plate size", {
expect_that(correct_leading_zeroes(with, "w", 95), throws_error())
})
}
################################################################################
context("testing view_plate-are_leading_zeroes_valid()")
################################################################################
for (i in c(6, 12, 24, 48, 96, 384, 1536)) {
with <- data.frame(w = get_well_ids(i))
without <- data.frame(w = get_well_ids_without_leading_zeroes(i))
test_that("are_leading_zeroes_valid returns TRUE for correct wells", {
expect_true(are_leading_zeroes_valid(with, "w", i))
})
test_that("are_leading_zeroes_valid returns TRUE for correct wells as char", {
d <- with
d$w <- as.character(d$w)
expect_true(are_leading_zeroes_valid(d, "w", i))
})
test_that("are_leading_zeroes_valid returns TRUE for unrelated text", {
d <- data.frame(w = 1:i)
expect_true(are_leading_zeroes_valid(d, "w", i))
})
test_that("are_leading_zeroes_valid returns FALSE for incorrect wells", {
expect_false(are_leading_zeroes_valid(without, "w", i))
})
test_that("are_leading_zeroes_valid returns FALSE for incorrect wells as char", {
d <- without
d$w <- as.character(d$w)
expect_false(are_leading_zeroes_valid(d, "w", i))
})
test_that("are_leading_zeroes_valid returns FALSE for one incorrect well", {
d <- with
d$w <- factor(d$w, levels = c(levels(d$w), "A1"))
d[1, "w"] <- "A1"
expect_false(are_leading_zeroes_valid(d, "w", i))
})
}
test_that("view_plate works on grouped tibbles", {
data <- dplyr::tibble(well = c("A01", "F12", "G09"), Droplets = 1:3)
data <- dplyr::group_by(data, Droplets)
# NA means expect no error
expect_error(view_plate(data, "well", "Droplets", 96), NA)
data <- dplyr::tibble(well = c("A01", "F12", "G09"), Droplets = 1:3)
data <- dplyr::group_by(data, well)
expect_error(view_plate(data, "well", "Droplets", 96), NA)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.