tests/testthat/test-eval_conditions.R

test_that("eval_conditions() works", {
  true_condition <- function(...) TRUE
  false_condition <- function(...) FALSE

  x <- structure(list(), class = "selenider_element")

  conditions_1 <- list(rlang::quo(true_condition), rlang::quo(false_condition))

  result <- eval_conditions(rlang::quo(x), conditions_1, timeout = 0.1)
  expect_equal(result$timeout, 0.1)
  expect_equal(result$calls, list(rlang::quo(true_condition(element)), rlang::quo(false_condition(element))))
  expect_equal(result$exprs, conditions_1)
  expect_equal(result$res, list(n = 2, val = FALSE))
  expect_equal(result$x_res, x)

  conditions_2 <- list(rlang::quo(false_condition()), rlang::quo(true_condition()), rlang::quo(true_condition()))

  result <- eval_conditions(conditions_2[[1]], conditions_2[-1], timeout = 0.1)
  expect_equal(result$timeout, 0.1)
  expect_equal(result$calls, rlang::quos(false_condition(), true_condition(), true_condition()))
  expect_equal(result$exprs, result$calls)
  expect_equal(result$res, list(n = 1, val = FALSE))
  expect_equal(result$x_res, FALSE)

  conditions_3 <- list(rlang::quo(true_condition()), rlang::quo(true_condition()), rlang::quo(false_condition()))

  result <- eval_conditions(conditions_3[[1]], conditions_3[-1], timeout = 0.1)
  expect_equal(result$timeout, 0.1)
  expect_equal(result$calls, rlang::quos(true_condition(), true_condition(), false_condition()))
  expect_equal(result$exprs, result$calls)
  expect_equal(result$res, list(n = 3, val = FALSE))
  expect_equal(result$x_res, TRUE)

  conditions_4 <- list(rlang::quo(true_condition()), rlang::quo(true_condition()), rlang::quo(true_condition()))

  result <- eval_conditions(conditions_4[[1]], conditions_4[-1], timeout = 0.1)
  expect_equal(result$timeout, 0.1)
  expect_equal(result$calls, rlang::quos(true_condition(), true_condition(), true_condition()))
  expect_equal(result$exprs, result$calls)
  expect_equal(result$res, TRUE)
  expect_equal(result$x_res, TRUE)
})

test_that("parse_conditions() works", {
  expr <- rlang::expr({ myfunction() })

  expect_equal(parse_condition_expr(expr, "x"), expr)

  expr <- rlang::expr(!is_present)

  expect_equal(parse_condition_expr(expr, "x"), rlang::expr(!is_present(x)))

  expr <- rlang::expr((is_present))

  expect_equal(parse_condition_expr(expr, "x"), rlang::expr((is_present(x))))

  expr <- rlang::expr(is_present || is_enabled)

  expect_equal(parse_condition_expr(expr, "x"), rlang::expr(is_present(x) || is_enabled(x)))

  expr <- rlang::expr(all(is_present, is_enabled, na.rm = TRUE))

  expect_equal(
    parse_condition_expr(expr, "x"),
    rlang::expr(all(is_present(x), is_enabled(x), na.rm = TRUE))
  )

  expr <- rlang::expr(is_present(x = 1))

  expect_equal(parse_condition_expr(expr, "x"), expr)

  expr <- rlang::expr(myfunction(1, y = 2))

  expect_equal(parse_condition_expr(expr, "x"), rlang::expr(myfunction(x, 1, y = 2)))

  q <- rlang::quo(exists)

  expect_error(parse_condition(q, "x"), class = "selenider_error_base_exists")
})

test_that("make_elem_name() works", {
  x <- rlang::quo(x + x_ + x___)

  expect_equal(make_elem_name(x), "element")
  expect_equal(make_elem_name(x, name = "x"), "x__")
})

test_that("get_expr_string() works", {
  q <- rlang::quo(element_1 + element_2)

  expect_equal(get_expr_string(q), "element_1 + element_2")
})

Try the selenider package in your browser

Any scripts or data that you put into this service are public.

selenider documentation built on April 3, 2025, 5:51 p.m.