test_that("Checksums read and written correctly", {
testInit()
sampleDir <- system.file("examples", package = "reproducible")
sampleFiles <- list.files(sampleDir, pattern = "[.R]", full.names = TRUE)
on.exit(unlink(dirname(tmpdir), recursive = TRUE), add = TRUE)
expect_true(all(file.copy(sampleFiles, tmpdir)))
csf <- file.path(tmpdir, "CHECKSUMS.txt")
cnamesR <- c(
"result", "expectedFile", "actualFile", "checksum.x", "checksum.y",
"algorithm.x", "algorithm.y", "filesize.x", "filesize.y"
)
cnamesW <- c("file", "checksum", "filesize", "algorithm")
# 1. read Checksums without CHECKSUMS.txt file
expect_true(NROW(Checksums(tmpdir)) == 0)
Checksums(dirname(csf), write = TRUE)
txt <- Checksums(dirname(csf))
txt <- txt[grepl("R", expectedFile)]
data.table::setorderv(txt, "expectedFile")
csums <- txt$checksum.x
# 2. read Checksums with empty CHECKSUMS.txt file
expect_true(file.create(csf))
txt <- Checksums(tmpdir)
expect_true(all(colnames(txt) == cnamesR))
expect_equal(nrow(txt), 0)
# 3. write Checksums without CHECKSUMS.txt
expect_true(file.remove(csf))
txt <- Checksums(dirname(csf), write = TRUE)
txt <- txt[grepl("[.]R$", basename(expectedFile))]
data.table::setorderv(txt, "expectedFile")
expect_true(all(colnames(txt) == cnamesR))
expect_equal(nrow(txt), NROW(dir(tmpdir, pattern = "[.]R$")))
# expect_identical(sort(txt$expectedFile), sort(basename(sampleFiles)))
# expect_true(all(sort(txt$expectedFile) == sort(basename(sampleFiles))))
a <- basename2(sort(grep("\\.R$", txt[result == "OK", ]$expectedFile, value = TRUE))) # the [result == "OK",] is because some unknown reason on GA
b <- sort(basename2(sampleFiles))
expect_identical(a, b)
# expect_identical(a[1], b[1])
# expect_identical(a[2], b[2])
# expect_identical(a[3], b[3])
# expect_identical(a[4], b[4])
# expect_identical(a[5], b[5])
# expect_identical(a[6], b[6])
# 4. read Checksums with non-empty, but incomplete CHECKSUMS.txt file
out <- txt[, `:=`(
file = expectedFile,
checksum = checksum.x,
algorithm = algorithm.x
)][1:4]
# out <- data.table::data.table(file = basename(sampleFiles[-1]),
# checksum = csums[-1],
# algorithm = c("xxhash64", "xxhash64", "xxhash64", "xxhash64"),
# stringsAsFactors = FALSE)
utils::write.table(out, csf, eol = "\n", col.names = TRUE, row.names = FALSE)
txt <- Checksums(tmpdir, write = FALSE)
txt <- txt[!is.na(result)]
data.table::setorderv(txt, "expectedFile")
expect_equal(nrow(txt), NROW(out))
expect_true(all(txt$result == "OK"))
# 5. make Checksums complete -- just append one line
expect_true(all(colnames(txt) == cnamesR))
txt <- Checksums(tmpdir, write = TRUE)
txt <- Checksums(tmpdir)
txt <- txt[grepl("[.]R$", expectedFile)][result == "OK", ]
expect_equal(nrow(txt), NROW(dir(tmpdir, pattern = "[.]R$")))
# expect_true(all(sort(txt$expectedFile) == sort(basename(sampleFiles))))
a <- basename2(sort(grep("\\.R$", txt$expectedFile, value = TRUE)))
# print(txt$expectedFile)
expect_identical(a, b)
# expect_identical(a[1], b[1])
# expect_identical(a[2], b[2])
# expect_identical(a[3], b[3])
# expect_identical(a[4], b[4])
# expect_identical(a[5], b[5])
# expect_identical(a[6], b[6])
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.