test_that("perhaps doesn't modify a function if it doesn't error or warn", { for_all( a = anything(), property = function(a) perhaps(identity, default = 0)(a) %>% expect_identical(a) ) }) test_that("perhaps modifies a function to return a default when it has warnings", { for_all( a = anything(), property = function(a) perhaps(function(b) warning(""), default = a)(NULL) %>% expect_identical(a) ) }) test_that("perhaps modifies a function to return a default when it has errors", { for_all( a = anything(), property = function(a) perhaps(function(b) stop(""), default = a)(NULL) %>% expect_identical(a) ) }) test_that("allow_warning allows functions with warnings to return expected", { for_all( a = anything(), property = function(a) perhaps(function(b) { warning(""); b }, allow_warning = TRUE)(a) %>% expect_equal(a) ) }) test_that("perhaps will return the expected value if the predicate returns TRUE", { for_all( a = any_atomic(), property = function(a) perhaps(identity, ensure = is.atomic, default = 0)(a) %>% expect_identical(a) ) }) test_that("perhaps will return the default if the predicate returns FALSE", { for_all( a = any_undefined(), property = function(a) perhaps(identity, ensure = not_undefined, default = a)(NULL) %>% expect_identical(a) ) })