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 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
library(testthat)
library(logging)
context("Testing formatting limitation handling [test.format-limitations]")
test_setup <- function() {
test_env <- new.env(parent = emptyenv())
test_env$logged <- NULL
mock_action <- function(msg, handler, ...) {
if (length(list(...)) && "dry" %in% names(list(...)))
return(TRUE)
test_env$logged <- c(test_env$logged, msg)
}
mock_formatter <- function(record) {
paste(record$levelname, record$logger, record$msg, sep = ":")
}
logReset()
addHandler(mock_action,
level = "DEBUG",
formatter = mock_formatter)
return(test_env)
}
## test functions
test_that("formatlimits/up_to_limit_w_formating", {
env <- test_setup()
msg0_9 <- paste(0:9, collapse = "")
msg8190 <- paste(rep(msg0_9, 819), collapse = "")
stopifnot(nchar(msg8190) == 8190)
msg8190_s <- paste0(msg8190, "%s")
stopifnot(nchar(msg8190_s) == 8192)
loginfo(msg8190_s, paste0(".", msg0_9))
expect_equal(env$logged, paste0("INFO::", msg8190, ".", msg0_9))
})
test_that("formatlimits/over_limit_w_formatting_fails", {
env <- test_setup()
msg0_9 <- paste(0:9, collapse = "")
msg8190 <- paste(rep(msg0_9, 819), collapse = "")
stopifnot(nchar(msg8190) == 8190)
msg8190_sX <- paste0(msg8190, "%s", "X")
stopifnot(nchar(msg8190_sX) == 8193)
expect_error({
loginfo(msg8190_sX, paste0(".", msg0_9))
},
regexp = "'msg' length exceeds maximal format length 8192")
})
test_that("formatlimits/over_limit_wo_format_args_passes", {
env <- test_setup()
msg0_9 <- paste(0:9, collapse = "")
msg8190 <- paste(rep(msg0_9, 819), collapse = "")
stopifnot(nchar(msg8190) == 8190)
msg8190_sX <- paste0(msg8190, "%s", "X")
stopifnot(nchar(msg8190_sX) == 8193)
loginfo(msg8190_sX)
expect_equal(env$logged, paste0("INFO::", msg8190_sX))
})
test_that("formatlimits/over_limit_wo_formatting", {
env <- test_setup()
msg0_9 <- paste(0:9, collapse = "")
msg8190 <- paste(rep(msg0_9, 819), collapse = "")
stopifnot(nchar(msg8190) == 8190)
# long message without formatting
msg8190_x2 <- paste0(msg8190, ".", msg8190)
stopifnot(nchar(msg8190_x2) == 2 * 8190 + 1)
loginfo(msg8190_x2)
expect_equal(env$logged, paste0("INFO::", msg8190_x2))
env$logged <- c()
# long message with %% at end
msg8190_m_perc <- paste0(msg8190, "%%", "X")
stopifnot(nchar(msg8190_m_perc) == 8193)
loginfo(msg8190_m_perc)
expect_equal(env$logged, paste0("INFO::", msg8190_m_perc))
env$logged <- c()
# long message with %% at start
msg8190_perc_m <- paste0("%%", "X", msg8190)
stopifnot(nchar(msg8190_perc_m) == 8193)
loginfo(msg8190_perc_m)
expect_equal(env$logged, paste0("INFO::", msg8190_perc_m))
})
|