From e0f4616d2f8a941b403347b70671b0e5b8578f79 Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Wed, 31 Jul 2024 08:07:15 -0500 Subject: [PATCH] Testing improvements * Switch to testthat 3 * Turn on parallel testing * Suppress partial match warning in a test. This adds an explict dependency on withr, but you already had that implicitly via testthat and other packages. * Work around (what I'm guessing is) a different in Rscript results on Mac OS. --- DESCRIPTION | 8 +++++--- tests/testthat.R | 14 +++++++++----- tests/testthat/test-CRANSKIP-appenders.R | 2 -- tests/testthat/test-CRANSKIP-helpers.R | 2 -- tests/testthat/test-CRANSKIP-hooks.R | 2 -- .../test-CRANSKIP-logger-namespaces.R | 19 +++++++++++-------- tests/testthat/test-appender.R | 2 -- tests/testthat/test-eval.R | 1 - tests/testthat/test-formatters.R | 6 ++++-- tests/testthat/test-helpers.R | 2 -- tests/testthat/test-layout.R | 2 -- tests/testthat/test-logger.R | 2 -- tests/testthat/test-return.R | 2 -- tests/testthat/test-utils.R | 2 -- 14 files changed, 29 insertions(+), 37 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 886713d6..0fbbc780 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -23,7 +23,7 @@ Suggests: slackr (>= 1.4.1), RPushbullet, telegram, - testthat, + testthat (>= 3.0.0), covr, knitr, rmarkdown, @@ -36,10 +36,12 @@ Suggests: txtq, botor, R.utils, - syslognet + syslognet, + withr Enhances: logging, futile.logger, log4r VignetteBuilder: knitr -Config/testthat/edition: 2 +Config/testthat/edition: 3 +Config/testthat/parallel: TRUE diff --git a/tests/testthat.R b/tests/testthat.R index dd41d0ec..3f021a49 100644 --- a/tests/testthat.R +++ b/tests/testthat.R @@ -1,8 +1,12 @@ +# This file is part of the standard setup for testthat. +# It is recommended that you do not modify it. +# +# Where should you do additional test configuration? +# Learn more about the roles of various files in: +# * https://r-pkgs.org/testing-design.html#sec-tests-files-overview +# * https://testthat.r-lib.org/articles/special-files.html + library(testthat) library(logger) -if (identical(Sys.getenv("NOT_CRAN"), "true")) { - test_check('logger') -} else { - test_check('logger', filter = '^[a-z]*$') -} +test_check("logger") diff --git a/tests/testthat/test-CRANSKIP-appenders.R b/tests/testthat/test-CRANSKIP-appenders.R index 2cd50efe..c02d4bbc 100644 --- a/tests/testthat/test-CRANSKIP-appenders.R +++ b/tests/testthat/test-CRANSKIP-appenders.R @@ -6,8 +6,6 @@ threshold <- log_threshold() layout <- log_layout() appender <- log_appender() -context('CRAN skip: async appender') - test_that('async logging', { t <- tempfile() my_appender <- appender_async(appender_file(file = t)) diff --git a/tests/testthat/test-CRANSKIP-helpers.R b/tests/testthat/test-CRANSKIP-helpers.R index a0a87b90..fbe89b01 100644 --- a/tests/testthat/test-CRANSKIP-helpers.R +++ b/tests/testthat/test-CRANSKIP-helpers.R @@ -1,8 +1,6 @@ library(logger) library(testthat) -context('CRAN skip: helpers') - test_that('tictoc', { expect_match(capture.output(log_tictoc(), type = 'message'), 'timer tic 0 secs') ## let time pass a bit diff --git a/tests/testthat/test-CRANSKIP-hooks.R b/tests/testthat/test-CRANSKIP-hooks.R index bf15e86a..cb13e26d 100644 --- a/tests/testthat/test-CRANSKIP-hooks.R +++ b/tests/testthat/test-CRANSKIP-hooks.R @@ -1,8 +1,6 @@ library(logger) library(testthat) -context('hooks') - eval_outside <- function(expr) { t <- tempfile() on.exit(unlink(t)) diff --git a/tests/testthat/test-CRANSKIP-logger-namespaces.R b/tests/testthat/test-CRANSKIP-logger-namespaces.R index 32fa264d..656f60bd 100644 --- a/tests/testthat/test-CRANSKIP-logger-namespaces.R +++ b/tests/testthat/test-CRANSKIP-logger-namespaces.R @@ -5,8 +5,6 @@ library(testthat) layout <- log_layout() appender <- log_appender() -context('CRAN skip: logging from packages') - test_that('called from package', { devtools::load_all(system.file('demo-packages/logger-tester-package', package = 'logger')) log_layout(layout_simple) @@ -15,6 +13,11 @@ test_that('called from package', { expect_output(logger_info_tester_function('everything = '), 'INFO') }) +rscript <- function(path) { + out <- system(paste('$R_HOME/bin/Rscript', path, '2>&1'), intern = TRUE) + setdiff(out, "NULL") +} + test_that('namespace in a remote R session to avoid calling from testthat', { t <- tempfile() @@ -23,7 +26,7 @@ test_that('namespace in a remote R session to avoid calling from testthat', { log_layout(layout_glue_generator("{ns} / {ans} / {topenv} / {fn} / {call}")) log_info("foobar")', file = t) expect_equal( - system(paste('$R_HOME/bin/Rscript', t, '2>&1'), intern = TRUE), + rscript(t), 'global / global / R_GlobalEnv / NA / NA') unlink(t) @@ -34,7 +37,7 @@ test_that('namespace in a remote R session to avoid calling from testthat', { f <- function() log_info("foobar") f()', file = t) expect_equal( - system(paste('$R_HOME/bin/Rscript', t, '2>&1'), intern = TRUE), + rscript(t), 'global / global / R_GlobalEnv / f / f()') unlink(t) @@ -46,7 +49,7 @@ test_that('namespace in a remote R session to avoid calling from testthat', { g <- function() f() g()', file = t) expect_equal( - system(paste('$R_HOME/bin/Rscript', t, '2>&1'), intern = TRUE), + rscript(t), 'global / global / R_GlobalEnv / f / f()') unlink(t) @@ -58,7 +61,7 @@ test_that('namespace in a remote R session to avoid calling from testthat', { g <- f g()', file = t) expect_equal( - system(paste('$R_HOME/bin/Rscript', t, '2>&1'), intern = TRUE), + rscript(t), 'global / global / R_GlobalEnv / g / g()') unlink(t) @@ -71,7 +74,7 @@ test_that('namespace in a remote R session to avoid calling from testthat', { logger_info_tester_function("foobar")', file = t) expect_equal( - system(paste('$R_HOME/bin/Rscript', t), intern = TRUE), + rscript(t), 'logger.tester / global / logger.tester / logger_info_tester_function / logger_info_tester_function("foobar")') unlink(t) @@ -85,7 +88,7 @@ test_that('namespace in a remote R session to avoid calling from testthat', { logger_info_tester_function("foobar")', file = t) expect_equal( - system(paste('$R_HOME/bin/Rscript', t), intern = TRUE), + rscript(t), 'logger.tester / logger.tester / logger.tester / logger_info_tester_function / logger_info_tester_function("foobar")') unlink(t) diff --git a/tests/testthat/test-appender.R b/tests/testthat/test-appender.R index 31ed3847..f49c90b4 100644 --- a/tests/testthat/test-appender.R +++ b/tests/testthat/test-appender.R @@ -6,8 +6,6 @@ threshold <- log_threshold() layout <- log_layout() appender <- log_appender() -context('appenders') - test_that('append to file', { log_layout(layout_glue_generator('{level} {msg}')) log_threshold(TRACE) diff --git a/tests/testthat/test-eval.R b/tests/testthat/test-eval.R index e66cbcf3..adb39d6d 100644 --- a/tests/testthat/test-eval.R +++ b/tests/testthat/test-eval.R @@ -9,7 +9,6 @@ appender <- log_appender() log_layout(layout_glue_generator('{level} {msg}')) log_appender(appender_stdout) -context('log_eval') test_that('single line', { expect_output(log_eval(4, INFO), sprintf("INFO %s => %s", shQuote(4), shQuote(4))) }) diff --git a/tests/testthat/test-formatters.R b/tests/testthat/test-formatters.R index df5df1ca..6bd6c7e9 100644 --- a/tests/testthat/test-formatters.R +++ b/tests/testthat/test-formatters.R @@ -6,7 +6,6 @@ library(jsonlite) formatter <- log_formatter() appender <- log_appender() -context('formatters') everything <- 42 g <- function() { log_info("Hi {everything}") @@ -137,8 +136,11 @@ test_that('special chars in the text work', { expect_output(log_info('JSON: {toJSON(iris[1:2, ], auto_unbox = TRUE)}'), '[{"Sepal.Length":5.1,"Sepal.Width":3.5,"Petal.Length":1.4,"Petal.Width":0.2,"Species":"setosa"},{"Sepal.Length":4.9,"Sepal.Width":3,"Petal.Length":1.4,"Petal.Width":0.2,"Species":"setosa"}]') # nolint }) -log_formatter(formatter_pander) test_that('pander formatter', { + log_formatter(formatter_pander) + # pander partially matches coef to coefficient + withr::local_options(warnPartialMatchDollar = FALSE) + expect_output(log_info(42), '_42_') expect_output(log_info('42'), '42') expect_output(log_info(head(iris)), 'Sepal.Length') diff --git a/tests/testthat/test-helpers.R b/tests/testthat/test-helpers.R index 210fc39c..c28b5adb 100644 --- a/tests/testthat/test-helpers.R +++ b/tests/testthat/test-helpers.R @@ -6,8 +6,6 @@ appender <- log_appender() log_appender(appender_stdout) -context('helpers') - test_that('separator', { original_layout <- log_layout() log_layout(layout_blank) diff --git a/tests/testthat/test-layout.R b/tests/testthat/test-layout.R index cbf648ce..ccb1018a 100644 --- a/tests/testthat/test-layout.R +++ b/tests/testthat/test-layout.R @@ -8,8 +8,6 @@ appender <- log_appender() log_appender(appender_stdout) -context('layouts') - log_layout(layout_blank) test_that('blank layout', { expect_output(log_info('foobar'), 'foobar') diff --git a/tests/testthat/test-logger.R b/tests/testthat/test-logger.R index 5af12401..925d3cb1 100644 --- a/tests/testthat/test-logger.R +++ b/tests/testthat/test-logger.R @@ -6,8 +6,6 @@ threshold <- log_threshold() appender <- log_appender() layout <- log_layout() -context('loggers') - log_appender(appender_stdout) log_threshold(WARN) diff --git a/tests/testthat/test-return.R b/tests/testthat/test-return.R index 611e22f2..37730d42 100644 --- a/tests/testthat/test-return.R +++ b/tests/testthat/test-return.R @@ -5,8 +5,6 @@ library(testthat) formatter <- log_formatter() appender <- log_appender() -context('return value') - t <- tempfile() log_appender(appender_file(t)) diff --git a/tests/testthat/test-utils.R b/tests/testthat/test-utils.R index 3217d594..d715b32b 100644 --- a/tests/testthat/test-utils.R +++ b/tests/testthat/test-utils.R @@ -5,8 +5,6 @@ library(testthat) appender <- log_appender() log_appender(appender_stdout) -context('utils') - test_that('fail_on_missing_package', { expect_error(fail_on_missing_package('logger'), NA) expect_error(fail_on_missing_package('logger', '9.9.9'))