tests/testthat/test-evaluate.R

test_that("can alert to device stack imbalance", {
  skip_if_not_installed("mockery")

  mock_dev_list <- mockery::mock(c(1L, 2L), cycle = TRUE)
  mock_dev_off <- mockery::mock()
  mockery::stub(check_device_stack, "grDevices::dev.list", mock_dev_list)
  mockery::stub(check_device_stack, "grDevices::dev.off", mock_dev_off)

  ## correct balance
  expect_equal(check_device_stack(2),
               list(success = TRUE, message = NULL))
  mockery::expect_called(mock_dev_list, 1)
  mockery::expect_called(mock_dev_off, 0)

  ## Too many open
  expect_equal(check_device_stack(0),
               list(success = FALSE, message = "Script left 2 devices open"))
  mockery::expect_called(mock_dev_list, 2)
  mockery::expect_called(mock_dev_off, 2)

  ## Too many closed
  expect_equal(check_device_stack(4),
               list(success = FALSE,
                    message = "Script closed 2 more devices than it opened!"))
  mockery::expect_called(mock_dev_list, 3)
  mockery::expect_called(mock_dev_off, 2)
})


test_that("can alert to sink stack imbalance", {
  skip_if_not_installed("mockery")

  mock_sink_number <- mockery::mock(2L, cycle = TRUE)
  mock_sink <- mockery::mock()
  mockery::stub(check_sink_stack, "sink.number", mock_sink_number)
  mockery::stub(check_sink_stack, "sink", mock_sink)

  ## correct balance
  expect_equal(check_sink_stack(2),
               list(success = TRUE, message = NULL))
  mockery::expect_called(mock_sink_number, 1)
  mockery::expect_called(mock_sink, 0)

  ## Too many open
  expect_equal(check_sink_stack(0),
               list(success = FALSE,
                    message = "Script left 2 sinks open"))
  mockery::expect_called(mock_sink_number, 2)
  mockery::expect_called(mock_sink, 2)

  ## Too many closed
  expect_equal(check_sink_stack(4),
               list(success = FALSE,
                    message = "Script closed 2 more sinks than it opened!"))
  mockery::expect_called(mock_sink_number, 3)
  mockery::expect_called(mock_sink, 2)
})

Try the orderly package in your browser

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

orderly documentation built on Jan. 24, 2026, 1:07 a.m.