From 29256b51807f9031d112bdb985c0773d5cc82baa Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Mon, 6 Oct 2025 16:34:26 -0500 Subject: [PATCH 1/6] Make labels more flexible --- R/expect-equality.R | 10 ++++++---- R/expect-named.R | 7 ++++--- R/expect-setequal.R | 20 ++++++++++---------- tests/testthat/_snaps/expect-equality.md | 4 ++-- tests/testthat/_snaps/expect-named.md | 14 +++++++------- tests/testthat/_snaps/expect-setequal.md | 6 +++--- tests/testthat/_snaps/try-again.md | 2 +- 7 files changed, 33 insertions(+), 30 deletions(-) diff --git a/R/expect-equality.R b/R/expect-equality.R index f59cfc156..4dfe43e0c 100644 --- a/R/expect-equality.R +++ b/R/expect-equality.R @@ -68,7 +68,8 @@ expect_equal <- function( check_number_decimal(tolerance, min = 0, allow_null = TRUE) if (edition_get() >= 3) { - expect_waldo_equal_("equal", act, exp, info, ..., tolerance = tolerance) + msg <- "Expected %s to equal %s." + expect_waldo_equal_(msg, act, exp, info, ..., tolerance = tolerance) } else { if (!is.null(tolerance)) { comp <- compare(act$val, exp$val, ..., tolerance = tolerance) @@ -105,7 +106,8 @@ expect_identical <- function( exp <- quasi_label(enquo(expected), expected.label) if (edition_get() >= 3) { - expect_waldo_equal_("identical", act, exp, info, ...) + msg <- "Expected %s to be identical to %s." + expect_waldo_equal_(msg, act, exp, info, ...) } else { if (identical(act$val, exp$val, ...)) { pass() @@ -129,7 +131,7 @@ expect_identical <- function( } expect_waldo_equal_ <- function( - type, + msg, act, exp, info = NULL, @@ -147,7 +149,7 @@ expect_waldo_equal_ <- function( pass() } else { msg <- c( - sprintf("Expected %s to be %s to %s.", act$lab, type, exp$lab), + sprintf(msg, act$lab, exp$lab), "Differences:", paste0(comp, collpase = "\n") ) diff --git a/R/expect-named.R b/R/expect-named.R index a313ecf71..02615b82a 100644 --- a/R/expect-named.R +++ b/R/expect-named.R @@ -51,13 +51,14 @@ expect_named <- function( exp$val <- normalise_names(exp$val, ignore.order, ignore.case) act_names <- labelled_value( normalise_names(names(act$val), ignore.order, ignore.case), - paste0("names of ", act$lab) + act$lab ) + msg <- "Expected %s to have names %s." if (ignore.order) { - expect_setequal_(act_names, exp) + expect_setequal_(msg, act_names, exp) } else { - expect_waldo_equal_("equal", act_names, exp) + expect_waldo_equal_(msg, act_names, exp) } } diff --git a/R/expect-setequal.R b/R/expect-setequal.R index c8968a058..99f204659 100644 --- a/R/expect-setequal.R +++ b/R/expect-setequal.R @@ -34,10 +34,11 @@ expect_setequal <- function(object, expected) { testthat_warn("expect_setequal() ignores names") } - expect_setequal_(act, exp) + expect_setequal_("Expected %s to have the same values as %s.", act, exp) } expect_setequal_ <- function( + msg, act, exp, trace_env = caller_env() @@ -48,11 +49,7 @@ expect_setequal_ <- function( if (length(exp_miss) == 0 && length(act_miss) == 0) { pass() } else { - msg_exp <- sprintf( - "Expected %s to have the same values as %s.", - act$lab, - exp$lab - ) + msg_exp <- sprintf(msg, act$lab, exp$lab) msg_act <- c( sprintf("Actual: %s", values(act$val)), sprintf("Expected: %s", values(exp$val)), @@ -103,13 +100,16 @@ expect_mapequal <- function(object, expected) { pass() } else { if (!setequal(act_nms, exp_nms)) { - act_names <- labelled_value(names(act$val), paste0("names of ", act$lab)) - exp_names <- labelled_value(names(exp$val), paste0("names of ", exp$lab)) - expect_setequal_(act_names, exp_names) + msg <- "Expected %s to have the same names as %s." + act_names <- labelled_value(names(act$val), act$lab) + exp_names <- labelled_value(names(exp$val), exp$lab) + expect_setequal_(msg, act_names, exp_names) } else { if (edition_get() >= 3) { act <- labelled_value(act$val[exp_nms], act$lab) - expect_waldo_equal_("equal", act, exp) + + msg <- "Expected %s to contain same values as %s." + expect_waldo_equal_(msg, act, exp) } else { # Packages depend on 2e behaviour, but the expectation isn't written # to be reused, and we don't want to bother diff --git a/tests/testthat/_snaps/expect-equality.md b/tests/testthat/_snaps/expect-equality.md index 714b3cecd..39c919cf7 100644 --- a/tests/testthat/_snaps/expect-equality.md +++ b/tests/testthat/_snaps/expect-equality.md @@ -15,7 +15,7 @@ expect_equal(x, "a") Condition Error: - ! Expected `x` to be equal to "a". + ! Expected `x` to equal "a". Differences: `actual` is a double vector (1) `expected` is a character vector ('a') @@ -66,7 +66,7 @@ expect_equal(x, !!y) Condition Error: - ! Expected `x` to be equal to 2. + ! Expected `x` to equal 2. Differences: `actual`: 1.0 `expected`: 2.0 diff --git a/tests/testthat/_snaps/expect-named.md b/tests/testthat/_snaps/expect-named.md index 08f4f82e8..ab6e9d625 100644 --- a/tests/testthat/_snaps/expect-named.md +++ b/tests/testthat/_snaps/expect-named.md @@ -12,7 +12,7 @@ expect_named(x, "b") Condition Error: - ! Expected names of `x` to be equal to "b". + ! Expected `x` to have names "b". Differences: `actual`: "a" `expected`: "b" @@ -23,7 +23,7 @@ expect_named(x1, c("a", "b"), ignore.order = TRUE) Condition Error: - ! Expected names of `x1` to have the same values as `c("a", "b")`. + ! Expected `x1` to have names `c("a", "b")`. Actual: "a" Expected: "a", "b" Absent: "b" @@ -34,7 +34,7 @@ expect_named(x2, "a", ignore.order = TRUE) Condition Error: - ! Expected names of `x2` to have the same values as "a". + ! Expected `x2` to have names "a". Actual: "a", "b" Expected: "a" Needs: "b" @@ -45,7 +45,7 @@ expect_named(x1, "b", ignore.order = TRUE) Condition Error: - ! Expected names of `x1` to have the same values as "b". + ! Expected `x1` to have names "b". Actual: "a" Expected: "b" Needs: "a" @@ -57,7 +57,7 @@ expect_named(x1, c("a", "b"), ignore.order = FALSE) Condition Error: - ! Expected names of `x1` to be equal to `c("a", "b")`. + ! Expected `x1` to have names `c("a", "b")`. Differences: `actual`: "a" `expected`: "a" "b" @@ -68,7 +68,7 @@ expect_named(x2, "a", ignore.order = FALSE) Condition Error: - ! Expected names of `x2` to be equal to "a". + ! Expected `x2` to have names "a". Differences: `actual`: "a" "b" `expected`: "a" @@ -79,7 +79,7 @@ expect_named(x1, "b", ignore.order = FALSE) Condition Error: - ! Expected names of `x1` to be equal to "b". + ! Expected `x1` to have names "b". Differences: `actual`: "a" `expected`: "b" diff --git a/tests/testthat/_snaps/expect-setequal.md b/tests/testthat/_snaps/expect-setequal.md index b31e18ee6..ce6117093 100644 --- a/tests/testthat/_snaps/expect-setequal.md +++ b/tests/testthat/_snaps/expect-setequal.md @@ -115,7 +115,7 @@ expect_mapequal(x, y) Condition Error: - ! Expected names of `x` to have the same values as names of `y`. + ! Expected `x` to have the same names as `y`. Actual: "a", "b" Expected: "a" Needs: "b" @@ -126,7 +126,7 @@ expect_mapequal(y, x) Condition Error: - ! Expected names of `y` to have the same values as names of `x`. + ! Expected `y` to have the same names as `x`. Actual: "a" Expected: "a", "b" Absent: "b" @@ -137,7 +137,7 @@ expect_mapequal(x, y) Condition Error: - ! Expected `x` to be equal to `y`. + ! Expected `x` to contain same values as `y`. Differences: `actual$b`: 2.0 `expected$b`: 3.0 diff --git a/tests/testthat/_snaps/try-again.md b/tests/testthat/_snaps/try-again.md index 623946499..39c519f79 100644 --- a/tests/testthat/_snaps/try-again.md +++ b/tests/testthat/_snaps/try-again.md @@ -14,7 +14,7 @@ i Expectation failed; trying again (1)... Condition Error: - ! Expected `i` to be equal to 0. + ! Expected `i` to equal 0. Differences: `actual`: 1.0 `expected`: 0.0 From 3f1c8a9e1c713d011255dbff680e780883958bca Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Mon, 6 Oct 2025 16:51:21 -0500 Subject: [PATCH 2/6] Fix typo spotted by Claude --- R/expect-constant.R | 2 +- R/expect-equality.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/expect-constant.R b/R/expect-constant.R index b4b0917d4..7e120487b 100644 --- a/R/expect-constant.R +++ b/R/expect-constant.R @@ -86,7 +86,7 @@ expect_waldo_constant_ <- function( msg <- c( sprintf("Expected %s to be %s.", act$lab, exp$lab), "Differences:", - paste0(comp, collpase = "\n") + paste0(comp, collapse = "\n") ) fail(msg, info = info, trace_env = trace_env) } else { diff --git a/R/expect-equality.R b/R/expect-equality.R index 4dfe43e0c..df26ee9b0 100644 --- a/R/expect-equality.R +++ b/R/expect-equality.R @@ -151,7 +151,7 @@ expect_waldo_equal_ <- function( msg <- c( sprintf(msg, act$lab, exp$lab), "Differences:", - paste0(comp, collpase = "\n") + paste0(comp, collapse = "\n") ) fail(msg, info = info, trace_env = trace_env) } From ce17d245b3d0ffbfb146a5a9b895d8a18dead657 Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Tue, 7 Oct 2025 14:44:10 -0500 Subject: [PATCH 3/6] Revert "Fix typo spotted by Claude" This reverts commit 3f1c8a9e1c713d011255dbff680e780883958bca. --- R/expect-constant.R | 2 +- R/expect-equality.R | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/expect-constant.R b/R/expect-constant.R index 7e120487b..b4b0917d4 100644 --- a/R/expect-constant.R +++ b/R/expect-constant.R @@ -86,7 +86,7 @@ expect_waldo_constant_ <- function( msg <- c( sprintf("Expected %s to be %s.", act$lab, exp$lab), "Differences:", - paste0(comp, collapse = "\n") + paste0(comp, collpase = "\n") ) fail(msg, info = info, trace_env = trace_env) } else { diff --git a/R/expect-equality.R b/R/expect-equality.R index df26ee9b0..4dfe43e0c 100644 --- a/R/expect-equality.R +++ b/R/expect-equality.R @@ -151,7 +151,7 @@ expect_waldo_equal_ <- function( msg <- c( sprintf(msg, act$lab, exp$lab), "Differences:", - paste0(comp, collapse = "\n") + paste0(comp, collpase = "\n") ) fail(msg, info = info, trace_env = trace_env) } From 5a9952aa170fe2053f1907a409538de5428b1e14 Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Tue, 7 Oct 2025 14:44:28 -0500 Subject: [PATCH 4/6] Update R/expect-setequal.R Co-authored-by: Davis Vaughan --- R/expect-setequal.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/expect-setequal.R b/R/expect-setequal.R index 99f204659..1d3b52197 100644 --- a/R/expect-setequal.R +++ b/R/expect-setequal.R @@ -108,7 +108,7 @@ expect_mapequal <- function(object, expected) { if (edition_get() >= 3) { act <- labelled_value(act$val[exp_nms], act$lab) - msg <- "Expected %s to contain same values as %s." + msg <- "Expected %s to contain the same values as %s." expect_waldo_equal_(msg, act, exp) } else { # Packages depend on 2e behaviour, but the expectation isn't written From 4c5eba0a61757414a591bc25a2fefc4c0f8f8978 Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Tue, 7 Oct 2025 14:45:00 -0500 Subject: [PATCH 5/6] Update snapshot --- tests/testthat/_snaps/expect-setequal.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/testthat/_snaps/expect-setequal.md b/tests/testthat/_snaps/expect-setequal.md index ce6117093..c0302d10f 100644 --- a/tests/testthat/_snaps/expect-setequal.md +++ b/tests/testthat/_snaps/expect-setequal.md @@ -137,7 +137,7 @@ expect_mapequal(x, y) Condition Error: - ! Expected `x` to contain same values as `y`. + ! Expected `x` to contain the same values as `y`. Differences: `actual$b`: 2.0 `expected$b`: 3.0 From 609864ba606cb5518a6eae244cda9e17c66eda5f Mon Sep 17 00:00:00 2001 From: Hadley Wickham Date: Tue, 7 Oct 2025 14:46:38 -0500 Subject: [PATCH 6/6] WS --- R/expect-setequal.R | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/R/expect-setequal.R b/R/expect-setequal.R index 416e5ca51..764614bee 100644 --- a/R/expect-setequal.R +++ b/R/expect-setequal.R @@ -37,12 +37,7 @@ expect_setequal <- function(object, expected) { expect_setequal_("Expected %s to have the same values as %s.", act, exp) } -expect_setequal_ <- function( - msg, - act, - exp, - trace_env = caller_env() -) { +expect_setequal_ <- function(msg, act, exp, trace_env = caller_env()) { act_miss <- unique(act$val[!act$val %in% exp$val]) exp_miss <- unique(exp$val[!exp$val %in% act$val])