Skip to content

Commit

Permalink
Correct expect_setequal() failure message (#1837)
Browse files Browse the repository at this point in the history
Fixes #1835
  • Loading branch information
hadley committed Jul 26, 2023
1 parent 65a3800 commit 4b57565
Show file tree
Hide file tree
Showing 4 changed files with 31 additions and 17 deletions.
3 changes: 3 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# testthat (development version)

* `expect_setequal()` correctly displays results when only one of actual and
expected is missing values (#1835).

# testthat 3.1.10

* Fix for upcoming R-devel release.
Expand Down
6 changes: 3 additions & 3 deletions R/expect-setequal.R
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,10 @@ expect_setequal <- function(object, expected) {
if (any(exp_miss) || any(act_miss)) {
fail(paste0(
act$lab, " (`actual`) and ", exp$lab, " (`expected`) don't have the same values.\n",
if (any(exp_miss))
paste0("* Only in `actual`: ", values(act$val[act_miss]), "\n"),
if (any(act_miss))
paste0("* Only in `expected`: ", values(exp$val[exp_miss]), "\n")
paste0("* Only in `expected`: ", values(act$val[act_miss]), "\n"),
if (any(exp_miss))
paste0("* Only in `actual`: ", values(exp$val[exp_miss]), "\n")
))
} else {
succeed()
Expand Down
25 changes: 18 additions & 7 deletions tests/testthat/_snaps/expect-setequal.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,26 @@
# useful message on faillure
# useful message on failure

`x1` (`actual`) and `x2` (`expected`) don't have the same values.
* Only in `actual`: "a"
* Only in `expected`: "c"
1:2 (`actual`) and 2 (`expected`) don't have the same values.
* Only in `expected`: 1


---

`y1` (`actual`) and `y2` (`expected`) don't have the same values.
* Only in `actual`: 1
* Only in `expected`: 4, 5, 6, 7, 8, 9, 10, 11, 12, ...
2 (`actual`) and 2:3 (`expected`) don't have the same values.
* Only in `actual`: 3


---

1:2 (`actual`) and 2:3 (`expected`) don't have the same values.
* Only in `expected`: 1
* Only in `actual`: 3


# truncates long vectors

1:2 (`actual`) and 1:50 (`expected`) don't have the same values.
* Only in `actual`: 3, 4, 5, 6, 7, 8, 9, 10, 11, ...


# expect_contains() gives useful message on failure
Expand Down
14 changes: 7 additions & 7 deletions tests/testthat/test-expect-setequal.R
Original file line number Diff line number Diff line change
Expand Up @@ -23,14 +23,14 @@ test_that("error for non-vectors", {
expect_error(expect_setequal(sum, sum), "be vectors")
})

test_that("useful message on faillure", {
x1 <- c("a", "b")
x2 <- c("b", "c")
y1 <- 1:3
y2 <- 2:50
test_that("useful message on failure", {
expect_snapshot_failure(expect_setequal(1:2, 2))
expect_snapshot_failure(expect_setequal(2, 2:3))
expect_snapshot_failure(expect_setequal(1:2, 2:3))
})

expect_snapshot_failure(expect_setequal(x1, x2))
expect_snapshot_failure(expect_setequal(y1, y2))
test_that("truncates long vectors", {
expect_snapshot_failure(expect_setequal(1:2, 1:50))
})

# mapequal ----------------------------------------------------------------
Expand Down

0 comments on commit 4b57565

Please sign in to comment.