Skip to content

Commit

Permalink
transition expect_error()
Browse files Browse the repository at this point in the history
* ...to snapshot when testing the error message
* ...to classed error when testing an error from another package or an error thrown from a widely-used helper
* ...to `expect_no_error()` (or no test) when `regex = NA`
* Analogous story for `expect_warning()` and `expect_message()`.
  • Loading branch information
simonpcouch committed Oct 21, 2024
1 parent 1ff6363 commit b6c7314
Show file tree
Hide file tree
Showing 3 changed files with 43 additions and 6 deletions.
2 changes: 1 addition & 1 deletion R/utils-check.R
Original file line number Diff line number Diff line change
Expand Up @@ -144,7 +144,7 @@ check_unsupported_arg <- function(x,

msg <- c(msg, i = allow_msg)
}
cli_abort(msg, call = call)
cli_abort(msg, call = call, class = "unsupported_arg_error")
}

stop_unsupported_function <- function(f, ..., with = NULL, call = caller_env()) {
Expand Down
25 changes: 25 additions & 0 deletions tests/testthat/_snaps/backend-snowflake.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,28 @@
# pasting translated correctly

Code
test_translate_sql(paste0(x, collapse = ""))
Condition
Error in `check_collapse()`:
! `collapse` not supported in DB translation of `paste()`.
i Please use `str_flatten()` instead.

# difftime is translated correctly

Code
test_translate_sql(difftime(start_date, end_date, units = "auto"))
Condition
Error in `difftime()`:
! The only supported value for `units` on SQL backends is "days"

---

Code
test_translate_sql(difftime(start_date, end_date, tz = "UTC", units = "days"))
Condition
Error in `difftime()`:
! The `tz` argument is not supported for SQL backends.

# pmin() and pmax() respect na.rm

Code
Expand Down
22 changes: 17 additions & 5 deletions tests/testthat/test-backend-snowflake.R
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ test_that("pasting translated correctly", {
expect_equal(test_translate_sql(str_c(x, y)), sql("CONCAT_WS('', `x`, `y`)"))
expect_equal(test_translate_sql(str_c(x, y, sep = "|")), sql("CONCAT_WS('|', `x`, `y`)"))

expect_error(test_translate_sql(paste0(x, collapse = "")), "`collapse` not supported")
expect_snapshot(error = TRUE, test_translate_sql(paste0(x, collapse = "")))

expect_equal(test_translate_sql(str_flatten(x), window = TRUE), sql("LISTAGG(`x`, '') OVER ()"))
expect_equal(test_translate_sql(str_flatten(x, collapse = "|"), window = TRUE), sql("LISTAGG(`x`, '|') OVER ()"))
Expand Down Expand Up @@ -87,7 +87,10 @@ test_that("custom lubridate functions translated correctly", {
))
expect_equal(test_translate_sql(quarter(x)), sql("EXTRACT('quarter', `x`)"))
expect_equal(test_translate_sql(quarter(x, with_year = TRUE)), sql("(EXTRACT('year', `x`) || '.' || EXTRACT('quarter', `x`))"))
expect_error(test_translate_sql(quarter(x, fiscal_start = 2)))
expect_error(
test_translate_sql(quarter(x, fiscal_start = 2)),
class = "unsupported_arg_error"
)
expect_equal(test_translate_sql(isoyear(x)), sql("EXTRACT('year', `x`)"))

expect_equal(test_translate_sql(seconds(x)), sql("INTERVAL '`x` second'"))
Expand All @@ -106,7 +109,10 @@ test_that("custom clock functions translated correctly", {
local_con(simulate_snowflake())
expect_equal(test_translate_sql(add_years(x, 1)), sql("DATEADD(YEAR, 1.0, `x`)"))
expect_equal(test_translate_sql(add_days(x, 1)), sql("DATEADD(DAY, 1.0, `x`)"))
expect_error(test_translate_sql(add_days(x, 1, "dots", "must", "be empty")))
expect_error(
test_translate_sql(add_days(x, 1, "dots", "must", "be empty")),
class = "rlib_error_dots_nonempty"
)
expect_equal(test_translate_sql(date_build(2020, 1, 1)), sql("DATE_FROM_PARTS(2020.0, 1.0, 1.0)"))
expect_equal(test_translate_sql(date_build(year_column, 1L, 1L)), sql("DATE_FROM_PARTS(`year_column`, 1, 1)"))
expect_equal(test_translate_sql(get_year(date_column)), sql("DATE_PART(YEAR, `date_column`)"))
Expand All @@ -119,8 +125,14 @@ test_that("difftime is translated correctly", {
expect_equal(test_translate_sql(difftime(start_date, end_date, units = "days")), sql("DATEDIFF(DAY, `end_date`, `start_date`)"))
expect_equal(test_translate_sql(difftime(start_date, end_date)), sql("DATEDIFF(DAY, `end_date`, `start_date`)"))

expect_error(test_translate_sql(difftime(start_date, end_date, units = "auto")))
expect_error(test_translate_sql(difftime(start_date, end_date, tz = "UTC", units = "days")))
expect_snapshot(
error = TRUE,
test_translate_sql(difftime(start_date, end_date, units = "auto"))
)
expect_snapshot(
error = TRUE,
test_translate_sql(difftime(start_date, end_date, tz = "UTC", units = "days"))
)
})

test_that("min() and max()", {
Expand Down

0 comments on commit b6c7314

Please sign in to comment.