From 512a6f2220a0e54ab585ead1dec2b10995f637f9 Mon Sep 17 00:00:00 2001 From: rng-dynamics <73444470+rng-dynamics@users.noreply.github.com> Date: Thu, 20 May 2021 22:49:58 +0200 Subject: [PATCH] feat: print data of uncaught ExceptionInfo to output (#854) * feat: print data of uncaught ExceptionInfo to output * println -> prn, add tests --- src/babashka/impl/error_handler.clj | 3 +++ test/babashka/error_test.clj | 30 +++++++++++++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/babashka/impl/error_handler.clj b/src/babashka/impl/error_handler.clj index d0ad4750..e941c8ef 100644 --- a/src/babashka/impl/error_handler.clj +++ b/src/babashka/impl/error_handler.clj @@ -100,6 +100,9 @@ (.. e getClass getName))) (when-let [m (.getMessage e)] (println (str "Message: " m))) + (when-let [d (ex-data (.getCause e))] + (print (str "Data: ")) + (prn d)) (let [{:keys [:file :line :column]} d] (when line (println (str "Location: " diff --git a/test/babashka/error_test.clj b/test/babashka/error_test.clj index 857ca787..25914e35 100644 --- a/test/babashka/error_test.clj +++ b/test/babashka/error_test.clj @@ -169,3 +169,33 @@ user/quux - :1:15 user/quux - :1:1 user/bar - :1:69 user - :1:91")))) + +(deftest print-exception-data-test + (testing "output of uncaught ExceptionInfo" + (let [output (try (tu/bb nil "(let [d {:zero 0 :one 1}] (throw (ex-info \"some msg\" d)))") + (catch Exception e (ex-message e)))] + (multiline-equals output + "----- Error -------------------------------------------------------------------- +Type: clojure.lang.ExceptionInfo +Message: some msg +Data: {:zero 0, :one 1} +Location: :1:27 + +----- Context ------------------------------------------------------------------ +1: (let [d {:zero 0 :one 1}] (throw (ex-info \"some msg\" d))) + ^--- some msg + +----- Locals ------------------------------------------------------------------- +d: {:zero 0, :one 1}"))) + (testing "output of ordinary Exception" + (let [output (try (tu/bb nil "(throw (Exception. \"some msg\"))") + (catch Exception e (ex-message e)))] + (multiline-equals output + "----- Error -------------------------------------------------------------------- +Type: java.lang.Exception +Message: some msg +Location: :1:1 + +----- Context ------------------------------------------------------------------ +1: (throw (Exception. \"some msg\")) + ^--- some msg"))))