Skip to content

Commit 80f2b4a

Browse files
TESTS: Migrate to the 'testme' framework
1 parent 07da369 commit 80f2b4a

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

43 files changed

+654
-2
lines changed

.Rbuildignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Rplots.pdf$
5353
#----------------------------
5454
# Package specific
5555
#----------------------------
56-
[.]future
56+
^[.]future
5757

5858
#----------------------------
5959
# Miscellaneous

DESCRIPTION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Package: future.tests
22
Title: Test Suite for 'Future API' Backends
3-
Version: 0.9.0-9002
3+
Version: 0.9.0-9003
44
Authors@R: c(
55
person("Henrik", "Bengtsson", role = c("aut", "cre", "cph"), email = "[email protected]"),
66
person(family = "The R Consortium", comment = "Project was awarded an Infrastructure Steering Committee (ISC) grant in 2017", role = "fnd"))

R/testme.R

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
## This runs 'testme' test inst/testme/test-<name>.R scripts
2+
## Don't edit - it was autogenerated by inst/testme/deploy.R
3+
testme <- function(name) {
4+
path <- system.file(package = 'future.tests', 'testme', mustWork = TRUE)
5+
Sys.setenv(R_TESTME_PATH = path)
6+
Sys.setenv(R_TESTME_PACKAGE = 'future.tests')
7+
Sys.setenv(R_TESTME_NAME = name)
8+
on.exit(Sys.unsetenv('R_TESTME_NAME'))
9+
source(file.path(path, 'run.R'))
10+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
## Undo future debug
2+
options(future.debug = FALSE)
3+
4+
## Undo future strategy
5+
future::plan(oplan)
Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
testme <- as.environment("testme")
2+
3+
## Undo options
4+
## (a) Reset
5+
options(oopts0)
6+
7+
## (b) Remove added
8+
local({
9+
added <- setdiff(names(options()), names(oopts0))
10+
opts <- vector("list", length = length(added))
11+
names(opts) <- added
12+
options(opts)
13+
})
14+
15+
## (c) Assert that everything was undone
16+
if (!identical(options(), oopts0)) {
17+
message("Failed to undo options:")
18+
oopts <- options()
19+
message(sprintf(" - Expected options: [n=%d] %s",
20+
length(oopts0), hpaste(sQuote(names(oopts0)))))
21+
extra <- setdiff(names(oopts), names(oopts0))
22+
message(paste(sprintf(" - Options still there: [n=%d]", length(extra)),
23+
hpaste(sQuote(extra))))
24+
missing <- setdiff(names(oopts0), names(oopts))
25+
message(paste(sprintf(" - Options missing: [n=%d]", length(missing)),
26+
hpaste(sQuote(missing))))
27+
28+
message("Differences option by option:")
29+
void <- lapply(names(oopts0), FUN = function(name) {
30+
value0 <- oopts0[[name]]
31+
value <- oopts[[name]]
32+
if (!identical(value, value0)) {
33+
if (testme[["debug"]]) {
34+
utils::str(list(name = name, expected = value0, actual = value))
35+
}
36+
}
37+
})
38+
}
39+
40+
41+
## Undo system environment variables
42+
## (a) Reset
43+
do.call(Sys.setenv, args=as.list(oenvs0))
44+
## (b) Removed added
45+
added <- setdiff(names(Sys.getenv()), names(oenvs0))
46+
Sys.unsetenv(added)
47+
## (c) Assert that everything was undone
48+
if (!identical(Sys.getenv(), oenvs0)) {
49+
message("Failed to undo environment variables:")
50+
oenvs <- Sys.getenv()
51+
message(sprintf(" - Expected environment variables: [n=%d] %s",
52+
length(oenvs0), hpaste(sQuote(names(oenvs0)))))
53+
extra <- setdiff(names(oenvs), names(oenvs0))
54+
message(paste(sprintf(" - Environment variables still there: [n=%d]", length(extra)),
55+
hpaste(sQuote(extra))))
56+
missing <- setdiff(names(oenvs0), names(oenvs))
57+
message(paste(sprintf(" - Environment variables missing: [n=%d]", length(missing)),
58+
hpaste(sQuote(missing))))
59+
message("Differences environment variable by environment variable:")
60+
void <- lapply(names(oenvs0), FUN = function(name) {
61+
value0 <- unname(oenvs0[name])
62+
value <- unname(oenvs[name])
63+
if (!identical(value, value0)) {
64+
if (testme[["debug"]]) {
65+
utils::str(list(name = name, expected = value0, actual = value))
66+
}
67+
}
68+
})
69+
}
70+
71+
72+
## Assert undo was successful
73+
if (testme[["debug"]]) {
74+
stopifnot(identical(options(), oopts0))
75+
}
76+
77+
## Undo variables
78+
rm(list = c(setdiff(ls(envir = globalenv()), ovars)), envir = globalenv())

inst/testme/_epilogue/090.gc.R

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
## Travis CI specific: Explicit garbage collection because it
2+
## looks like Travis CI might run out of memory during 'covr'
3+
## testing and we now have so many tests. /HB 2017-01-11
4+
if ("covr" %in% loadedNamespaces()) {
5+
res <- gc()
6+
testme <- as.environment("testme")
7+
if (testme[["debug"]]) print(res)
8+
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
testme <- as.environment("testme")
2+
if (testme[["debug"]]) {
3+
info <- utils::sessionInfo()
4+
message("Session information:")
5+
print(info)
6+
}
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
## Look for detritus files
2+
testme <- as.environment("testme")
3+
local({
4+
delta <- diff_connections(get_connections(), testme[["testme_connections"]])
5+
if (any(lengths(delta) > 0)) {
6+
message(sprintf("Detritus connections generated by test %s:", sQuote(testme[["name"]])))
7+
print(delta)
8+
9+
## Close added connections, because they are expected?
10+
if (!is.null(delta[["added"]]) &&
11+
"detritus-connections" %in% testme[["tags"]]) {
12+
idxs <- delta[["added"]][["index"]]
13+
for (idx in idxs) {
14+
tryCatch({
15+
con <- getConnection(idx)
16+
close(con)
17+
}, error = identity)
18+
}
19+
delta <- diff_connections(get_connections(), testme[["testme_connections"]])
20+
if (any(lengths(delta) > 0)) {
21+
message(sprintf("Detritus connections generated by test %s remains after shutting down expected connections added:", sQuote(testme[["name"]])))
22+
print(delta)
23+
} else {
24+
message(sprintf("No detritus connections remaining from test %s after shutting down expected ones", sQuote(testme[["name"]])))
25+
}
26+
}
27+
}
28+
})
29+
30+
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
## Look for detritus files
2+
testme <- as.environment("testme")
3+
4+
local({
5+
path <- dirname(tempdir())
6+
7+
if (basename(path) == "working_dir") {
8+
files <- dir(pattern = "^Rscript", path = path, all.files = TRUE, full.names = TRUE)
9+
if (length(files) > 0L) {
10+
message(sprintf("Detritus 'Rscript*' files generated by test %s:", sQuote(testme[["name"]])))
11+
print(files)
12+
13+
## Remove detritus files produced by this test script, so that
14+
## other test scripts will not fail because of these files.
15+
unlink(files)
16+
17+
## Signal the problem
18+
msg <- sprintf("Detected 'Rscript*' files: [n=%d] %s", length(files), paste(sQuote(basename(files)), collapse = ", "))
19+
## Are detritus files files expected by design on MS Windows?
20+
## If so, produce a warning, otherwise an error
21+
if ("detritus-files" %in% testme[["tags"]] &&
22+
.Platform[["OS.type"]] == "windows") {
23+
warning(msg, immediate. = TRUE)
24+
} else {
25+
stop(msg)
26+
}
27+
}
28+
} else {
29+
message(sprintf("Skipping, because path appears not to be an 'R CMD check' folder: %s", sQuote(path)))
30+
}
31+
})

inst/testme/_prologue/001.load.R

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
loadNamespace("future.tests")

0 commit comments

Comments
 (0)