test_that("negatives", {
negs <- list(
function() {},
function() { "foobar"; print(1:10) },
function() { "blah !BEBUG"; print(NULL) },
base::ls,
base::library
)
for (f in negs) {
f2 <- instrument(f)
## Not identical because of the srcrefs
expect_equal(f, f2)
expect_identical(formals(f), formals(f2))
expect_equal(body(f), body(f2))
}
})
test_that("positives", {
poss <- list(
function() { "!DEBUG foobar1" },
function(x = "!DEBUG foobar1") { x == "really?" },
function() { for (i in 1:1) { if (TRUE) { "!DEBUG foobar1" } } }
)
for (f in poss) {
f2 <- instrument(f)
expect_output(f2(), "foobar1")
}
})
test_that("functions without arguments, #17", {
f <- function() { "!DEBUG foo"; 'noarg' }
f2 <- instrument(f)
expect_output(instrument(f2()), "foo")
})
test_that("unknown objects are not touched", {
e <- new.env()
expect_equal(format(e), format(instrument(e)))
})
test_that("debug levels", {
f <- function() {
for (i in 1:1) {
if (TRUE) {
"!DEBUG foobar1"
}
"!!DEBUG foobar2"
}
"!!!DEBUG foobar3"
}
f2 <- instrument(f)
expect_output(f2(), "foobar1.*foobar2.*foobar3")
})
test_that("function with attributes", {
f <- function() {}
attr(f, "foo") <- "bar"
f2 <- instrument(f)
expect_identical(attributes(f), attributes(f2))
})
test_that("circular references", {
env <- new.env()
env$l <- list(x = env)
expect_error(instrument(env), NA)
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.