diff options
author | scgilardi <scgilardi@gmail.com> | 2009-02-15 05:45:49 +0000 |
---|---|---|
committer | scgilardi <scgilardi@gmail.com> | 2009-02-15 05:45:49 +0000 |
commit | 504ee3b34e60c92adb8e071d71f33c4dc9928894 (patch) | |
tree | 1cebc7eba70e0cd0c63af7e5936d2aa07078efa7 | |
parent | f4bc2008141857fbe32eeb54c8fcd0183b27ffee (diff) |
fix issue 18: test agents error handling. Patch from Shawn Hoover
-rw-r--r-- | src/clojure/contrib/test_clojure.clj | 4 | ||||
-rw-r--r-- | src/clojure/contrib/test_clojure/agents.clj | 29 |
2 files changed, 32 insertions, 1 deletions
diff --git a/src/clojure/contrib/test_clojure.clj b/src/clojure/contrib/test_clojure.clj index 6c262337..8bc921ab 100644 --- a/src/clojure/contrib/test_clojure.clj +++ b/src/clojure/contrib/test_clojure.clj @@ -24,7 +24,9 @@ :data-structures :numbers :sequences - :for]) + :for + :agents + ]) (defn test-name [test] diff --git a/src/clojure/contrib/test_clojure/agents.clj b/src/clojure/contrib/test_clojure/agents.clj new file mode 100644 index 00000000..30951fc0 --- /dev/null +++ b/src/clojure/contrib/test_clojure/agents.clj @@ -0,0 +1,29 @@ +;; Copyright (c) Shawn Hoover. 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. + +(ns clojure.contrib.test-clojure.agents + (:use clojure.contrib.test-is)) + +(deftest handle-all-throwables-during-agent-actions + ;; Bug fixed in r1198; previously hung Clojure or didn't report agent errors + ;; after OutOfMemoryError, yet wouldn't execute new actions. + (let [agt (agent nil)] + (send agt (fn [state] (throw (Throwable. "just testing Throwables")))) + (try + ;; Let the action finish; eat the "agent has errors" error that bubbles up + (await agt) + (catch RuntimeException _)) + (is (instance? Throwable (first (agent-errors agt)))) + (is (= 1 (count (agent-errors agt)))) + + ;; And now send an action that should work + (clear-agent-errors agt) + (is (= nil @agt)) + (send agt nil?) + (await agt) + (is (true? @agt)))) |