test_that("HTTP HEAD & synchronous then", { do <- function() { http_head(http$url("/"))$then(function(value) value$status_code)$then( function(x) expect_equal(x, 200) ) } synchronise(do()) }) test_that("HTTP HEAD & async then", { do <- function() { http_head(http$url("/"))$then(function(value) http_get(value$url))$then( function(value) expect_equal(value$status_code, 200) ) } synchronise(do()) }) test_that("HTTP HEAD & async then & sync then", { do <- function() { http_head(http$url("/"))$then(function(value) http_get(value$url))$then( function(value) value$status_code )$then(function(value) expect_equal(value, 200)) } synchronise(do()) }) test_that("then for fulfilled", { do <- async(function() { dx <- http_head(http$url("/status/404")) dx2 <- http_head(http$url("/status/404")) dx$then(function() { dx2$then(function(value) value$status_code)$then( function(value) expect_equal(value, 404) ) }) }) synchronise(do()) }) test_that("multiple then clauses are not allowed", { do <- async(function() { dx <- delay(1 / 1000) dx$then(function() 1) dx$then(function() 2) }) err <- tryCatch(synchronise(do()), error = identity) expect_s3_class(err, "async_rejected") expect_match(conditionMessage(err), "already owned") }) test_that("compact function notation", { do <- function() { http_head(http$url("/"))$then(function(.) http_get(.$url))$then( function(.) .$status_code )$then(function(.) expect_equal(., 200)) } synchronise(do()) }) test_that("embedded then", { add1 <- function(n) { n delay(10 / 1000)$then(function(value) n + 1) } mul3 <- function(n) { n delay(10 / 1000)$then(function(value) n * 3) } do <- function() { add1(4)$then(mul3)$then(function(.) expect_equal(., 15)) } synchronise(do()) }) test_that("more embedded thens", { steps <- numeric() do <- function() { async(function() steps <<- c(steps, 1))()$then(function() { async_constant()$then(function() steps <<- c(steps, 2))$then( function() steps <<- c(steps, 3) ) })$then(function() { async_constant()$then(function() steps <<- c(steps, 4))$then( function() steps <<- c(steps, 5) ) })$then(function() steps <<- c(steps, 6)) } synchronise(do()) expect_equal(steps, 1:6) })