tests/testthat/test_interrupt.R

library(testthat)
library(tryCatchLog)



context("test_interrupt.R")



source("init_unit_test.R")



# suppress logging of errors and warnings to avoid overly output
source("disable_logging_output.R")



# Simulate a user interrupt using the same structure as a user-triggered interrupt.
# This is the structure of an original interrupt condition.
# Observe: There is no "message" or "call" attribute available (other conditions do have that)!
ic <- structure(list(), class = c("interrupt", "condition"))

# My playground to test a non-standard interrupt condition
# ic <- tryCatchLog:::condition("interrupt", message = NULL)  # extended version with message and call attributes



test_that("interrupt conditions are logged", {

  expect_silent(tryCatchLog(signalCondition(ic))) # signalCondition returns NULL so it is silent

  last.result <- last.tryCatchLog.result()

  expect_equal(NROW(last.result), 1)
  expect_equal(last.result$msg.text, "User-requested interrupt")   # this message was injected by tryCatchLog
  expect_equal(last.result$severity, "INFO")



  catched.i <- NA
  tryCatchLog(signalCondition(ic), interrupt = function(i) catched.i <<- i)

  last.result <- last.tryCatchLog.result()

  expect_equal(NROW(last.result), 1)
  expect_equal(last.result$msg.text, "User-requested interrupt")
  expect_equal(last.result$severity, "INFO")

  expect_equal(class(catched.i), c("interrupt", "condition"))



  # Check for unwanted side effects

  catched.i <- NA
  expect_error(tryCatchLog(stop("an error"), interrupt = function(i) catched.i <<- i))

  last.result <- last.tryCatchLog.result()

  expect_equal(NROW(last.result), 1)
  expect_equal(last.result$severity, "ERROR")
  expect_equal(last.result$msg.text, "an error")



  expect_condition(tryCatchLog(signalCondition(ic), error = function(e) print("gotcha")), class = "interrupt")

  last.result <- last.tryCatchLog.result()

  expect_equal(NROW(last.result), 1)
  expect_equal(last.result$msg.text, "User-requested interrupt")
  expect_equal(last.result$severity, "INFO")

})



test_that("silent.messages do not suppress interrupt conditions", {

  tryCatchLog(signalCondition(ic), silent.messages = TRUE)

  last.result <- last.tryCatchLog.result()

  expect_equal(NROW(last.result), 1)
  expect_equal(last.result$msg.text, "User-requested interrupt")
  expect_equal(last.result$severity, "INFO")


})
aryoda/tryCatchLog documentation built on Feb. 6, 2023, 1:42 a.m.