File: try_catch.clj

package info (click to toggle)
clojure1.4 1.4.0%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: jessie, jessie-kfreebsd
  • size: 3,364 kB
  • ctags: 5,624
  • sloc: java: 25,822; xml: 417; sh: 69; makefile: 44
file content (39 lines) | stat: -rwxr-xr-x 1,520 bytes parent folder | download | duplicates (8)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
;   Copyright (c) Rich Hickey. All rights reserved.
;   The use and distribution terms for this software are covered by the
;   Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
;   which can be found in the file epl-v10.html at the root of this distribution.
;   By using this software in any fashion, you are agreeing to be bound by
;   the terms of this license.
;   You must not remove this notice, or any other, from this software.

; Author: Paul M Bauer 

(ns clojure.test-clojure.try-catch
  (:use clojure.test)
  (:import [clojure.test ReflectorTryCatchFixture 
                         ReflectorTryCatchFixture$Cookies]))

(defn- get-exception [expression]
  (try (eval expression)
    nil
    (catch java.lang.Throwable t
      t)))

(deftest catch-receives-checked-exception-from-eval
  (are [expression expected-exception] (= expected-exception
                                          (type (get-exception expression)))
    "Eh, I'm pretty safe" nil
    '(java.io.FileReader. "CAFEBABEx0/idonotexist") java.io.FileNotFoundException))


(defn fail [x]
  (ReflectorTryCatchFixture/fail x))

(defn make-instance []
  (ReflectorTryCatchFixture.))

(deftest catch-receives-checked-exception-from-reflective-call
  (is (thrown-with-msg? ReflectorTryCatchFixture$Cookies #"Long" (fail 1)))
  (is (thrown-with-msg? ReflectorTryCatchFixture$Cookies #"Double" (fail 1.0)))
  (is (thrown-with-msg? ReflectorTryCatchFixture$Cookies #"Wrapped"
        (.failWithCause (make-instance) 1.0))))