Nothing
# Setup ----
file <- test_path("testdata", "single_sample.adat")
header <- parseHeader(file)
# Testing ----
test_that("`parseHeader()` correctly parses header information of an ADAT", {
# test the Col.Meta entry up front (too big)
expect_equal(header$file_specs$data_begin - (header$file_specs$table_begin + 1),
length(header$Col.Meta))
expect_named(header, c("Header.Meta", "Col.Meta", "file_specs", "row_meta"))
expect_true(all(lengths(header$Col.Meta) == 5284L))
expect_named(header$Col.Meta, c("SeqId", "SeqIdVersion", "SomaId",
"TargetFullName", "Target", "UniProt",
"EntrezGeneID", "EntrezGeneSymbol",
"Organism", "Units", "Type", "Dilution",
"PlateScale_Reference", "CalReference",
"Cal_Example_Adat_Set001", "ColCheck",
"CalQcRatio_Example_Adat_Set001_170255",
"QcReference_170255",
"Cal_Example_Adat_Set002",
"CalQcRatio_Example_Adat_Set002_170255"))
expect_equal(header$Header.Meta$COL_DATA$Name, names(header$Col.Meta),
ignore_attr = TRUE)
# remove Col.Meta entry and snapshot
header <- header[names(header) != "Col.Meta"]
expect_snapshot(header)
})
# Edge cases --------
test_that("`parseHeader()` free form section", {
fil <- tempfile("header-", fileext = ".txt")
cat("^HEADER\n!Version\t1.2\n^FreeForm\n!BumbleFish\tLion\n", file = fil)
x <- parseHeader(fil)
unlink(fil)
expect_true(x$file_specs$empty_adat)
expect_equal(x$Header.Meta$FreeForm$BumbleFish, .setAttr("Lion", "!BumbleFish"))
})
test_that("`parseHeader()` COL_DATA section", {
fil <- tempfile("header-", fileext = ".txt")
cat("^HEADER\n!Version\t1.2\n^COL_DATA\n!Name\tDog\tCat\tBear\n", file = fil)
x <- parseHeader(fil)
unlink(fil)
expect_true(x$file_specs$empty_adat)
expect_false(x$file_specs$old_adat)
expect_equal(x$Col.Meta, list())
expect_equal(x$Header.Meta$COL_DATA$Name,
.setAttr(c("Dog", "Cat", "Bear"), "!Name"))
})
test_that("`parseHeader()` ROW_DATA section", {
fil <- tempfile("header-", fileext = ".txt")
cat("^HEADER\n!Version\t1.2\n^ROW_DATA\n!Name\tBear\tCat\tDog\n", file = fil)
x <- parseHeader(fil)
unlink(fil)
expect_true(x$file_specs$empty_adat)
expect_false(x$file_specs$old_adat)
expect_equal(x$Col.Meta, list())
expect_equal(x$Header.Meta$ROW_DATA$Name,
.setAttr(c("Bear", "Cat", "Dog"), "!Name"))
})
test_that("`parseHeader()` skips blank rows in header section", {
fil <- tempfile("header-", fileext = ".txt")
cat("^HEADER\n!Version\t1.2\n!Key\tvalue\n", file = fil)
x <- parseHeader(fil)
unlink(fil)
fil2 <- tempfile("header-", fileext = ".txt")
cat("^HEADER\n!Version\t1.2\n\n!Key\tvalue\n", file = fil2)
expect_warning(
y <- parseHeader(fil2),
"Blank row detected in `Header` section ... it will be skipped."
)
unlink(fil2)
expect_equal(x, y)
})
test_that("trim runaway tabs in anchor lines and throw warning", {
anchors <- c("^HEADER", "^ROW_META", "^COL_META", "^TABLE_BEGIN")
lapply(anchors, function(.x) expect_equal(.trimRunawayTabs(.x), .x))
expect_warning(
y <- .trimRunawayTabs("^HEADER\t"),
"Trailing tabs filling out header block in one of:"
)
expect_equal(y, "^HEADER")
expect_warning(
y <- .trimRunawayTabs("^TABLE_BEGIN\t"),
"Trailing tabs filling out header block in one of:"
)
expect_equal(y, "^TABLE_BEGIN")
# no caret ^ symbol; no trimming
expect_equal(.trimRunawayTabs("TABLE_BEGIN"), "TABLE_BEGIN")
expect_equal(.trimRunawayTabs("TABLE_BEGIN\t\t\t"), "TABLE_BEGIN\t\t\t")
# tabs do not trail to end; no trimming
expect_equal(.trimRunawayTabs("^HEADER\t\t\t\tfoo"), ("^HEADER\t\t\t\tfoo"))
})
test_that("catch for non-square Col.Meta section", {
fil <- tempfile("header-", fileext = ".txt")
cat(paste0("^HEADER\n!Version\t1.2\n",
"^TABLE_BEGIN\n",
"\t\t\tSeqId\ta\tb\tc\n",
"\t\t\tType\t1\t2\t3\t4\n",
"PlateId\n"), file = fil)
expect_error(
parseHeader(fil),
paste0("Col.Meta lengths unequal! The Col.Meta block in not square\\.\n",
"There may be trailing tabs in the Col.Meta section\\.")
)
unlink(fil)
})
# .getHeaderLines() ----
test_that("`.getHeaderLines()` grabs the header correctly, not the whole file", {
fil <- tempfile("header-", fileext = ".txt")
cat(paste0("^HEADER\n!Version\t1.2\n",
"^TABLE_BEGIN\n",
"\t\t\tSeqId\ta\tb\tc\n",
"\t\t\tType\t1\t2\t3\t4\n",
"PlateId\n"), file = fil)
expect_length(.getHeaderLines(fil), 6L)
expect_equal(.getHeaderLines(fil)[6L], "PlateId")
unlink(fil)
# create a dummy header
fil <- tempfile("header-", fileext = ".txt")
header <- rep_len("Key\tValue\n", 40L)
colmeta <- paste0(strrep("\t", 25L), "SeqId", strrep("\t1234-7", 1000L), "\n")
plate <- paste0("PlateId", strrep("\t", 500L), "\n")
cat(header, "TABLE_BEGIN\n", colmeta, plate, file = fil, sep = "")
expect_length(.getHeaderLines(fil), 43L)
expect_equal(.getHeaderLines(fil)[43L], trimws(plate, whitespace = "[\r\n]"))
})
test_that("`.getHeaderLines()` grabs header correctly, with actual ADAT", {
lines <- .getHeaderLines(file)
expect_length(lines, 42L)
rowmetaline <- paste0(header$row_meta, collapse = "\t")
L <- header$file_specs$data_begin
expect_equal(trimws(lines[L]), rowmetaline)
expect_match(
squish(lines[L + 1L]), # pick the single sample
paste("Example Adat Set001 2020-06-18 SG15214400 H7 258495800010 8 3",
"Sample 20 Plasma-PPT 1.00193072 PASS 0.98411617 1.03270156",
"0.91519153 [0-9\\. ]+")
)
})
# empty ADAT ----
test_that("an empty ADAT is correctly handled", {
file <- test_path("testdata", "empty.adat")
x <- .getHeaderLines(file)
expect_length(x, 40L)
x <- parseHeader(file)
expect_named(x, c("Header.Meta", "Col.Meta", "file_specs"))
expect_true(x$file_specs$empty_adat)
})
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.