mirror of https://github.com/msberends/AMR.git
138 lines
5.9 KiB
R
138 lines
5.9 KiB
R
# ==================================================================== #
|
|
# TITLE #
|
|
# AMR: An R Package for Working with Antimicrobial Resistance Data #
|
|
# #
|
|
# SOURCE #
|
|
# https://github.com/msberends/AMR #
|
|
# #
|
|
# CITE AS #
|
|
# Berends MS, Luz CF, Friedrich AW, Sinha BNM, Albers CJ, Glasner C #
|
|
# (2022). AMR: An R Package for Working with Antimicrobial Resistance #
|
|
# Data. Journal of Statistical Software, 104(3), 1-31. #
|
|
# doi:10.18637/jss.v104.i03 #
|
|
# #
|
|
# Developed at the University of Groningen and the University Medical #
|
|
# Center Groningen in The Netherlands, in collaboration with many #
|
|
# colleagues from around the world, see our website. #
|
|
# #
|
|
# This R package is free software; you can freely use and distribute #
|
|
# it for both personal and commercial purposes under the terms of the #
|
|
# GNU General Public License version 2.0 (GNU GPL-2), as published by #
|
|
# the Free Software Foundation. #
|
|
# We created this package for both routine data analysis and academic #
|
|
# research and it was publicly released in the hope that it will be #
|
|
# useful, but it comes WITHOUT ANY WARRANTY OR LIABILITY. #
|
|
# #
|
|
# Visit our website for the full manual and a complete tutorial about #
|
|
# how to conduct AMR data analysis: https://msberends.github.io/AMR/ #
|
|
# ==================================================================== #
|
|
|
|
# we use {tinytest} instead of {testthat} because it does not rely on recent R versions - we want to test on R >= 3.0.
|
|
|
|
# Run them in RStudio using:
|
|
# rstudioapi::jobRunScript("tests/tinytest.R", name = "AMR Unit Tests", workingDir = getwd(), exportEnv = "tinytest_results")
|
|
|
|
# test only on GitHub Actions and at using RStudio jobs - not on CRAN as tests are lengthy
|
|
if (tryCatch(isTRUE(AMR:::import_fn("isJob", "rstudioapi")()), error = function(e) FALSE) ||
|
|
identical(Sys.getenv("R_RUN_TINYTEST"), "true")) {
|
|
# env var 'R_LIBS_USER' got overwritten during 'R CMD check' in GitHub Actions, so:
|
|
.libPaths(c(Sys.getenv("R_LIBS_USER_GH_ACTIONS"), .libPaths()))
|
|
if (AMR:::pkg_is_available("tinytest", also_load = TRUE)) {
|
|
library(AMR)
|
|
# set language
|
|
set_AMR_locale("English")
|
|
# set some functions if on old R
|
|
if (getRversion() < "3.2.0") {
|
|
anyNA <- AMR:::anyNA
|
|
dir.exists <- AMR:::dir.exists
|
|
file.size <- AMR:::file.size
|
|
file.mtime <- AMR:::file.mtime
|
|
isNamespaceLoaded <- AMR:::isNamespaceLoaded
|
|
lengths <- AMR:::lengths
|
|
}
|
|
if (getRversion() < "3.3.0") {
|
|
strrep <- AMR:::strrep
|
|
}
|
|
if (getRversion() < "3.5.0") {
|
|
isFALSE <- AMR:::isFALSE
|
|
}
|
|
if (getRversion() < "3.6.0") {
|
|
str2lang <- AMR:::str2lang
|
|
# trims() was introduced in 3.3.0, but its argument `whitespace` only in 3.6.0
|
|
trimws <- AMR:::trimws
|
|
}
|
|
if (getRversion() < "4.0.0") {
|
|
deparse1 <- AMR:::deparse1
|
|
}
|
|
|
|
# temporary fix for tinytest, https://github.com/markvanderloo/tinytest/pull/114
|
|
expect_warning <- function (current, pattern = ".*", class = "warning", info = NA_character_, ...) {
|
|
messages <- list()
|
|
warnings <- list()
|
|
errors <- list()
|
|
tryCatch(withCallingHandlers(current, warning = function(w) {
|
|
warnings <<- append(warnings, list(w))
|
|
invokeRestart("muffleWarning")
|
|
}, message = function(m) {
|
|
messages <<- append(messages, list(m))
|
|
invokeRestart("muffleMessage")
|
|
}), error = function(e) errors <<- append(errors, list(e)))
|
|
nmsg <- length(messages)
|
|
nwrn <- length(warnings)
|
|
nerr <- length(errors)
|
|
results <- sapply(warnings, function(w) {
|
|
inherits(w, class) && any(grepl(pattern, w$message, ...), na.rm = TRUE)
|
|
})
|
|
if (any(results)) {
|
|
result <- TRUE
|
|
short <- diff <- NA_character_
|
|
}
|
|
else {
|
|
result <- FALSE
|
|
short <- "xcpt"
|
|
diff <- if (nwrn == 0) {
|
|
"No warning was emitted"
|
|
}
|
|
else {
|
|
n_right_class <- sum(sapply(warnings, function(w) inherits(w,
|
|
class)))
|
|
if (n_right_class == 0) {
|
|
head <- sprintf("Found %d warning(s), but not of class '%s'.",
|
|
nwrn, class)
|
|
head <- paste(head, "Showing up to three warnings:\n")
|
|
body <- first_n(warnings)
|
|
paste(head, body)
|
|
}
|
|
else {
|
|
wrns <- Filter(function(w) inherits(w, class),
|
|
warnings)
|
|
head <- sprintf("Found %d warnings(s) of class '%s', but not matching '%s'.",
|
|
nwrn, class, pattern)
|
|
head <- paste(head, "\nShowing up to three warnings:\n")
|
|
body <- first_n(wrns)
|
|
paste(head, body)
|
|
}
|
|
}
|
|
}
|
|
if (!result && (nmsg > 0 || nerr > 0))
|
|
diff <- paste0(diff, sprintf("\nAlso found %d message(s) and %d error(s)",
|
|
nmsg, nerr))
|
|
tinytest::tinytest(result, call = sys.call(sys.parent(1)), short = short,
|
|
diff = diff, info = info)
|
|
}
|
|
|
|
|
|
# start the unit tests
|
|
out <- test_package("AMR",
|
|
testdir = ifelse(dir.exists("inst/tinytest"),
|
|
"inst/tinytest",
|
|
"tinytest"
|
|
),
|
|
verbose = 99,
|
|
color = FALSE
|
|
)
|
|
cat("\n\nSUMMARY:\n")
|
|
print(summary(out))
|
|
}
|
|
}
|