test_that("it returns a function", {
ret <- async(function() { })
expect_true(is.function(ret))
})
test_that("it returns a function with the same arity", {
defs <- list(
function(a, b, c) { },
function() { },
function(a, b, c, d, e, f, g, h) { },
function(x) { },
function(a = "foo", b = "bar") { },
function(...) { },
function(x = 10, ..., last = "foo") { }
)
for (f in defs) {
f2 <- async(f)
expect_equal(formals(f), formals(f2))
}
})
test_that("when called it returns a deferred", {
fun <- async(function() "foo")
synchronise(dx <- fun())
expect_true(is_deferred(dx))
})
test_that("preserves closure", {
env <- new.env()
foo <- local(envir = env, {
baz <- list(x = 7)
async(function() parent.env(parent.env(environment())))
})
do <- async(function() {
dx <- foo()$
then(function(result) expect_identical(result, env))
})
synchronise(do())
})
test_that("resolves to the definition", {
do <- async(function() {
foo <- async(function () "blah")
dx <- foo()$
then(function(result) expect_equal(result, "blah"))
})
synchronise(do())
})
test_that("rejects with the thrown error", {
do <- async(function() {
act <- NULL
exp <- simpleError("Expected thrown value to match rejection value")
foo <- async(function() { stop(exp); "blah" })
dx <- foo()$
catch(error = function(err) { act <<- exp; exp })$
then(function(value) {
if (is.null(act)) {
stop("Extected function to throw")
} else if (!identical(act, exp)) {
stop(exp)
}
})
})
expect_silent(synchronise(do()))
})
test_that("triggers error on unhandled rejection", {
did_trigger <- FALSE
do <- async(function() {
foo <- async(function() stop("Nobody handled me"))
foo()
})
tryCatch(
synchronise(do()),
error = function(e) did_trigger <<- TRUE
)
expect_true(did_trigger)
})
test_that("can be cancelled", {
called <- called2 <- FALSE
do <- function() {
afun <- async(function() called <<- TRUE)
dx <- afun()
dy <- dx$then(function() called2 <<- TRUE)
dx$cancel()
dy
}
err <- tryCatch(synchronise(do()), error = identity)
expect_equal(conditionMessage(err), "Cancelled")
expect_s3_class(err, "async_cancelled")
expect_s3_class(err, "async_rejected")
expect_false(called)
expect_false(called2)
})
test_that("built-ins are marked as async", {
expect_true(is_async(async_constant))
expect_true(is_async(async_detect))
expect_true(is_async(async_every))
expect_true(is_async(async_filter))
expect_true(is_async(async_map))
expect_true(is_async(async_reflect))
expect_true(is_async(async_retry))
expect_true(is_async(async_sequence))
expect_true(is_async(async_some))
expect_true(is_async(async_timeout))
expect_true(is_async(async_until))
expect_true(is_async(async_whilst))
expect_true(is_async(delay))
expect_true(is_async(http_get))
expect_true(is_async(http_head))
expect_true(is_async(when_all))
expect_true(is_async(when_any))
expect_true(is_async(when_some))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.