1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
test_that("simple expressions left as is", {
lf <- lazy_frame(x = 1:10, y = 1:10)
expect_equal(capture_dot(lf, NULL), NULL)
expect_equal(capture_dot(lf, 10), 10)
expect_equal(capture_dot(lf, x), sym("x"))
expect_equal(capture_dot(lf, x + y), expr(x + y))
expect_equal(capture_dot(lf, x[[1]]), expr(x[[1]]))
# logicals
expect_equal(eval(capture_dot(lf, T), globalenv()), TRUE)
expect_equal(eval(capture_dot(lf, F), globalenv()), FALSE)
expect_equal(capture_dot(lf, TRUE), TRUE)
expect_equal(capture_dot(lf, FALSE), FALSE)
})
test_that("existing non-variables get inlined", {
lf <- lazy_frame(x = 1:10, y = 1:10)
n <- 10
expect_equal(capture_dot(lf, x + n), expr(x + 10))
})
test_that("using environment of inlined quosures", {
lf <- lazy_frame(x = 1:10, y = 1:10)
n <- 10
quo <- new_quosure(quote(x + n), env(n = 20))
expect_equal(capture_dot(lf, f(!!quo)), quote(f(x + 20)))
})
test_that("namespace operators always evaluated locally", {
lf <- lazy_frame(x = 1, y = 2)
expect_equal(partial_eval(quote(base::sum(1, 2)), lf), 3)
expect_equal(partial_eval(quote(base:::sum(1, 2)), lf), 3)
})
test_that("namespaced calls to dplyr functions are stripped", {
lf <- lazy_frame(x = 1, y = 2)
expect_equal(partial_eval(quote(dplyr::n()), lf), expr(n()))
# hack to avoid check complaining about not declared imports
expect_equal(partial_eval(rlang::parse_expr("stringr::str_to_lower(x)"), lf), expr(str_to_lower(x)))
expect_equal(partial_eval(rlang::parse_expr("lubridate::today()"), lf), expr(today()))
})
test_that("use quosure environment for unevaluted formulas", {
lf <- lazy_frame(x = 1, y = 2)
z <- 1
expect_equal(partial_eval(expr(~z), lf), quote(~1))
})
test_that("can look up inlined function", {
lf <- lazy_frame(x = 1, y = 2)
expect_equal(
partial_eval(expr((!!mean)(x)), data = lf),
expr(mean(x))
)
})
test_that("respects tidy evaluation pronouns", {
lf <- lazy_frame(x = 1, y = 2)
x <- "X"
X <- "XX"
expect_equal(partial_eval(expr(.data$x), lf), expr(x))
expect_equal(partial_eval(expr(.data[["x"]]), lf), expr(x))
expect_equal(partial_eval(expr(.data[[x]]), lf), expr(X))
expect_equal(partial_eval(expr(.env$x), lf), "X")
expect_equal(partial_eval(expr(.env[["x"]]), lf), "X")
expect_equal(partial_eval(expr(.env[[x]]), lf), "XX")
})
test_that("fails with multi-classes", {
lf <- lazy_frame(x = 1, y = 2)
x <- structure(list(), class = c('a', 'b'))
expect_error(partial_eval(x, lf), "Unknown input type", fixed = TRUE)
})
|