summaryrefslogtreecommitdiff
path: root/tests/runUnitTests.R
blob: 2d56d89a7c353347d9588bcf31258af92746ccf2 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
pkgname <- "guix.install"
subdir <- "unitTests"
path <- getwd()

.failure_details <- function(result) {
    res <- result[[1L]]
    if (res$nFail > 0 || res$nErr > 0) {
        Filter(function(x) length(x) > 0, lapply(res$sourceFileResults, 
            function(fileRes) {
              names(Filter(function(x) x$kind != "success", 
                fileRes))
            }))
    }
    else list()
}

root <- system.file(package = pkgname)
library(pkgname, character.only = TRUE, quietly = TRUE)
dir <- file.path(root, subdir)
if (!file.exists(dir)) {
    dir <- file.path(root, "inst", subdir)
}
if (!file.exists(dir)) {
    stop("unable to find unit tests, no subdir ", sQuote(subdir))
}

library("RUnit", quietly = TRUE)
RUnit_opts <- getOption("RUnit", list())
RUnit_opts$verbose <- 0L
RUnit_opts$silent <- TRUE
RUnit_opts$verbose_fail_msg <- TRUE
oopt <- options(RUnit = RUnit_opts)
on.exit(options(oopt))
suite <- RUnit::defineTestSuite(name = paste(pkgname, "RUnit Tests"), 
    dirs = dir, testFileRegexp = "^test_.*\\.R$", rngKind = "default", 
    rngNormalKind = "default")
result <- RUnit::runTestSuite(suite)
cat("\n\n")
RUnit::printTextProtocol(result, showDetails = FALSE)
if (length(details <- .failure_details(result)) > 0) {
    cat("\nTest files with failing tests\n")
    for (i in seq_along(details)) {
        cat("\n  ", basename(names(details)[[i]]), "\n")
        for (j in seq_along(details[[i]])) {
            cat("    ", details[[i]][[j]], "\n")
        }
    }
    cat("\n\n")
    stop("unit tests failed for package ", pkgname)
}