diff --git a/R/error.R b/R/error.R new file mode 100644 index 0000000..d4d23fc --- /dev/null +++ b/R/error.R @@ -0,0 +1,11 @@ +geocodebr_error <- function(message, call, .envir = parent.frame()) { + error_call <- sys.call(-1) + error_function <- as.name(error_call[[1]]) + + error_classes <- c( + paste0("geocodebr_error_", sub("^error_", "", error_function)), + "geocodebr_error" + ) + + cli::cli_abort(message, class = error_classes, call = call, .envir = .envir) +} diff --git a/tests/testthat/_snaps/error.md b/tests/testthat/_snaps/error.md new file mode 100644 index 0000000..8f8f631 --- /dev/null +++ b/tests/testthat/_snaps/error.md @@ -0,0 +1,9 @@ +# erro funciona corretamente + + Code + parent_function() + Condition + Error in `parent_function()`: + ! test + * info + diff --git a/tests/testthat/test-error.R b/tests/testthat/test-error.R new file mode 100644 index 0000000..14c3ec8 --- /dev/null +++ b/tests/testthat/test-error.R @@ -0,0 +1,12 @@ +parent_function <- function() error_test() + +error_test <- function() { + geocodebr_error(c("test", "*" = "info"), call = rlang::caller_env()) +} + +test_that("erro funciona corretamente", { + expect_error(parent_function(), class = "geocodebr_error_test") + expect_error(parent_function(), class = "geocodebr_error") + + expect_snapshot(parent_function(), error = TRUE, cnd_class = TRUE) +})