|
233 | 233 | "}
|
234 | 234 | clojure.test
|
235 | 235 | (:require [clojure.template :as temp]
|
236 |
| - [clojure.stacktrace :as stack])) |
| 236 | + [clojure.stacktrace :as stack] |
| 237 | + [clojure.string :as str])) |
237 | 238 |
|
238 | 239 | ;; Nothing is marked "private" here, so you can rebind things to plug
|
239 | 240 | ;; in your own testing or reporting frameworks.
|
|
331 | 332 | :added "1.1"}
|
332 | 333 | report :type)
|
333 | 334 |
|
334 |
| -(defn- file-and-line |
| 335 | +(defn- file-and-line |
| 336 | + {:deprecated "1.8"} |
335 | 337 | [^Throwable exception depth]
|
336 | 338 | (let [stacktrace (.getStackTrace exception)]
|
337 | 339 | (if (< depth (count stacktrace))
|
338 | 340 | (let [^StackTraceElement s (nth stacktrace depth)]
|
339 | 341 | {:file (.getFileName s) :line (.getLineNumber s)})
|
340 | 342 | {:file nil :line nil})))
|
341 | 343 |
|
| 344 | +(defn- stacktrace-file-and-line |
| 345 | + [stacktrace] |
| 346 | + (if (seq stacktrace) |
| 347 | + (let [^StackTraceElement s (first stacktrace)] |
| 348 | + {:file (.getFileName s) :line (.getLineNumber s)}) |
| 349 | + {:file nil :line nil})) |
| 350 | + |
342 | 351 | (defn do-report
|
343 | 352 | "Add file and line information to a test result and call report.
|
344 | 353 | If you are writing a custom assert-expr method, call this function
|
|
348 | 357 | (report
|
349 | 358 | (case
|
350 | 359 | (:type m)
|
351 |
| - :fail (merge (file-and-line (new java.lang.Throwable) 1) m) |
352 |
| - :error (merge (file-and-line (:actual m) 0) m) |
| 360 | + :fail (merge (stacktrace-file-and-line (drop-while |
| 361 | + #(let [cl-name (.getClassName ^StackTraceElement %)] |
| 362 | + (or (str/starts-with? cl-name "java.lang.") |
| 363 | + (str/starts-with? cl-name "clojure.test$"))) |
| 364 | + (.getStackTrace (Thread/currentThread)))) m) |
| 365 | + :error (merge (stacktrace-file-and-line (.getStackTrace ^Throwable (:actual m))) m) |
353 | 366 | m)))
|
354 | 367 |
|
355 | 368 | (defmethod report :default [m]
|
|
0 commit comments